有人可以帮助我了解下面代码中的每一行在做什么吗? 我是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
修改成本?请帮助我理解
答案 0 :(得分:3)
我假设您正在使用hunkim的教程。
mnist.train.next_batch(batch_size)
基本返回下一批要训练的东西。可能是MNIST CNN / DNN,这意味着您需要输入和标签才能输入网络,即手写数字(输入)的图像以及正确的预测(标签)应该是什么。它们分别是batch_xs
和batch_ys
。
m1.train
返回两个对象,第一个是步骤的成本。 _
是通常用于不使用的变量的名称。
avg_cost
仅在运行整个时期后才打印。这表明avg_cost
是该时期的平均成本。现在,c
是一个步骤的平均费用。每个纪元的总步数为 total_batch
。然后,要计算一个 epoch 的平均成本,您应该将每一步返回的所有c
相加,然后除以total_batch
。这实际上是在做的事。 avg_cost += c / total_batch
。
答案 1 :(得分:1)
batch_xs, batch_ys
是data, labels
。_
通常表示一个不需要的变量,这意味着该函数返回2个对象,但是您只需要第一个对象,因此您可以用一个有意义的名称(c
)来表示所需的一个,而在一个对象中则表示另一个。少一些(_
)。 c / total_batch
正是您想要的。这是成比例的成本。