Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 试图在GRU字符RNN中过度匹配_Python_Pytorch_Recurrent Neural Network - Fatal编程技术网

Python 试图在GRU字符RNN中过度匹配

Python 试图在GRU字符RNN中过度匹配,python,pytorch,recurrent-neural-network,Python,Pytorch,Recurrent Neural Network,我有一个GRU网络,它是手动构建的(即nonn.GRU),有2个垂直层,128个隐藏层,序列长度为64个字符 我想把莎士比亚的一小段文集放得太满了: 我进行了500多个时期的训练,每25个时期后,我只给出第一个字母“B”,生成一个温度非常低的样本。起初它是胡言乱语,但最后它确实接近实际文本。第一个版本是: 这没有在批之间传递隐藏状态。我想这可能是我的问题,所以我在批次之间传递隐藏状态,分离。但我仍然没有得到完美的过度健康,而且它实际上似乎使它恶化: 下面是我如何实现GRU的: for i

我有一个GRU网络,它是手动构建的(即no
nn.GRU
),有2个垂直层,128个隐藏层,序列长度为64个字符

我想把莎士比亚的一小段文集放得太满了:

我进行了500多个时期的训练,每25个时期后,我只给出第一个字母“B”,生成一个温度非常低的样本。起初它是胡言乱语,但最后它确实接近实际文本。第一个版本是:

这没有在批之间传递隐藏状态。我想这可能是我的问题,所以我在批次之间传递隐藏状态,分离。但我仍然没有得到完美的过度健康,而且它实际上似乎使它恶化:

下面是我如何实现GRU的:

for i in range(self.n_layers):
    layer_input = layer_middle
    layer_middle = torch.zeros((batch_size, seq_len, self.h_dim))
    params = self.layer_params[i]
    for j in range(seq_len):
        x = layer_input[:, j, :].to(torch.device('cuda'))
        z = F.sigmoid(params['W1'](x) + params['W2'](layer_states[i]))
        r = F.sigmoid(params['W3'](x) + params['W4'](layer_states[i]))
        g = F.tanh(params['W5'](x) + params['W6'](r*layer_states[i]))
        layer_states[i] = z*layer_states[i] + (1-z)*g
        layer_middle[:, j, :] = layer_states[i]
    layer_middle = nn.Dropout(self.dropout)(layer_middle)
layer_output = torch.zeros((batch_size, seq_len, self.out_dim))
for j in range(seq_len):
    x = layer_middle[:, j, :].to(torch.device('cuda'))
    layer_output[:, j, :] = self.layer_params[-1]['W7'](x)
参数为
nn.线性
,形状正确


你知道什么可以防止我过度拟合这个小小的语料库吗?

所以问题似乎是我在不同的时代之间传递了隐藏向量,这很糟糕。它搞砸了训练。而且还使其达到100%,而生成器虽然没有获得隐藏状态,但从零开始,却无法获得相同的字符串。因此,问题似乎是我在两个纪元之间传递了隐藏向量,这很糟糕。它搞砸了训练。而且还使其达到100%,而生成器虽然没有获得隐藏状态,但从零开始,却无法获得相同的字符串。