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 模型精度没有提高的主要内容,如果未能解决你的问题,请参考以下文章