有人可以帮助我了解以下代码中的每一行在做什么吗?我是 tensorflow 的新手并且非常困惑。for epoch in range(training_epochs): avg_cost = 0 total_batch = int(mnist.train.num_examples / batch_size) for i in range(total_batch): batch_xs, batch_ys = mnist.train.next_batch(batch_size) c, _ = m1.train(batch_xs, batch_ys) avg_cost += c / total_batch print('Epoch:', '%04d' % (epoch + 1), 'cost =', '{:.9f}'.format(avg_cost))我已经定义了时代的数量。for循环内的代码通过training_epochs指定的迭代次数训练模型。我不明白什么是什么batch_xs以及batch_ys为什么以及为什么mnist.train.next_batch(batch_size)返回的结果分别定义为batch_xs和的两个值batch_ys。c, _ = m1.train(batch_xs, batch_ys)。c是多少,但底线是多少?为什么每次迭代都会修改成本c / total_batch而不是c?请帮助我理解。
2 回答
有只小跳蛙
TA贡献1824条经验 获得超8个赞
我假设您正在使用hunkim的教程。
mnist.train.next_batch(batch_size)基本上返回下一批要训练的东西。可能是MNIST CNN / DNN,这意味着您需要输入和标签才能输入网络,即手写数字(输入)的图像以及正确的预测(标签)应该是什么。它们分别是batch_xs和batch_ys。m1.train返回两个对象,第一个是步骤的成本。_是通常用于不使用的变量的名称。avg_cost仅在整个 epoch 运行后才打印。这表明这avg_cost是该时期的平均成本。现在,c是一步的平均成本。每个纪元的总步数为total_batch。然后要计算一个epoch的平均成本,您应该将c每一步返回的所有s相加,然后除以total_batch。这就是本质上正在做的事情;avg_cost += c / total_batch。
侃侃无极
TA贡献2051条经验 获得超10个赞
对于您的第一个问题,您可能应该包含更多代码。在没有看到其余代码的情况下,我可以猜到
batch_xs, batch_ys是data, labels。_通常表示不需要的变量,这意味着该函数返回 2 个对象,但您只想要第一个,因此您用有意义的名称 (c)表示所需的一个,而另一个则用不那么 (_) 表示。c / total_batch正是您想要的。这是成比例的成本。
添加回答
举报
0/150
提交
取消
