2016-11-12 6 views
0

私はテンソルフローの学習を始めました。単純なrnnを構築しようとしました。以下は、私が経験している問題を再現するために必要なすべてのコードです。tensorflow - BasicRNNCellの行列の形状が(n_hidden x n_input)と等しくないのはなぜですか?

tf.reset_default_graph() 
rnn = tf.nn.rnn_cell.BasicRNNCell(110, 
            activation=tf.sigmoid) 
x = tf.placeholder(tf.float32, shape=[20, 5, 2], name='x') 
xt = tf.transpose(x) 
x_split = [x_temp[:,0,:] for x_temp in tf.split(1, 5, xt)[::-1]] 
h_list, _ = tf.nn.rnn(rnn, x_split, dtype=tf.float32) 

tf.all_variables()[0].get_shape() 
# TensorShape([Dimension(130), Dimension(110)]) 
x_split 
# [<tf.Tensor 'Squeeze:0' shape=(2, 20) dtype=float32>, 
# <tf.Tensor 'Squeeze_1:0' shape=(2, 20) dtype=float32>, 
# <tf.Tensor 'Squeeze_2:0' shape=(2, 20) dtype=float32>, 
# <tf.Tensor 'Squeeze_3:0' shape=(2, 20) dtype=float32>, 
# <tf.Tensor 'Squeeze_4:0' shape=(2, 20) dtype=float32>] 

なぜマトリックスの寸法ですか?あなたのサイズをチェックしRNN/BasicRNNCell/Linear/Matrix:0

"""Most basic RNN: output = new_state = activation(W * input + U * state + B).""" 

変数:私は、入力が次元20

tf.__version__ 
# 0.10.0rc0 

答えて

1

を持っているのでBasicRNNCellは、以下の力学(commentごとなど)を持って、それは20×110であることを期待しますofは、状態から状態への符号化をエンコードする内部RNNCell変数です。したがって、サイズ20の入力とサイズ110の前の状態の両方を受け入れ、サイズ110の次の状態を出力するので、130 x 110の行列としてエンコードされます。

つまり、コメントからUWを連結します。

+0

男これは今やとても分かりやすいようです...私は気づいていないとは信じられません... – evan54

関連する問題