标准的Keras模型输出意味着什么?Keras中的epoch和loss是什么?

53

我刚用Keras构建了我的第一个模型,这是输出结果。它看起来像在构建任何Keras人工神经网络之后得到的标准输出。即使查看了文档,我仍然不完全理解输出中打印的epoch和loss是什么。

Keras中的epoch和loss是什么?

(我知道这可能是一个极其基础的问题,但我似乎找不到答案在线上,如果答案真的很难从文档中获取,我想其他人也会有同样的问题,因此决定在这里发布它。)

Epoch 1/20
1213/1213 [==============================] - 0s - loss: 0.1760     
Epoch 2/20
1213/1213 [==============================] - 0s - loss: 0.1840     
Epoch 3/20
1213/1213 [==============================] - 0s - loss: 0.1816     
Epoch 4/20
1213/1213 [==============================] - 0s - loss: 0.1915     
Epoch 5/20
1213/1213 [==============================] - 0s - loss: 0.1928     
Epoch 6/20
1213/1213 [==============================] - 0s - loss: 0.1964     
Epoch 7/20
1213/1213 [==============================] - 0s - loss: 0.1948     
Epoch 8/20
1213/1213 [==============================] - 0s - loss: 0.1971     
Epoch 9/20
1213/1213 [==============================] - 0s - loss: 0.1899     
Epoch 10/20
1213/1213 [==============================] - 0s - loss: 0.1957     
Epoch 11/20
1213/1213 [==============================] - 0s - loss: 0.1923     
Epoch 12/20
1213/1213 [==============================] - 0s - loss: 0.1910     
Epoch 13/20
1213/1213 [==============================] - 0s - loss: 0.2104     
Epoch 14/20
1213/1213 [==============================] - 0s - loss: 0.1976     
Epoch 15/20
1213/1213 [==============================] - 0s - loss: 0.1979     
Epoch 16/20
1213/1213 [==============================] - 0s - loss: 0.2036     
Epoch 17/20
1213/1213 [==============================] - 0s - loss: 0.2019     
Epoch 18/20
1213/1213 [==============================] - 0s - loss: 0.1978     
Epoch 19/20
1213/1213 [==============================] - 0s - loss: 0.1954     
Epoch 20/20
1213/1213 [==============================] - 0s - loss: 0.1949

7
Epoch是对数据进行训练的次数。Loss指的是在训练集上计算得到的误差,通常用均方误差(回归问题)或对数损失(分类问题)来表示。 - David Maust
2个回答

47

为了更具体地回答问题,这里是epoch和loss的定义:

Epoch:对所有训练数据进行完整的遍历。

例如,在上面的视图中,您有1213个观测结果。因此,当已经完成所有1213个观测结果的训练遍历时,一个epoch就会结束。

Loss:我们在模型训练过程中试图最小化的标量值。损失越低,我们的预测结果越接近真实标签。

通常这是均方误差(MSE)或者在Keras中,分类交叉熵


运行Keras模型拟合(fit)后,您预期会看到损失在n个epoch后降低。但您的训练运行情况相当异常,因为您的损失实际上正在增加。这可能是由于学习率过大,导致您超出了最优解。

正如jaycode所提到的,您需要查看模型在未见过的数据上的表现,因为这是机器学习的一般用法。

因此,您应该在编译方法中包含指标列表,它可能看起来像:

model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])

除了在拟合方法中对验证集运行模型之外,例如:

model.fit(data, labels, validation_split=0.2)

还有很多需要解释的地方,但是希望这能为你打开一个好的开端。



你如何计算观察数量(以及它们确切的含义)?我很确定这不是“批量大小”,但它肯定取决于此。请解释。 - Sachin
这里的"observations"指的是你正在处理的记录数量,与表格或数据框中的行数相同。 - undefined

12

当您的模型通过网络中的所有节点运行数据并准备更新权重以达到最优损失值时,一个时代就结束了。也就是说,损失越小越好。在您的情况下,由于高时代存在更高的损失得分,因此似乎模型在第一个时代上表现更好。

我说“似乎”是因为我们还不能确定模型是否表现良好,因为尚未使用合适的交叉验证方法对其进行测试,即仅针对训练数据进行评估。

提高模型性能的方法:

  • 在Keras模型中使用交叉验证,以找出模型实际的性能,当预测新数据时,它是否具有很好的泛化能力?
  • 调整您模型中使用的学习率、神经网络模型结构、隐藏单元/层数、初始设置、优化器和激活器参数等多种因素。

使用sklearn的GridSearchCV与Keras结合可以自动化此过程。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接