Machine learning 损失与损失;准确度-这些学习曲线是否合理?

Machine learning 损失与损失;准确度-这些学习曲线是否合理?,machine-learning,neural-network,keras,classification,loss,Machine Learning,Neural Network,Keras,Classification,Loss,我正在学习神经网络,我在Keras中为UCI机器学习库中的虹膜数据集分类构建了一个简单的神经网络。我使用了一个带有8个隐藏节点的单隐藏层网络。Adam optimizer的学习率为0.0005,可运行200个时代。Softmax用于输出,损耗作为对数交叉熵。我得到以下学习曲线 正如你所看到的,精度的学习曲线有很多平坦的区域,我不明白为什么。误差似乎在不断减小,但精度似乎没有以同样的方式增加。准确度学习曲线中的平坦区域意味着什么?为什么即使误差似乎在减小,这些区域的精度却没有增加 这在训练中是正

我正在学习神经网络,我在Keras中为UCI机器学习库中的虹膜数据集分类构建了一个简单的神经网络。我使用了一个带有8个隐藏节点的单隐藏层网络。Adam optimizer的学习率为0.0005,可运行200个时代。Softmax用于输出,损耗作为对数交叉熵。我得到以下学习曲线

正如你所看到的,精度的学习曲线有很多平坦的区域,我不明白为什么。误差似乎在不断减小,但精度似乎没有以同样的方式增加。准确度学习曲线中的平坦区域意味着什么?为什么即使误差似乎在减小,这些区域的精度却没有增加

这在训练中是正常的还是更可能是我做错了什么

dataframe=pd.read\u csv(“iris.csv”,header=None)
dataset=dataframe.values
X=dataset[:,0:4].aType(浮点)
y=数据集[:,4]
scalar=StandardScaler()
X=标量拟合变换(X)
label_编码器=LabelEncoder()
y=标签\编码器。拟合\变换(y)
编码器=OneHotEncoder()
y=encoder.fit_transform(y.reformate(-1,1)).toarray()
#创建模型
模型=顺序()
添加(密集(8,输入尺寸=4,激活=relu'))
model.add(密集型(3,activation='softmax'))
#编译模型
adam=优化器。adam(lr=0.0005,beta_1=0.9,beta_2=0.999,ε=1e-08,衰减=0.0)
model.compile(loss='classifical_crossentropy',
优化器=亚当,
指标=[‘准确度’])
#符合模型
log=model.fit(X,y,epochs=200,批量大小=5,验证分割=0.2)
图=plt.图()
图suptitle(“Adam,lr=0.0006,一个隐藏层”)
ax=图add_子批次(1,2,1)
ax.设置标题(“成本”)
ax.plot(log.history['loss'],label='Training')
ax.plot(log.history['val_loss'],label='Validation')
ax.图例()
ax=图add_子批次(1,2,2)
ax.集合标题(“准确度”)
ax.plot(log.history['acc'],label='Training')
ax.plot(log.history['val_acc'],label='Validation')
ax.图例()
图2(图3)

稍微了解一下损失和准确性的实际含义(和机制)将在这里有很大帮助(也请参考我的,尽管我将重用一些零件)

为了简单起见,我将把讨论限制在二元分类的情况下,但是这个想法是普遍适用的;以下是(逻辑)损失的方程式:

  • y[i]
    是真正的标签(0或1)
  • p[i]
    是预测(0,1中的实数),通常被解释为概率
  • output[i]
    (方程式中未显示)是
    p[i]
    的四舍五入,以便将它们也转换为0或1;正是这个数量进入精度计算,隐含地涉及一个阈值(对于二进制分类,通常为
    0.5
    ),因此如果
    p[i]>0.5
    ,则
    输出[i]=1
    ,否则如果
    p[i]