计算出的损耗是否与所有样本相关?

时间:2019-03-28 13:14:05

标签: deep-learning tensorflow

我是深度学习和Tensorflow的新手。我在下面的示例代码中遇到了一些基本问题:

for j in range(no_of_training_sample):
    ...
    ...
    _, _loss = sess.run([train_step, loss], {X: x, Y: y})
  1. 对于返回的_loss的值,是每个数据样本的损失还是从数据样本0到数据样本j的总和?

  2. 在每个sess.run()之后何时更新参数w,h和b?

  3. 如何更改代码以将其转换为小批量?

我尝试搜索互联网,但无法从中快速获得答案。

1 个答案:

答案 0 :(得分:0)

_lossloss的返回值(执行了{{的步骤后,您将列表中的第二个元素作为第一个参数传递给run函数) 3}}(TF基于计算图的“静态”执行,这些计算图表示需要运行的操作)。

可以用不同的方式定义损耗(例如,您可以将其定义为预测值和目标值之间的交叉熵),因此您在_loss中获得的结果将不仅取决于数据您将会话作为第二个参数(在您的情况下为{X: x, Y: y})传递给会话,而且还会传递计算损失的方式。

在计算图中,例如,调用函数computation graph时,网络的参数会更新。

要更改代码并使其使用迷你批处理(而不是一次使用整个数据集),而不是将xy传递给占位符X和{{1 }}在表达式Y中(当您调用{X: x, Y: y}时),您将必须创建一个“迭代器”,该迭代器为您提供, _loss = sess.run([train_step, loss], {X: x, Y: y})(以及相应的x ),您可以将其传递给y(和X)。实际上,您可以使用一种新的TF API来简化此任务(而不是从头开始创建迭代器)。

(如果您只是问了一个问题,我的回答可能会更详细)。