2017-10-24 5 views
-1

これは、ここでの結果であるtf.placeholder()の違いは何ですか?データに変数を直接割り当てるのはどうですか?

import tensorflow as tf 
batch_size = 128 
sequence_length = 100 

batch_size2 = tf.placeholder(tf.int32, []) 
sequence_length2 = tf.placeholder(tf.int32, []) 

_sequence_length1 = tf.convert_to_tensor(batch_size * [sequence_length], dtype=tf.int32) 
_sequence_length2 = tf.convert_to_tensor(batch_size2 * [sequence_length2], dtype=tf.int32) 

with tf.Session() as session: 
    session.run(tf.global_variables_initializer()) 
    print('_sequence_length1', session.run(_sequence_length1)) 
    print('shape of sequence1', _sequence_length1) 

    print('_sequence_length2', session.run(_sequence_length2, feed_dict={batch_size2: 128, sequence_length2: 100})) 
    print('shape of sequence2', _sequence_length2) 

私のコードと出力結果

です:

('_sequence_length1', array([100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 
    100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 
    100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 
    100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 
    100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 
    100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 
    100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 
    100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 
    100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 
    100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100], dtype=int32)) 
('shape of sequence1', <tf.Tensor 'Const:0' shape=(128,) dtype=int32>) 
('_sequence_length2', array([12800], dtype=int32)) 
('shape of sequence2', <tf.Tensor 'mul:0' shape=(1,) dtype=int32>) 

私はBATCH_SIZEとsequence_lengthする異なる変数を養うためにtf.placeholder()を使用したいが、私はしたいです_sequence_length1のような結果、_sequence_length2の形状が(1、)である理由はわかりませんが、_sequence_length2の形状は_sequence_length1と同じであると思います。なぜあなたに教えてくれますか?多くのおかげで......

答えて

0
  1. _sequence_length1 - あなたは128個の要素を持つニシキヘビリストからTensorします[100, ..., 100]
  2. _sequence_length2は - とランク= 0、第二[sequence_length2]との乗算2つのテンソル最初batch_size2のTF操作でありますランク= 1

あなたが使用することができます_sequence_length1と同じ結果たい場合:

_sequence_length2 = tf.tile([sequence_length2], [batch_size2]) 

代わり

_sequence_length2 = tf.convert_to_tensor(batch_size2 * [sequence_length2], dtype=tf.int32) 
+0

を使用することができますが、問題は、あなたの方法によって解決されて、ありがとうございました。 –

+0

もしそうなら、あなたは解決済みとして質問に印を付けることができます:) –

0

また

_sequence_length2 = tf.constant(np.full(batch_size, sequence_length2, dtype=np.int32)) 
関連する問題