了解如何逐行训练我的Tensorflow CNN

时间:2018-08-22 06:49:10

标签: python tensorflow

有人可以帮助我了解下面代码中的每一行在做什么吗? 我是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指定的迭代次数训练模型。

  1. 我不知道batch_xsbatch_ys是什么,以及为什么mnist.train.next_batch(batch_size)的结果返回两个分别定义为batch_xsbatch_ys的值。
  2. c, _ = m1.train(batch_xs, batch_ys)c是成本,但是下划线是什么?
  3. 为什么每次迭代都由c / total_batch而不是c修改成本?

请帮助我理解

2 个答案:

答案 0 :(得分:3)

我假设您正在使用hunkim的教程。

  1. mnist.train.next_batch(batch_size)基本返回下一批要训练的东西。可能是MNIST CNN / DNN,这意味着您需要输入和标签才能输入网络,即手写数字(输入)的图像以及正确的预测(标签)应该是什么。它们分别是batch_xsbatch_ys

  2. m1.train返回两个对象,第一个是步骤的成本。 _是通常用于不使用的变量的名称。

  3. avg_cost仅在运行整个时期后才打印。这表明avg_cost是该时期的平均成本。现在,c是一个步骤的平均费用。每个纪元的总步数为 total_batch 。然后,要计算一个 epoch 的平均成本,您应该将每一步返回的所有c相加,然后除以total_batch。这实际上是在做的事。 avg_cost += c / total_batch

答案 1 :(得分:1)

  1. 对于第一个问题,您可能应该包含更多代码。在没有看到其余代码的情况下,我可以猜测batch_xs, batch_ysdata, labels
  2. _通常表示一个不需要的变量,这意味着该函数返回2个对象,但是您只需要第一个对象,因此您可以用一个有意义的名称(c)来表示所需的一个,而在一个对象中则表示另一个。少一些(_)。
  3. c / total_batch正是您想要的。这是成比例的成本。