实现基本循环神经网络模型循环单元为nnRNN或GRU输出层的全连接使用RNN所有时间步的输出隐状态初始值为0测试前向传播如果采用顺序划分需梯度截断训练:损失函数为平均交叉熵预测:给定一个前缀进行单步预测和K步预测。
import torch import torch.nn as nn
class RNNModel(nn.Module): def init(self, input_size, hidden_size, output_size, num_layers, rnn_type='gru'): super(RNNModel, self).init() self.input_size = input_size self.hidden_size = hidden_size self.output_size = output_size self.num_layers = num_layers self.rnn_type = rnn_type
if self.rnn_type == 'gru':
self.rnn = nn.GRU(input_size, hidden_size, num_layers, batch_first=True)
else:
self.rnn = nn.RNN(input_size, hidden_size, num_layers, batch_first=True)
self.fc = nn.Linear(hidden_size, output_size)
def forward(self, input, hidden=None):
if hidden is None:
hidden = torch.zeros(self.num_layers, input.size(0), self.hidden_size)
output, hidden = self.rnn(input, hidden)
output = self.fc(output.reshape(-1, self.hidden_size))
return output, hidden
def init_hidden(self, batch_size):
return torch.zeros(self.num_layers, batch_size, self.hidden_size
原文地址: https://www.cveoy.top/t/topic/fFyV 著作权归作者所有。请勿转载和采集!