我有点困惑,为什么要使用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})
Run Code Online (Sandbox Code Playgroud)
我也看到过这样的代码,其中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
Run Code Online (Sandbox Code Playgroud)
我知道feed_dict
您正在输入数据,并X
像在字典中一样尝试作为键。但是在这里我看不到任何区别。那么,到底有什么区别feed_dict
?为什么需要?
Dav*_*rks 14
在tensorflow模型中,您可以定义一个占位符,例如x = tf.placeholder(tf.float32)
,然后将x
在模型中使用。
例如,我将一组简单的操作定义为:
x = tf.placeholder(tf.float32)
y = x * 42
Run Code Online (Sandbox Code Playgroud)
现在,当我要求tensorflow进行计算时y
,很明显这y
取决于x
。
with tf.Session() as sess:
sess.run(y)
Run Code Online (Sandbox Code Playgroud)
这将产生一个错误,因为我没有给它赋值x
。在这种情况下,因为x
是占位符,所以如果将其用于计算中,则必须将其传递给via feed_dict
。如果不这样做,那就是错误。
让我们修复一下:
with tf.Session() as sess:
sess.run(y, feed_dict={x: 2})
Run Code Online (Sandbox Code Playgroud)
这次的结果将是84
。大。现在让我们看一个feed_dict
不需要的琐碎情况:
x = tf.constant(2)
y = x * 42
Run Code Online (Sandbox Code Playgroud)
现在没有占位符(x
是一个常量),因此不需要向模型提供任何东西。现在可以使用:
with tf.Session() as sess:
sess.run(y)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7041 次 |
最近记录: |