- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
下面是小的 Tensorflow 代码
# coding: utf-8
# In[27]:
import tensorflow as tf
# In[28]:
# Model parameters
W = tf.Variable([.3], dtype=tf.float32)
b = tf.Variable([-.3], dtype=tf.float32)
# In[29]:
# Model input and output
x = tf.placeholder(tf.float32)
linear_model = W * x + b
# In[30]:
y = tf.placeholder(tf.float32)
# In[31]:
# loss
loss = tf.reduce_sum(tf.square(linear_model - y))
# optimizer
optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)
# In[32]:
# training data
x_train = [1, 2, 3, 4]
y_train = [0, -1, -2, -3]
# In[33]:
# training loop
init = tf.global_variables_initializer()
# In[34]:
with tf.Session() as sess:
sess.run(init)
for i in range(1000):
sess.run(train, {x: x_train, y: y_train})
# evaluate training accuracy
curr_W, curr_b, curr_loss = sess.run([W, b, loss], {x: x_train, y: y_train})
print("W: %s b: %s loss: %s"%(curr_W, curr_b, curr_loss))
# In[ ]:
在 for 循环中我们有以下代码
with tf.Session() as sess:
sess.run(init)
for i in range(1000):
sess.run(train, {x: x_train, y: y_train})
# evaluate training accuracy
curr_W, curr_b, curr_loss = sess.run([W, b, loss], {x: x_train, y: y_train})
print("W: %s b: %s loss: %s"%(curr_W, curr_b, curr_loss))
我的问题是,当我们运行 sess.run(train, {x: x_train, y: y_train})
时,也会计算 loss
,那么为什么我们需要当想要检索损失值时传递 feed_dict ,如下所示?谁能帮我理解这一点吗?
curr_W, curr_b, curr_loss = sess.run([W, b, loss], {x: x_train, y: y_train})
最佳答案
您在代码中定义了 2 个占位符:x
和y
。 tf.placeholder
是一个容器,可以在程序的每次执行时为其提供不同的值。
当您使用tf.placeholder
时,TensorFlow 在内部使用这个容器(占位符)定义其计算图。 sess.run()
运行此计算图,但该图本身没有任何意义,因为占位符容器是空的 - 它们不包含任何内容。因此,每当您在代码中使用占位符时,您都需要使用 feed_dict
在图表中传递这些占位符的值。 sess.run()
的参数.
占位符的优点是,您在 sess.run()
的一次执行中放入的值不被记住。即第二次调用sess.run()
将再次有空占位符,并且您将再次必须通过 feed_dict
将值放入其中。 。这就是为什么您必须在每次调用 sess.run()
时发送占位符的值。 .
一个有用的类比可能是将您的 TensorFlow 计算图视为一台物理机器 - 具有输入管道( x
和 y
)和输出管道( loss
)。机器消耗来自输入管道的数据(因此数据不会在多次调用中保留),并且机器还会从输出管道吐出内容 - 如果您没有捕获输出,您就会丢失它。机器(图表)不存储其中的任何值或结果。它仅用于定义对数据应用不同操作的工作流程。
类似 train
的操作是机器的杠杆,拉动时可以在机器内执行某些操作。现在,为了让机器完成任何工作,您必须在输入管道中放入一些东西。当您调用sess.run(train)
时,机器用完占位符中的数据,计算损失(它通过loss
输出管道发送出去,你没有捕获)并通过反向传播修改其内部变量。现在输入管道再次为空,并且旧值 loss
丢失了!因此,当你想要计算损失时,你将数据放入输入管道中,并要求机器通过 loss
输出损失。管道。
您可能会想这样做:
loss_value, _ = sess.run([loss, train], {x: x_train, y: y_train})
但不幸的是,TensorFlow 给出 no guarantees至于order其中sess.run()
评估其操作。所以在上面的代码行中你不会知道 loss_value
是否返回的是运行训练操作之前或之后的损失。唯一的方法是首先运行训练操作,然后在两次单独的 sess.run()
调用中运行损失操作。正如您在代码中所做的那样。
关于tensorflow - 为什么我们需要使用 feed_dict 传递值来打印 TensorFlow 中的损失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51407644/
我正在玩构建线性回归的 Tensorflow 示例,我的代码如下: import numpy as np import tensorflow as tf train_X = np.asarray([3
我有点困惑为什么我们要使用feed_dict?据我的 friend 说,当您使用 placeholder 时,通常会使用 feed_dict,这可能对生产不利。 我见过这样的代码,其中不涉及 feed
假设您有一个网络,目前已使用 feed_dict 将数据注入(inject)图表。每隔几个时期,我通过将任一数据集的批处理输入到我的图表来评估训练和测试损失。 现在,出于性能原因,我决定使用输入管道。
与 .from_tensor_slices 相比,为什么 feed_dict 使用更少的 GPU 内存?我认为在下面的行中,Tensorflow 会在迭代 GPU 中的数据之前将整个数据加载到 GPU
第一次遇到这样的问题。 错误是关于 feed_dict={tfkids: kids, tfkids_fit: kids_fit} 的,似乎需要 reshape kids_fit。 谁能帮我解决这个问题
我有一个模型,需要每 N 次迭代为权重(可训练变量)分配新的外部值。 我可以想到一些解决方案: 保存和恢复 不好,因为我需要序列化,通过文件系统调用等(即使我使用 tmpfs 之类的东西) 使用占位符
所以我是 Tensorflow 的新手,我试图准确了解何时使用 feed_dict 以及何时不需要。 但是,我对 feed_dict 的工作原理感到困惑。 例如:1 会与 2 和 3 相同吗? 1.
我一直在使用 feed_dict 来直接输入 placeholder在像 MNIST 这样的小问题中练习编码。 TensorFlow 还支持使用 queue 馈送数据和 queue runner ,它
我正在使用 Java 来提供通过 Python 学习的 Tensorflow 模型。该模型有两个输入。代码如下: def predict(float32InputShape: (Long, Lon
我正在运行一个简单的神经网络进行线性回归。然而,TensorFlow 提示我的 feed_dict 占位符不是图表的元素。然而,我的占位符和模型都在我的图表中定义,如下所示: import numpy
我正在研究 python 中的分类问题。事实上,我在 TensorFlow 方面还不是很好。所以我很久以来就有同样的问题,我不知道如何解决。我希望你能帮助我:) 这是我的数据: X:8000 张图片:
我刚开始用 python 学习 Tensorflow。当我从一个简单的 AddTwo 类开始时出现以下错误。错误信息是: Cannot interpret feed_dict key as Tenso
我有一个由多个子网络组成的网络(多个卷积网络和最后一个全连接 + 软最大层)。每个 ConvNet 提要具有特定区域和图像大小。因此,为了给我的网络提供数据,我为每个 convnet 输入编写图像占位
我正在尝试将一个简单的片段从 TensorFlow 1.x 转换为 TensorFlow 2: # ########## TensorFlow 1.x code: ########## import
我正在尝试将 feed_dict value bool 传递给函数 def sum(a, b, flag = True, msg1= "Sum", msg2= "Multiply "): if
现在我有一个模型配置为使用 feed_dict 获取输入。代码看起来像这样: # model.py class MyModel(object): def __init__(self, hyperp
我正在解决 TensorFlow 的示例问题(特别是使用占位符),并且不明白为什么我收到(看起来是)形状/类型错误,而我相当有信心这些错误是什么他们应该是。 我尝试过使用 X_batch 和 y_ba
下面是小的 Tensorflow 代码 # coding: utf-8 # In[27]: import tensorflow as tf # In[28]: # Model parameters W
我在 Tensorflow 中有一个 C++ 代码,如下所示,它涉及使用占位符的矩阵乘法: #include #include #include #include #include "tens
我想在 TensorFlow C++ 中构建和训练一个由两层组成的图,并将给定的矩阵作为输入提供给它。 我有两个不同的语法示例: The official C++ example (line # 12
我是一名优秀的程序员,十分优秀!