Machine learning Keras模型精度没有提高

Machine learning Keras模型精度没有提高,machine-learning,keras,neural-network,Machine Learning,Keras,Neural Network,我正在尝试训练一个神经网络来预测国际足联18届比赛中的球员在easports的排名(排名在64-99之间)。我正在使用他们的球员数据库()并将数据处理成训练、测试、训练、测试。每个训练样本都是一个包含7个值的numpy数组…前6个是球员的不同状态(投篮、传球、运球等),最后一个值是球员的位置(我将其映射到1-8之间,具体取决于位置),每个测试值是64-99之间的单个整数,代表该玩家的等级 我尝试了许多不同的超参数,包括将激活函数更改为tanh和relu,并尝试在第一个密集层之后添加一个批处理规范

我正在尝试训练一个神经网络来预测国际足联18届比赛中的球员在easports的排名(排名在64-99之间)。我正在使用他们的球员数据库()并将数据处理成训练、测试、训练、测试。每个训练样本都是一个包含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是玩家的评级。我到底做错了什么?

您可以尝试以下步骤:

  • 使用均方误差损失函数
  • 使用Adam,这将帮助您以较低的学习率(如0.0001或0.001)更快地收敛。否则,请尝试使用RMSprop优化器
  • 使用默认正则化器。实际上没有
  • 由于这是一项回归任务,在除输出层(包括输入层)之外的所有层中使用类似ReLU的激活功能。在输出层中使用线性激活
  • 正如@pooyan在评论中所提到的,规范化功能。请参阅。甚至尝试。使用最好的套件

  • 您可以尝试以下步骤:

  • 使用均方误差损失函数
  • 使用Adam,这将帮助您以较低的学习率(如0.0001或0.001)更快地收敛。否则,请尝试使用RMSprop优化器
  • 使用默认正则化器。实际上没有
  • 由于这是一项回归任务,在除输出层(包括输入层)之外的所有层中使用类似ReLU的激活功能。在输出层中使用线性激活
  • 正如@pooyan在评论中所提到的,规范化功能。请参阅。甚至尝试。使用最好的套件

  • 在将主题导入网络之前,可能需要对数据进行规范化。在将主题导入网络之前,可能需要对数据进行规范化。