У меня есть 500 состояний, действий, наград и скрытых состояний. Но я получаю ошибку времени выполнения из-за несовпадающих форм.
Произошло исключение: RuntimeError
Размер тензора a (500) должен соответствовать размеру тензора b (16) в неодноэлементном измерении 0
Файл "/mnt/c/Users/User/code/VideoPPO/test.py", строка 33, в
выходных данных = model(features, (h_x, c_x))
Ошибка выполнения: Размер тензора a (500) должен соответствовать размеру тензора b
(16) в неодноэлементном измерении 0
Это происходит потому, что у меня 500 состояний, но после разделения их на последовательности по 32 состояния в каждой нам нужно в 32 раза меньше скрытых состояний и Я не знаю, как это сделать. То есть у нас есть скрытые состояния с формой [2, 500, 256], но нам нужна форма [2, 16, 256].
Небольшое уточнение: это упрощенный код для задачи RL, в которой мы объединяем состояния, действия и вознаграждения, а затем отправляем их в LSTM для получения результатов.
Это код.
import torch as t
from torch import nn
model = nn.LSTM(67, 256, num_layers=2, batch_first=True)
states = t.randn(500, 64) # [n_steps, state_dim]
actions = t.randn(500, 2) # [n_steps, action_dim]
rewards = t.randn(500, 1) # [n_steps, reward_dim]
h_x = t.randn(2, 500, 256) # [num_layers, n_steps, hidden_size]
c_x = t.randn(2, 500, 256) # [num_layers, n_steps, hidden_size]
# Split into sequences.
# We get 16 sequences where the last one is not full.
states = t.split(states, split_size_or_sections=32)
actions = t.split(actions, split_size_or_sections=32)
rewards = t.split(rewards, split_size_or_sections=32)
# Compute unpadded lengths
lengths = [i.shape[0] for i in states]
# Padding
states = t.nn.utils.rnn.pad_sequence(states, batch_first=True, padding_value=0)
actions = t.nn.utils.rnn.pad_sequence(actions, batch_first=True, padding_value=0)
rewards = t.nn.utils.rnn.pad_sequence(rewards, batch_first=True, padding_value=0)
# Concatenation and packing.
features = t.cat([states, actions, rewards], dim=-1)
features = t.nn.utils.rnn.pack_padded_sequence(features, lengths, batch_first=True, enforce_sorted=True)
# LSTM forward
with t.no_grad():
"""
Exception has occurred: RuntimeError
The size of tensor a (500) must match the size of tensor b (16) at non-singleton dimension 0
File "/mnt/c/Users/User/code/VideoPPO/test.py", line 33, in
outputs = model(features, (h_x, c_x))
RuntimeError: The size of tensor a (500) must match the size of tensor b (16) at non-singleton dimension 0
"""
"""
Error has occured because we have hidden states with the shape
[2, 500, 256] while as we must have shape [2, 500 // 32, 256] and we need 32 times fewer of data.
"""
outputs = model(features, (h_x, c_x))
# Unpacking
outputs, lengths = t.nn.utils.rnn.pad_packed_sequence(features, batch_first=True, padding_value=0.0)
# Unpadding
outputs = t.nn.utils.rnn.unpad_sequence(outputs, lengths, batch_first=True)
# Concatenation
outputs = t.cat(outputs, dim=0)
pass
Подробнее здесь: https://stackoverflow.com/questions/798 ... -sequences
Как подготовить состояние ячейки для ввода, разделенного на последовательности ⇐ Python
Программы на Python
1762172187
Anonymous
У меня есть 500 состояний, действий, наград и скрытых состояний. Но я получаю ошибку времени выполнения из-за несовпадающих форм.
Произошло исключение: RuntimeError
Размер тензора a (500) должен соответствовать размеру тензора b (16) в неодноэлементном измерении 0
Файл "/mnt/c/Users/User/code/VideoPPO/test.py", строка 33, в
выходных данных = model(features, (h_x, c_x))
Ошибка выполнения: Размер тензора a (500) должен соответствовать размеру тензора b
(16) в неодноэлементном измерении 0
Это происходит потому, что у меня 500 состояний, но после разделения их на последовательности по 32 состояния в каждой нам нужно в 32 раза меньше скрытых состояний и Я не знаю, как это сделать. То есть у нас есть скрытые состояния с формой [2, 500, 256], но нам нужна форма [2, 16, 256].
Небольшое уточнение: это упрощенный код для задачи RL, в которой мы объединяем состояния, действия и вознаграждения, а затем отправляем их в LSTM для получения результатов.
Это код.
import torch as t
from torch import nn
model = nn.LSTM(67, 256, num_layers=2, batch_first=True)
states = t.randn(500, 64) # [n_steps, state_dim]
actions = t.randn(500, 2) # [n_steps, action_dim]
rewards = t.randn(500, 1) # [n_steps, reward_dim]
h_x = t.randn(2, 500, 256) # [num_layers, n_steps, hidden_size]
c_x = t.randn(2, 500, 256) # [num_layers, n_steps, hidden_size]
# Split into sequences.
# We get 16 sequences where the last one is not full.
states = t.split(states, split_size_or_sections=32)
actions = t.split(actions, split_size_or_sections=32)
rewards = t.split(rewards, split_size_or_sections=32)
# Compute unpadded lengths
lengths = [i.shape[0] for i in states]
# Padding
states = t.nn.utils.rnn.pad_sequence(states, batch_first=True, padding_value=0)
actions = t.nn.utils.rnn.pad_sequence(actions, batch_first=True, padding_value=0)
rewards = t.nn.utils.rnn.pad_sequence(rewards, batch_first=True, padding_value=0)
# Concatenation and packing.
features = t.cat([states, actions, rewards], dim=-1)
features = t.nn.utils.rnn.pack_padded_sequence(features, lengths, batch_first=True, enforce_sorted=True)
# LSTM forward
with t.no_grad():
"""
Exception has occurred: RuntimeError
The size of tensor a (500) must match the size of tensor b (16) at non-singleton dimension 0
File "/mnt/c/Users/User/code/VideoPPO/test.py", line 33, in
outputs = model(features, (h_x, c_x))
RuntimeError: The size of tensor a (500) must match the size of tensor b (16) at non-singleton dimension 0
"""
"""
Error has occured because we have hidden states with the shape
[2, 500, 256] while as we must have shape [2, 500 // 32, 256] and we need 32 times fewer of data.
"""
outputs = model(features, (h_x, c_x))
# Unpacking
outputs, lengths = t.nn.utils.rnn.pad_packed_sequence(features, batch_first=True, padding_value=0.0)
# Unpadding
outputs = t.nn.utils.rnn.unpad_sequence(outputs, lengths, batch_first=True)
# Concatenation
outputs = t.cat(outputs, dim=0)
pass
Подробнее здесь: [url]https://stackoverflow.com/questions/79807855/how-to-prepare-the-cell-state-for-inputs-split-into-sequences[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия