Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow 损失减少从第二个时期开始_Tensorflow_Machine Learning_Neural Network_Deep Learning_Keras - Fatal编程技术网

Tensorflow 损失减少从第二个时期开始

Tensorflow 损失减少从第二个时期开始,tensorflow,machine-learning,neural-network,deep-learning,keras,Tensorflow,Machine Learning,Neural Network,Deep Learning,Keras,我将Python与Keras和Tensorflow(gpu)结合使用 我训练一个ConvNet来完成图像分类任务。当我训练网络时,我得到训练数据的损失函数的以下结果: 第一个纪元之前:1.099 第一纪元后:1.094 第二纪元后:0.899 第三纪元后:0.713 第四纪元后:0.620722375 第五纪元后:0.532505135 为什么损失函数的减少从第二个历元开始?为什么第一个纪元之后没有减少 提前感谢。损失正在减少,但如果不考虑变量,很难说为什么第一个时期损失几乎没有减少,后来又减少

我将Python与Keras和Tensorflow(gpu)结合使用

我训练一个ConvNet来完成图像分类任务。当我训练网络时,我得到训练数据的损失函数的以下结果:

第一个纪元之前:1.099

第一纪元后:1.094

第二纪元后:0.899

第三纪元后:0.713

第四纪元后:0.620722375

第五纪元后:0.532505135

为什么损失函数的减少从第二个历元开始?为什么第一个纪元之后没有减少


提前感谢。

损失正在减少,但如果不考虑变量,很难说为什么第一个时期损失几乎没有减少,后来又减少了。可能模型花了一段时间才找到最小化函数的方法,在第二个阶段,优化器可以更好地最小化损失函数。

Keras在训练时计算训练数据的损失。因此,对于第一个历元,起始样本的性能很差(因为模型尚未训练),随着训练的进行,模型实际上变得更好,但由于起始样本的损失很差,总体损失看起来很差


另一方面,您可以检查验证损失,它是在历元之后计算的,这将是真实损失的更好指标。

这是一个容易被忽略的混淆点,因为它通常没有显著的影响。典型的训练循环可能是这样的

import tensorflow as tf

# Build graph
# ...
loss = ...
train_op = ...
with tf.Session() as sess:
    while keep_training:
        _, current_loss = sess.run([train_op, loss], feed_dict={...})
        # ...

问题是,当您在那里调用
sess.run
时,您得到的
loss
值将在更新权重之前进行计算
loss
是用于优化模型的值,因此它被计算,然后被反向传播以计算对train_op应用的权重的更新,因此它不可能使用新的权重,因为首先需要计算这些权重!您可以将另一个损失操作添加到图形中,该图形将在
train_op
之后进行评估,但这需要对每个批次进行两次评估,无论如何,您将在下一次迭代中看到新的损失值。正如我所说的,大多数情况下这并不重要,但例如,如果你想知道某些权重在什么时候变成了
NaN
或类似的值,这可能会产生误导。

1.094小于1.099,因此会有所减少。你是什么意思?我猜它刚刚开始四处寻找一些极小值。