Keras 模型精度没有提高

Posted

技术标签:

【中文标题】Keras 模型精度没有提高【英文标题】:Keras model accuracy not improving 【发布时间】:2019-06-11 08:45:58 【问题描述】:

我正在尝试训练一个神经网络来预测 FIFA 18 中玩家的 easports 评分(评分在 64-99 之间)。我正在使用他们的球员数据库 (https://easports.com/fifa/ultimate-team/api/fut/item?page=1),并将数据处理成 training_x、testing_x、training_y、testing_y。每个训练样本都是一个包含 7 个值的 numpy 数组……前 6 个是球员的不同统计数据(投篮、传球、运球等),最后一个值是球员的位置(我在 1 -8,取决于位置),每个测试值都是 64-99 之间的单个整数,代表该玩家的评分。

我尝试了许多不同的超参数,包括将激活函数更改为 tanh 和 relu,并且我尝试在第一个密集层之后添加一个批量标准化层(我认为它可能很有用,因为我的一个功能是非常小,其他特征在 50-99 之间),我玩过 SGD 优化器(改变了学习率,动量,甚至尝试将优化器更改为 Adam),尝试了不同的损失函数,添加/删除了 dropout 层,并为模型的权重尝试了不同的正则化器。

model = Sequential()
model.add(Dense(64, input_shape=(7,), 
          kernel_regularizer=regularizers.l2(0.01)))
//batch normalization?
model.add(Activation('sigmoid'))
model.add(Dense(64, kernel_regularizer=regularizers.l2(0.01), 
          activation='sigmoid'))
model.add(Dropout(0.3))
model.add(Dense(32, kernel_regularizer=regularizers.l2(0.01), 
          activation='sigmoid'))
model.add(Dense(1, activation='linear'))
sgd = optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='mean_absolute_error', metrics=['accuracy'], 
          optimizer=sgd)
model.fit(training_x, training_y, epochs=50, batch_size=128, shuffle=True)

当我训练模型时,损失始终为 nan,准确率始终为 0,即使我尝试调整了很多不同的参数。但是,如果我从数据中删除最后一个特征,即球员的位置,并更新第一个密集层的输入形状,那么无论我更改什么参数,模型实际上都会“训练”并最终以 6% 左右的准确率结束。在这种情况下,我发现模型只预测 79 是玩家的评分。我做错了什么?

【问题讨论】:

在将主题输入网络之前,您可能需要对数据进行规范化。 【参考方案1】:

您可以尝试以下步骤:

    使用均方误差损失函数。 使用 Adam,这将帮助您在 0.0001 或 0.001 等低学习率的情况下更快地收敛。否则,请尝试使用 RMSprop 优化器。 使用默认正则化器。实际上没有。 由于这是一个回归任务,在除输出层之外的所有层中使用类似 ReLU 的激活函数(包括输入层)。在输出层使用线性激活。 正如 @pooyan 在 cmets 中提到的,规范化特征。见here。甚至尝试standardizing the features。使用最好的套件。

【讨论】:

以上是关于Keras 模型精度没有提高的主要内容,如果未能解决你的问题,请参考以下文章

加载相同的保存模型后,Keras 模型精度有所不同

Keras DNN 预测模型准确率没有提高

使用 keras 顺序模型获得较差的分类精度

使用了 SequentialFeatureSelector 但没有提高模型精度

Keras 模型给出了 1.0 的测试精度

VGG16 Keras微调:精度低