Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.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 tensorflow中RNN的编解码器模型_Python_Tensorflow_Deep Learning_Recurrent Neural Network - Fatal编程技术网

Python tensorflow中RNN的编解码器模型

Python tensorflow中RNN的编解码器模型,python,tensorflow,deep-learning,recurrent-neural-network,Python,Tensorflow,Deep Learning,Recurrent Neural Network,我正在为编码器和解码器实现一个使用双向RNN的编码器-解码器模型。由于我在编码器端初始化了双向RNN,并且与双向RNN相关联的权重和向量已经初始化,因此当我尝试在解码器端初始化另一个实例时,我得到以下错误: ValueError: Variable bidirectional_rnn/fw/gru_cell/w_ru already exists, disallowed. Did you mean to set reuse=True or reuse=tf.AUTO_REUSE in VarSc

我正在为编码器和解码器实现一个使用双向RNN的编码器-解码器模型。由于我在编码器端初始化了双向RNN,并且与双向RNN相关联的权重和向量已经初始化,因此当我尝试在解码器端初始化另一个实例时,我得到以下错误:

ValueError: Variable bidirectional_rnn/fw/gru_cell/w_ru already exists, disallowed. Did you mean to set reuse=True or reuse=tf.AUTO_REUSE in VarScope?
我试着在它自己的
name\u范围内定义每一个,如下所示,但没有用:

def enc(信息、重量、偏差):
message=tf.unstack(message,timesteps\u enc,1)
fw_cell=rnn.GRUBlockCell(num_hidden_enc)
bw\u cell=rnn.GRUBlockCell(num\u hidden\u enc)
使用tf.name_范围(“编码器”):
输出,uu,uu=rnn.static_u双向(fw_单元格,bw_单元格,消息,数据类型=tf.float32)
返回tf.matmul(输出[-1],权重)+偏差
def dec(码字、权重、偏差):
码字=tf。展开(码字,轴=2)
码字=tf.unstack(码字,时间步长,1)
fw_cell=rnn.GRUBlockCell(num_hidden_dec)
bw\u cell=rnn.GRUBlockCell(num\u hidden\u dec)
使用tf.name_范围(“解码器”):
输出,uu,uu=rnn.static_u双向_rnn(fw_单元格,bw_单元格,码字,dtype=tf.float32)
返回tf.matmul(输出[-1],权重)+偏差

有人能暗示一下我做错了什么吗?

把它作为一个答案:


只需尝试将
name\u scope
交换为
variable\u scope
。我不确定它是否仍然有效,但对于TF的旧版本,不鼓励使用
name\u scope
。从变量名
双向\u rnn/fw/gru\u cell/w\u ru
可以看出该范围未应用

一件事是,您不能在同一范围内创建具有相同名称的变量,因此更改
variable\u scope
name\u scope
将修复培训


另一件事是,这种模型不能作为编码器-解码器模型工作,因为解码器RNN不能是双向的。在训练时确实有整个目标序列,但在推断时,从左到右生成目标。这意味着您只有前向RNN的左上下文,但没有后向RNN的右上下文。

只需尝试将
name\u scope
交换为
variable\u scope
。我不确定它是否仍然有效,但对于TF的旧版本,不鼓励使用
name\u scope
。从您的变量名
双向\u rnn/fw/gru\u cell/w\u ru
中,您可以看到未应用该范围。感谢您的回复,这很有效。你能把它作为一个答案,这样我就可以把它标记为正确的吗?谢谢你的回答。这是我不知道的事实。非常感谢。另外,你能帮我修理一下吗?我应该从编码器双向RNN获取所有三个输出并将它们堆叠起来吗?从文档中我还发现,
输出是一个长度为'T'的输出列表(每个输入一个),它是深度连接的前向和后向输出。输出状态是前向rnn的最终状态。输出状态是反向rnn的最终状态。