[int、-1]表記を使用してテンソルを変形したい(たとえば、画像を平坦化する)。しかし、私は最初の次元を前もって知らない。 1つのユースケースでは、大きなバッチをトレインし、次に小さいバッチで評価します。プレースホルダ値を使用したテンソルの変形
なぜこれが次のエラーを表示しますか:got list containing Tensors of type '_Message'
?
import tensorflow as tf
import numpy as np
x = tf.placeholder(tf.float32, shape=[None, 28, 28])
batch_size = tf.placeholder(tf.int32)
def reshape(_batch_size):
return tf.reshape(x, [_batch_size, -1])
reshaped = reshape(batch_size)
with tf.Session() as sess:
sess.run([reshaped], feed_dict={x: np.random.rand(100, 28, 28), batch_size: 100})
# Evaluate
sess.run([reshaped], feed_dict={x: np.random.rand(8, 28, 28), batch_size: 8})
注:私は動作しているようです機能の再形成外を持っているが、私は複数回使用非常に大規模なモデルを持っているので、私は関数内でそれらを維持し、使用してDIMを渡す必要があるとき引数。
def reshape(_batch_size):
return tf.reshape(x, [_batch_size, -1])
...機能付き:
def reshape(_batch_size):
return tf.reshape(x, tf.pack([_batch_size, -1]))
エラーの理由はtf.reshape()
がtf.Tensor
ように変換された値を期待していることで、この作業を行う機能を置き換えるために
tf.pack()を使用していくつかの問題が発生しました。 'x = reshape(100)'は 'x.get_shape()。as_list()[ - 1]'を実行できなくなりました。 Nonetypeは反復可能ではないので、形状情報が失われています。これに関するコメント? – jstaker7
'batch_size'プレースホルダを定義するときに' shape =() 'を指定してみてください。 'Tensor.set_shape()'を使用して、後で依存する場合、推定されない追加のシェイプ情報を提供することもできます。 – mrry
優秀、ありがとう! – jstaker7