了解如何训练我的tensorflow CNN,linebylin

2024-04-19 05:56:16 发布

您现在位置:Python中文网/ 问答频道 /正文

有人能帮我理解下面代码中的每一行都在做什么吗? 我对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循环中的代码根据训练时间指定的迭代次数来训练模型。你知道吗

  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修改成本?你知道吗

请帮助我理解。你知道吗


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

我假设你用的是亨金的教程。你知道吗

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

  2. m1.train返回两个对象,第一个是步骤的开销。_是一个变量名,通常用于表示您不会使用的内容。

  3. avg_cost仅在运行整个epoch之后才打印。这表明avg_cost是这个时代的平均成本。现在,c是一步的平均成本。每个历元的总步数是total_batch。然后要计算一个历元的平均成本,应该将每个步骤返回的所有c相加,然后除以total_batch。基本上就是这样做的;avg_cost += c / total_batch

相关问题 更多 >