1. ホーム
  2. tensorflow

[解決済み] Tensorflowです。feeded_dict` はいつ使うべきか、使わないべきか?

2022-03-14 06:05:58

質問

私は、なぜ feed_dict ? 私の友人によると、一般的に feed_dict を使用した場合 placeholder これは、おそらく制作上よくないことです。

私は、このようなコードを見たことがあります。 feed_dict は関係ありません。

for j in range(n_batches):
    X_batch, Y_batch = mnist.train.next_batch(batch_size)
    _, loss_batch = sess.run([optimizer, loss], {X: X_batch, Y:Y_batch}) 

また、このようなコードも見たことがあります。 feed_dict が絡んできます。

for i in range(100): 
    for x, y in data:
        # Session execute optimizer and fetch values of loss
        _, l = sess.run([optimizer, loss], feed_dict={X: x, Y:y}) 
        total_loss += l

なるほど feed_dict は、データを投入して X を辞書のようにキーとして指定します。しかし、ここでは何の違いも見いだせません。では、具体的にどのような違いがあるのか、なぜ feed_dict ?

解決方法は?

tensorflowのモデルでは、次のようなプレースホルダーを定義することができます。 x = tf.placeholder(tf.float32) を使用することになります。 x をモデル化することができます。

例えば、簡単な操作のセットを次のように定義します。

x = tf.placeholder(tf.float32)
y = x * 42

ここで、tensorflowに計算を依頼すると y というのは明らかです。 y に依存します。 x .

with tf.Session() as sess:
  sess.run(y)

に値を与えていないので、これはエラーを発生させます。 x . この場合、なぜなら x はプレースホルダーであるため、計算で使用する場合は、このプレースホルダーを feed_dict . そうでない場合はエラーになります。

修正しましょう。

with tf.Session() as sess:
  sess.run(y, feed_dict={x: 2})

今回の結果は 84 . 素晴らしい。では、次のようなつまらないケースを見てみましょう。 feed_dict は必要ありません。

x = tf.constant(2)
y = x * 42

これでプレースホルダーがなくなりました( x は定数です)、したがって、何もモデルに与える必要はありません。これで動作するようになりました。

with tf.Session() as sess:
  sess.run(y)