Формат ввода для слоя RNN - PullRequest
       9

Формат ввода для слоя RNN

0 голосов
/ 19 октября 2019

В настоящее время я пытаюсь реализовать RNN, используя PyTorch для основной задачи обучения. Раньше я пытался решить ту же задачу, используя только линейные и простые нелинейные слои, которые работали достаточно хорошо, но теперь я не знаю, как на самом деле использовать PyN-сети PyTorch в моей сети. В частности, я не понимаю, в каком формате должны быть данные, чтобы я мог передать их в свой RNN.

Это сеть, которая у меня сейчас есть:

import torch
import torch.nn as nn
import hyperparameters as hyper

class FirstNet(nn.Module):
    def __init__(self):
        super(FirstNet, self).__init__()
        self.hidden_dim = 10
        self.rnn = nn.RNN(hyper.batch_size, self.hidden_dim, 2)
        self.linear = nn.Linear(self.hidden_dim, 1)

    def forward(self, x, h):
        x, h1 = self.rnn(x, h)
        x = self.linear(x)
        return x, h1

Теперь, если я попытаюсьподать пакет моих данных (который в данном случае является партией векторов 2х1 [x,y]) в эту сеть, вызвав
out, h = net(batch, h)
Я получаю
RuntimeError: input.size(-1) must be equal to input_size. Expected 850, got 1, где 850 - мой текущийразмер пакета.

Документация гласит, что ввод должен быть в форме (seq_len, batch, input_size), которая, как я думал, в моем случае будет (850, data, 2), но, видимо, здесь я что-то неправильно понял.
Я пробовал разные способы сгруппировать входные данные, но, похоже, не могу найти правильный формат, поэтому я был бы очень признателен, если бы кто-то указал мне правильное направление относительно того, что я делаю неправильно.

Для примера ввода:
Я не могу воспроизвести сообщение об ошибке, которое я получил ранее, но чтобы привести пример ввода, я попытался подать в сеть кортеж (850, batch, 2), где batch - это тензор с размерностью 850x2x1, но затем получил ошибкуr сообщение
AttributeError: 'tuple' object has no attribute 'size'
, которое звучит для меня как кортеж, не является правильным форматом (хотя оно написано как кортеж в документации).

Редактировать 2: Теперь мне также удалосьвоспроизвести первую ошибку:
С

batch_in = torch.zeros(hyper.batch_size, 1, 2)
seq_ls = []
for i in range(0,len(lbatch)):
    batch_in[i] = lbatch[i]
    seq_ls.append(2)

packed_batch = pack_sequence(batch_in, seq_ls)

Я получаю RuntimeError: input.size(-1) must be equal to input_size. Expected 850, got 2, где я полностью теряюсь в том, почему это так.

...