我正在使用
container_commands:
03wsgipass:
command: 'echo "WSGIPassAuthorization On" >> ../wsgi.conf'
创建一个 RNN ,它看起来像这样:
pytorch
我的输入class MyRNN(nn.Module):
def __init__(self, batch_size, n_inputs, n_neurons, n_outputs):
super(MyRNN, self).__init__()
self.n_neurons = n_neurons
self.batch_size = batch_size
self.n_inputs = n_inputs
self.n_outputs = n_outputs
self.basic_rnn = nn.RNN(self.n_inputs, self.n_neurons)
self.FC = nn.Linear(self.n_neurons, self.n_outputs)
def init_hidden(self, ):
# (num_layers, batch_size, n_neurons)
return torch.zeros(1, self.batch_size, self.n_neurons)
def forward(self, X):
self.batch_size = X.size(0)
self.hidden = self.init_hidden()
lstm_out, self.hidden = self.basic_rnn(X, self.hidden)
out = self.FC(self.hidden)
return out.view(-1, self.n_outputs)
如下:
x
是一批大小为15的64个向量。
尝试通过以下方式测试此模型时:
tensor([[-1.0173e-04, -1.5003e-04, -1.0218e-04, -7.4541e-05, -2.2869e-05,
-7.7171e-02, -4.4630e-03, -5.0750e-05, -1.7911e-04, -2.8082e-04,
-9.2992e-06, -1.5608e-05, -3.5471e-05, -4.9127e-05, -3.2883e-01],
[-1.1193e-04, -1.6928e-04, -1.0218e-04, -7.4541e-05, -2.2869e-05,
-7.7171e-02, -4.4630e-03, -5.0750e-05, -1.7911e-04, -2.8082e-04,
-9.2992e-06, -1.5608e-05, -3.5471e-05, -4.9127e-05, -3.2883e-01],
...
[-6.9490e-05, -8.9197e-05, -1.0218e-04, -7.4541e-05, -2.2869e-05,
-7.7171e-02, -4.4630e-03, -5.0750e-05, -1.7911e-04, -2.8082e-04,
-9.2992e-06, -1.5608e-05, -3.5471e-05, -4.9127e-05, -3.2883e-01]],
dtype=torch.float64)
我收到以下错误:
BATCH_SIZE = 64
N_INPUTS = 15
N_NEURONS = 150
N_OUTPUTS = 1
model = MyRNN(BATCH_SIZE, N_INPUTS, N_NEURONS, N_OUTPUTS)
model(x)
我该如何解决?
答案 0 :(得分:1)
您缺少RNN图层所需的尺寸之一。
每个documentation的输入大小必须为形状(序列长度,批处理,输入大小)。
所以-在上面的示例中,您缺少其中之一。根据您的变量名称,您似乎正在尝试传递64个示例,每个示例包含15个输入...如果是这样,则表示缺少序列长度。
对于RNN,序列长度是您希望图层重复出现的次数。例如,在NLP中,序列长度可能等于一个句子中的单词数,而批处理大小将是您要传递的句子数,而输入大小将是每个单词的向量大小。
如果您只是想使用64个大小为15的样本,则可能不需要RNN。
答案 1 :(得分:0)
请参见documentation,RNN层期望
形状的输入(seq_len,batch,input_size):包含输入序列特征的张量。
在您的情况下,您的“大小”似乎是序列的长度,并且每个时间步都有一个功能。为15个功能进行了编辑,一个时间步
# 15 features, 150 neurons
rnn = nn.RNN(15, 150)
# sequence of length 1, batch size 64, 15 features
x = torch.rand(1, 64, 15)
res, _ = rnn(x)
print(res.shape)
# => torch.Size([1, 64, 150])
Also note that you don't need to prespecify batch size.