python - 堆叠两个具有不同隐藏层的 LSTM
问题描述
我想创建包含不同隐藏层的 LSTM 层来预测时间序列数据,因为 LSTM_1 的第一层包含 10 个隐藏层,LSTM_2 包含 1 个隐藏层,建议的神经网络架构如下所示
def __init__(self, nb_features=1, hidden_size_1=100, hidden_size_2=100, nb_layers_1 =10, nb_layers_2 = 1, dropout=0.5): #(self, nb_features=1, hidden_size=100, nb_layers=10, dropout=0.5):
super(Sequence, self).__init__()
self.nb_features = nb_features
self.hidden_size_1 = hidden_size_1
self.hidden_size_2 = hidden_size_2
self.nb_layers_1 =nb_layers_1
self.nb_layers_2 = nb_layers_2
self.lstm_1 = nn.LSTM(self.nb_features, self.hidden_size_1, self.nb_layers_1, dropout=dropout)
self.lstm_2 = nn.LSTM(self.hidden_size_1, self.hidden_size_2, self.nb_layers_2, dropout=dropout)
self.lin = nn.Linear(self.hidden_size_2, 1)
def forward(self, input):
h_t1 = Variable(torch.zeros(self.nb_layers_1, input.size()[1], self.hidden_size_1))
c_t1 = Variable(torch.zeros(self.nb_layers_1, input.size()[1], self.hidden_size_1))
h_t2 = Variable(torch.zeros(self.nb_layers_2, input.size()[1], self.hidden_size_2))
c_t2 = Variable(torch.zeros(self.nb_layers_2, input.size()[1], self.hidden_size_2))
outputs = []
for i, input_t in enumerate(input.chunk(input.size(1))):
h_t1, c_t1 = self.lstm_1(input_t, (h_t1, c_t1))
h_t2, _ = self.lstm_2(h_t1, (h_t2, c_t2))
output = self.lin(h_t2[-1])
outputs += [output]
outputs = torch.stack(outputs, 1).squeeze(2)
return outputs
但是,上面的代码出现运行时错误“RuntimeError: Expected hidden[0] size (3, 60, 100), got (1, 60, 100)”。上面的代码是否正确,您能否提出一些建议?非常感谢
解决方案
推荐阅读
- git - 管理多个开发人员对 XML 配置文件进行大量更改的 Git 工作流
- rspec - Capybara 警告“检查预期的 nil 文本”
- javascript - JQuery/JavaScript 如何将字母“s”切换到时间段列表?
- saxon - 撒克逊 - 我们可以查询它是否使用模式
- excel - 如何在起诉 VBA 的 Outlook 电子邮件中添加 PDF 附件?
- angular - 比较两个 Observable 的值并返回一个 Observable
- groovy - groovy 中记录的 println 和其他全局符号在哪里以及它们在哪里定义?
- c# - Json 列 SQL
- python - 如何从熊猫中的日期时间索引制作星期几标志
- html - 用异常对 RAND 中的 SQL 查询进行排序