pytorch写Bi-GRU
时间: 2023-10-18 13:05:36 浏览: 108
下面是一个简单的PyTorch实现Bi-GRU的示例代码:
```python
import torch
import torch.nn as nn
class BiGRU(nn.Module):
def __init__(self, input_size, hidden_size, num_layers, dropout):
super(BiGRU, self).__init__()
self.hidden_size = hidden_size
self.num_layers = num_layers
self.dropout = dropout
self.gru = nn.GRU(input_size, hidden_size, num_layers, batch_first=True, bidirectional=True)
self.fc = nn.Linear(hidden_size * 2, 1) # 2 for bidirectional, 1 for binary classification
def forward(self, x):
h0 = torch.zeros(self.num_layers * 2, x.size(0), self.hidden_size).to(device) # 2 for bidirectional
out, _ = self.gru(x, h0)
out = out[:, -1, :] # only use last hidden state
out = self.fc(out)
out = torch.sigmoid(out)
return out
```
在这个例子中,我们定义了一个BiGRU类,它继承了nn.Module类。我们将输入大小、隐藏大小、层数和dropout率作为参数传递给构造函数。然后,在构造函数中,我们定义了一个nn.GRU层,它是一个双向GRU层,同时还有一个全连接层,用于二分类任务。在forward()函数中,我们首先将输入传递到GRU层中,然后只使用最后一个隐藏状态,并将其传递到全连接层中。最后,我们使用sigmoid函数对输出进行激活,以使其落在0到1之间,以进行二分类。
这是一个简单的PyTorch Bi-GRU模型实现,你可以根据你的需求进行修改。
阅读全文