class GRUNet(nn.Module): def __init__(self, input_dim, hidden_dim, output_dim, n_layers, drop_prob=0.2): super(GRUNet, self).__init__() self.hidden_dim = hidden_dim self.n_layers = n_layers self.gru = nn.GRU(input_dim, hidden_dim, n_layers, batch_first=True, dropout=drop_prob) self.fc = nn.Linear(hidden_dim, output_dim) self.relu = nn.ReLU() def forward(self, x, h): out, h = self.gru(x, h) out = self.fc(self.relu(out[:, -1])) return out, h def init_hidden(self, batch_size): weight = next(self.parameters()).data hidden = weight.new(self.n_layers, batch_size, self.hidden_dim).zero_().to(device) return hidden
时间: 2024-04-26 15:24:42 浏览: 178
这段代码定义了一个GRU神经网络模型的类`GRUNet`,包含了初始化函数`__init__()`、前向传播函数`forward()`和初始化隐藏状态的函数`init_hidden()`。
在初始化函数`__init__()`中,定义了输入维度`input_dim`、隐藏层维度`hidden_dim`、输出维度`output_dim`、GRU层数`n_layers`和dropout概率`drop_prob`等参数。通过`super()`函数调用父类`nn.Module`的初始化函数,初始化神经网络模型。接着,定义了GRU层`self.gru`,使用`nn.GRU()`函数创建一个GRU层,其中`input_dim`表示输入特征的维度,`hidden_dim`表示隐藏层的维度,`n_layers`表示GRU层数,`batch_first=True`表示输入的第一维为批次大小,`dropout=drop_prob`表示dropout概率为`drop_prob`。然后,定义了全连接层`self.fc`,使用`nn.Linear()`函数创建一个全连接层,输入维度为`hidden_dim`,输出维度为`output_dim`。最后,定义了ReLU激活函数`self.relu`。
在前向传播函数`forward()`中,输入`x`和隐藏状态`h`,通过GRU层`self.gru`计算输出`out`和新的隐藏状态`h`。然后,将`out`的最后一个时刻的输出通过全连接层`self.fc`和ReLU激活函数`self.relu`计算得到最终的输出`out`。最后,将`out`和新的隐藏状态`h`返回。
在初始化隐藏状态的函数`init_hidden()`中,输入批次大小`batch_size`,通过`next(self.parameters()).data`获取模型的参数,并使用`new()`函数创建一个与模型参数相同的张量`hidden`,并将其值初始化为0。最后,将`hidden`移动到指定的设备上并返回。
阅读全文