标准 Keras 模型输出是啥意思? Keras 的时代和损失是啥?
Posted
技术标签:
【中文标题】标准 Keras 模型输出是啥意思? Keras 的时代和损失是啥?【英文标题】:What does the standard Keras model output mean? What is epoch and loss in Keras?标准 Keras 模型输出是什么意思? Keras 的时代和损失是什么? 【发布时间】:2016-04-12 22:05:27 【问题描述】:我刚刚使用 Keras 构建了我的第一个模型,这是输出。它看起来像是构建任何 Keras 人工神经网络后得到的标准输出。即使在查看文档之后,我也不完全理解纪元是什么以及输出中打印的损失是什么。
什么是 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
【问题讨论】:
Epoch 是数据的传递次数。损失是训练集上的误差,通常以均方误差(用于回归)或对数损失(用于分类)表示。 【参考方案1】:当您的模型通过网络中的所有节点运行数据并准备更新权重以达到最佳损失值时,一个时期结束。也就是说,越小越好。在您的情况下,由于较高时期的损失分数较高,因此“似乎”该模型在第一个时期更好。
我说“似乎”是因为我们实际上还不能确定,因为该模型尚未使用适当的交叉验证方法进行测试,即仅根据其训练数据对其进行评估。
改进模型的方法:
在您的 Keras 模型中使用交叉验证以了解模型的实际执行情况,它在预测从未见过的新数据时是否能很好地泛化? 调整您的学习率、神经网络模型的结构、隐藏单元/层的数量、初始化、优化器和模型中使用的激活器参数等等。将 sklearn 的 GridSearchCV 与 Keras 结合可以自动执行此过程。
【讨论】:
【参考方案2】:只是为了更具体地回答问题,这里是 epoch 和 loss 的定义:
Epoch:全面检查您的所有训练数据。
例如,在您上面的视图中,您有 1213 个观察值。因此,当一个 epoch 完成对所有 1213 个观察的训练通过时,它就结束了。
损失:我们在模型训练期间尝试最小化的标量值。损失越低,我们的预测就越接近真实标签。
这通常是上面 David Maust 所说的均方误差 (MSE),或者经常在 Keras 中,Categorical Cross Entropy
在您的 Keras 模型上运行拟合时,您期望看到的是损失在 n 个 epoch 上的减少。您的训练运行相当不正常,因为您的损失实际上正在增加。这可能是由于学习率太大,导致您超出最优值。
正如 jaycode 所提到的,您需要查看模型在不可见数据上的表现,因为这是机器学习的一般用例。
因此,您应该在编译方法中包含一个指标列表,如下所示:
model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])
以及在 fit 方法期间运行您的模型进行验证,例如:
model.fit(data, labels, validation_split=0.2)
还有很多要解释的,但希望这能让你开始。
【讨论】:
以上是关于标准 Keras 模型输出是啥意思? Keras 的时代和损失是啥?的主要内容,如果未能解决你的问题,请参考以下文章