标准Keras模型输出意味着什么?喀拉斯的时代和损失是什么?

2024-05-15 14:56:04 发布

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

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

喀拉斯的时代和损失是什么?

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

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

Tags: 答案文档模型标准keras损失人工神经网络loss
2条回答

为了更具体地回答这些问题,这里有一个时代和损失的定义:

Epoch:对所有培训数据进行全面检查。

例如,在上面的视图中,您有1213个观察结果。因此,当一个纪元完成了你所有1213次观察的训练关卡时,它就结束了。

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

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


从你的路缘石模型上跑起来,你期望看到的是在n个时期内损失的减少。你的训练跑很不正常,因为你的损失实际上在增加。这可能是由于学习率太大,导致您超出了optima。

正如jaycode所提到的,您将希望查看模型在不可见数据上的性能,因为这是机器学习的一般用例。

因此,您应该在编译方法中包含一个度量列表,它可能如下所示:

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

以及在fit方法期间在验证时运行模型,例如:

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

还有很多要解释,但希望这能让你开始。

当您的模型在网络中的所有节点上运行数据并准备更新权重以达到最佳损失值时,一个纪元结束。也就是说,越小越好。在你的例子中,由于在更高的历元上有更高的损失分数,“似乎”模型在第一个历元上更好。

我说“似乎”是因为我们还不能确定,因为该模型还没有用正确的交叉验证方法进行测试,也就是说,它只根据其训练数据进行评估。

改进模型的方法:

  • 在你的Keras模型中使用交叉验证来找出模型的实际执行情况,它在预测以前从未见过的新数据时是否能很好地概括?
  • 调整学习速度、神经网络模型的结构、隐藏单元/层的数量、init、优化器和模型中使用的激活器参数等等。

将sklearn的GridSearchCV与Keras相结合可以使这个过程自动化。

相关问题 更多 >