Python 尝试共享可变的基本单元格/权重,但指定的形状错误

Python 尝试共享可变的基本单元格/权重,但指定的形状错误,python,tensorflow,recurrent-neural-network,Python,Tensorflow,Recurrent Neural Network,我试图在tensorflow中从头开始编写和学习RNN。我知道我们需要创建一个basicRNNCell,并将其称为具有正确维度的rnn(数据,输入)。但我得到的尺寸误差如下所示 这是我写的代码 x = tf.placeholder(dtype=tf.float32, shape=[2, 4]) # Batchsize: 2, stepsize: 4 rnn = tf.contrib.rnn.BasicRNNCell(10, reuse=True) state = rnn.zero_state(2

我试图在tensorflow中从头开始编写和学习RNN。我知道我们需要创建一个basicRNNCell,并将其称为具有正确维度的rnn(数据,输入)。但我得到的尺寸误差如下所示

这是我写的代码

x = tf.placeholder(dtype=tf.float32, shape=[2, 4]) # Batchsize: 2, stepsize: 4
rnn = tf.contrib.rnn.BasicRNNCell(10, reuse=True)
state = rnn.zero_state(2, dtype=tf.float32) # A matrix of shape [2, 10]
rnn(x, state) # ERROR OCCURS AT THIS LINE

with tf.Session() as sess:
  sess.run(y, feed_dict={x: [[1, 2, 1, 1], [0, 0, 0, 1]]})
这里是错误

ValueError:尝试共享可变的基本单元格/权重,但指定了形状(14,10)和找到的形状(6,4)


我做错了什么?

我认为您的参数做错了什么。我将在这里为您报告一个工作代码:

import tensorflow as tf
batch_size = 2
seq_len = 4
rnn_output_dim = 10

sess = tf.InteractiveSession()
x = tf.placeholder(dtype=tf.float32, shape=(batch_size, seq_len))
rnn_cell = tf.contrib.rnn.BasicRNNCell(rnn_output_dim)
state = rnn_cell.zero_state(batch_size, dtype=tf.float32)
output, state = rnn_cell(x, state)

sess.run(tf.global_variables_initializer())

res = sess.run(output, {x: [[1,2,1,1],[0,0,0,1]]})

print(res)
"""
array([[ 0.21117647, -0.66317081,  0.89524043, -0.54004282, -0.80074871,
         0.86230665, -0.77558851,  0.46061009,  0.09429809,  0.17166322],
       [ 0.42703518, -0.18116307,  0.32701704,  0.02224555, -0.39941645,
         0.10977989, -0.15780419,  0.41289148,  0.35284221, -0.21626833]], dtype=float32)
"""

我已经用之前相同的名称初始化了一个rnn,它有一组特定的权重。不知怎的,tf不会用相同的名称重新初始化新的rnn,我得到了那个错误。无论如何,谢谢你让我恢复理智。