标准的 Keras 模型输出是什么意思? Keras 中的纪元和损失是什么?

What does the standard Keras model output mean? What is epoch and loss in Keras?

我刚刚使用 Keras 构建了我的第一个模型,这是输出。它看起来像是构建任何 Keras 人工神经网络后获得的标准输出。即使查看了文档,我也不完全理解 epoch 是什么以及输出中打印的损失是什么。

Keras 中的 epoch 和 loss 是什么?

(我知道这可能是一个非常基本的问题,但我似乎无法在网上找到答案,如果答案真的很难从文档中收集到,我认为其他人也会有同样的问题,因此决定post在这里。)

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

当您的模型通过网络中的所有节点获得 运行 数据并准备好更新权重以达到最佳损失值时,一个时期结束。也就是说,越小越好。在你的例子中,由于在更高的时期有更高的损失分数,它 "seems" 模型在第一个时期更好。

我说 "seems" 因为我们实际上还不能确定,因为模型尚未使用适当的交叉验证方法进行测试,即它仅根据其训练数据进行评估。

改进模型的方法:

  • 在您的 Keras 模型中使用交叉验证以了解模型的实际执行情况,它在预测以前从未见过的新数据时是否泛化得很好?
  • 调整你的学习率、神经网络模型的结构、隐藏单元/层的数量、模型中使用的初始化、优化器和激活器参数等等。

将 sklearn 的 GridSearchCV 与 Keras 相结合可以自动执行此过程。

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

Epoch:完全传递所有 training 数据。

例如,在您上面的视图中,您有 1213 个观察值。因此,一个纪元在完成对您的所有 1213 个观察的训练通过时结束。

损失:我们在模型训练期间试图最小化的标量值。损失越低,我们的预测就越接近真实标签。

这通常是上面 David Maust 所说的均方误差 (MSE),或者经常在 Keras 中,Categorical Cross Entropy


您希望从 运行 适合您的 Keras 模型的结果中看到,损失在 n 个时期内有所减少。你的训练 运行 很不正常,因为你的损失实际上在增加。这 可能 是由于学习率太大,导致您超出最佳值。

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

因此,您应该在编译方法中包含一个指标列表,如下所示:

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

以及运行你的模型在拟合方法中的验证,例如:

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

还有很多内容需要解释,但希望这能让您入门。