3

model_fn()shape を持つmy 内に確率変数を作成する必要があります[batch_size, 20]

batch_size予測に別のバッチサイズを使用できないため、引数として渡したくありません。

この質問に関係のない部分を削除すると、私の model_fn() は次のようになります。

def model(inp, out):
    eps = tf.random_normal([batch_size, 20], 0, 1, name="eps"))) # batch_size is the 
    # value I do not want to hardcode

    # dummy example
    predictions = tf.add(inp, eps)
    return predictions, 1

で置き換える[batch_size, 20]inp.get_shape()

ValueError: Cannot convert a partially known TensorShape to a Tensor: (?, 20)

走行時myclf.setup_training()

私が試したら

def model(inp, out):
    batch_size = tf.placeholder("float", [])
    eps = tf.random_normal([batch_size.eval(), 20], 0, 1, name="eps")))

    # dummy example
    predictions = tf.add(inp, eps)
    return predictions, 1

ValueError: Cannot evaluate tensor using eval(): No default session is registered. Useは sess.as_default() を取得します (当然or pass an explicit session to eval(session=sess)のことながら、feed_dict を提供していないため)

batch_sizeinsideの値にアクセスしmodel_fn()ながら、予測中に変更できるようにするにはどうすればよいですか?

4

1 に答える 1

2

Tensor.get_shape()との違いがわかりませんでしたtf.shape(Tensor)。後者の作品:

eps = tf.random_normal(tf.shape(inp), 0, 1, name="eps")))

Tensorflow 0.8 FAQ で言及されているように:

可変バッチ サイズで機能するグラフを作成するにはどうすればよいですか?

たとえば、同じコードを (ミニ) バッチ トレーニングと単一インスタンスの推論に使用できるように、可変バッチ サイズで動作するグラフを作成すると便利なことがよくあります。結果のグラフは、プロトコル バッファとして保存し、別のプログラムにインポートできます。

可変サイズのグラフを作成する際に覚えておくべき最も重要なことは、バッチ サイズを Python 定数としてエンコードするのではなく、シンボリック Tensor を使用してそれを表現することです。次のヒントが役立つ場合があります。

batch_size = tf.shape(input)[0] を使用して、input と呼ばれる Tensor からバッチ次元を抽出し、batch_size と呼ばれる Tensor に格納します。

tf.reduce_sum(...) / batch_size の代わりに tf.reduce_mean() を使用します。

フィード入力にプレースホルダーを使用する場合、tf.placeholder(..., shape=[None, ...]) でプレースホルダーを作成することにより、可変バッチ ディメンションを指定できます。シェイプの None 要素は、可変サイズのディメンションに対応します。

于 2016-04-29T12:37:16.017 に答える