我是深度学习和Tensorflow的新手。我在下面的示例代码中遇到了一些基本问题:
for j in range(no_of_training_sample):
...
...
_, _loss = sess.run([train_step, loss], {X: x, Y: y})
对于返回的_loss
的值,是每个数据样本的损失还是从数据样本0到数据样本j的总和?
在每个sess.run()
之后何时更新参数w,h和b?
如何更改代码以将其转换为小批量?
我尝试搜索互联网,但无法从中快速获得答案。
答案 0 :(得分:0)
_loss
是loss
的返回值(执行了{{的步骤后,您将列表中的第二个元素作为第一个参数传递给run
函数) 3}}(TF基于计算图的“静态”执行,这些计算图表示需要运行的操作)。
可以用不同的方式定义损耗(例如,您可以将其定义为预测值和目标值之间的交叉熵),因此您在_loss
中获得的结果将不仅取决于数据您将会话作为第二个参数(在您的情况下为{X: x, Y: y}
)传递给会话,而且还会传递计算损失的方式。
在计算图中,例如,调用函数computation graph时,网络的参数会更新。
要更改代码并使其使用迷你批处理(而不是一次使用整个数据集),而不是将x
和y
传递给占位符X
和{{1 }}在表达式Y
中(当您调用{X: x, Y: y}
时),您将必须创建一个“迭代器”,该迭代器为您提供, _loss = sess.run([train_step, loss], {X: x, Y: y})
(以及相应的x
),您可以将其传递给y
(和X
)。实际上,您可以使用一种新的TF API来简化此任务(而不是从头开始创建迭代器)。
(如果您只是问了一个问题,我的回答可能会更详细)。