を持っている必要があります。私は、私はすべてのエポックで10のタイムスタンプと私は今だけのために一つの配列を取っているデータX、ので、私のバッチサイズ= 1 を持っている1から10分類:形状(1、10、5)私はtensorflowでシンプルLSTMを設計しようとしていますランク2
にクラスにデータの順序を分類したいです新しいシーケンスが生成されます。例えば、Xがthis-
X [[ 2.52413028 2.49449348 2.46520466 2.43625973 2.40765466 2.37938545
2.35144815 2.32383888 2.29655379 2.26958905]]
などnumpyのアレイはLSTM入力に適するようにすることである、私は、最初のテンソルに変換した後(BATCH_SIZE、sequence_lenght、入力寸法)を整形 -
X= np.array([amplitude * np.exp(-t/tau)])
print 'X', X
#Sorting out the input
train_input = X
train_input = tf.convert_to_tensor(train_input)
train_input = tf.reshape(train_input,[1,10,1])
print 'ti', train_input
出力のために私は10
#------------sorting out the output
train_output= [int(math.ceil(tau/resolution))]
train_output= one_hot(train_output, num_labels=10)
print 'label', train_output
train_output = tf.convert_to_tensor(train_output)
>>label [[ 0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]]
1のクラスの範囲内でワンホットエンコードされたラベルを生成していますそして、私は、tensorflowグラフのプレースホルダを作成しLSTM細胞を作製し、重量およびBを与えましたias-
data = tf.placeholder(tf.float32, shape= [batch_size,len(t),1])
target = tf.placeholder(tf.float32, shape = [batch_size, num_classes])
cell = tf.nn.rnn_cell.LSTMCell(num_hidden)
output, state = rnn.dynamic_rnn(cell, data, dtype=tf.float32)
weight = tf.Variable(tf.random_normal([batch_size, num_classes, 1])),
bias = tf.Variable(tf.random_normal([num_classes]))
#training
prediction = tf.nn.softmax(tf.matmul(output,weight) + bias)
cross_entropy = -tf.reduce_sum(target * tf.log(prediction))
optimizer = tf.train.AdamOptimizer()
minimize = optimizer.minimize(cross_entropy)
私はこれまでのコードを書いており、トレーニングステップでエラーが発生しました。それは入力された図形と関係がありますか?ここでトレースバックが
トレースバック(最新の呼び出しの最後)---である:あなたのwは次元batch_size x num_classes x 1
を有しているあなたは、乗算をしたいしかし
File "/home/raisa/PycharmProjects/RNN_test1/test3.py", line 66, in <module>
prediction = tf.nn.softmax(tf.matmul(output,weight) + bias)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/math_ops.py", line 1036, in matmul
name=name)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/gen_math_ops.py", line 911, in _mat_mul
transpose_b=transpose_b, name=name)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/op_def_library.py", line 655, in apply_op
op_def=op_def)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 2156, in create_op
set_shapes_for_outputs(ret)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 1612, in set_shapes_for_outputs
shapes = shape_func(op)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/common_shapes.py", line 81, in matmul_shape
a_shape = op.inputs[0].get_shape().with_rank(2)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/tensor_shape.py", line 625, in with_rank
raise ValueError("Shape %s must have rank %d" % (self, rank))
ValueError: Shape (1, 10, 5) must have rank 2
あなたの応答に感謝します。私はまだRNN出力の形状がどうあるべきか非常に分かりません。 – zerogravty
'ValueError:寸法10と5は互換性がありません ' – zerogravty
今、RNN出力は形状を持っています。 'テンソル( "Reshape_1:0"、形状=(5、10)、DTYPE =のfloat32)から:)、形状=(2 ' しかし、重み行列は 'テンソル( "0形" の形状を有しています、dtype = int32) ' – zerogravty