Keras模型精度未提高

时间:2019-01-17 07:35:07

标签: machine-learning keras neural-network

我正在尝试训练神经网络,以通过电竞预测FIFA 18中球员的评分(评分介于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),尝试了不同的损失函数,添加/删除了辍学层,并对模型的权重尝试了不同的正则化。

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 个答案:

答案 0 :(得分:1)

您可以尝试以下步骤:

  1. 使用均方误差损失函数。
  2. 使用 Adam ,它将帮助您以较低的学习率(例如0.0001或0.001)更快地收敛。否则,请尝试使用 RMSprop优化器
  3. 使用默认正则化器。其实没有。
  4. 由于这是一项回归任务,因此在除输出层(包括输入层)以外的所有层中使用像ReLU这样的激活功能。在输出层中使用线性激活
  5. 如@pooyan在评论中所述,标准化功能。参见here。甚至尝试standardizing the features。使用最适合的套房。