问题描述
我想实现一个 GRU,能够将向量序列编码为一个向量(多对一),然后另一个 GRU 能够将向量解码为向量序列(一对多)。向量的大小不会改变。我想对我实施的内容发表意见。
代码如下:
class GRU(nn.Module):
def __init__(self,opt):
super(GRU,self).__init__()
self.input_size = 512*3
self.length_sequence = 30
self.hidden_size = self.input_size
self.num_layers = 1
self.GRU_enc = nn.GRU(input_size=self.input_size,hidden_size=self.hidden_size,num_layers=self.num_layers,batch_first=True)
self.GRU_dec = nn.GRU(input_size=self.input_size,batch_first=True)
# many-to-one
def enc(self,x):
# x is of shape BxLx512*3
h0 = torch.zeros(self.num_layers,x.shape[0],self.hidden_size).cuda()
out,_ = self.GRU_enc(x,h0)
out_last = out[:,-1,:]
return out_last
# one-to-many
def dec(self,x):
x = x[:,None,...]
h = torch.zeros(self.num_layers,self.hidden_size).cuda()
outputs = []
for i in range(self.length_sequence):
out,h = self.GRU_dec(x,h)
outputs.append(out)
output = torch.cat(outputs,dim=1)
return output
def forward(self,x):
one = self.enc(x)
many = self.dec(one)
return many
我不确定这是否是执行一对多 GRU 的好方法。我可以对此发表一些意见吗?
另外,你认为我需要在编码/解码后添加一些线性层,或者一些激活函数吗?
最后,参数数量相当大(一层28M,两层55M)。我的数据集中需要多少个样本才能学到东西?
感谢阅读!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)