machine-learning - Keras 模型精度没有提高
问题描述
我正在尝试训练一个神经网络来预测 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 是玩家的评分。我做错了什么?
解决方案
推荐阅读
- wildfly - JBoss WildFly 15.0.1 Final 未在具有 2 GB 的 ubuntu 14.04 vServer 上启动:JRE 内存不足
- laravel - 开发 laravel 和 vue 项目的最佳解决方案是什么?
- javascript - 如何在点击时更改服务器字段的值
- python - 类型错误:assertListEqual() 缺少 1 个必需的位置参数:'list2'
- javascript - 翻译字符串提取
- bash - 如何在 Ansible playbook 中为每个客户端设置不同的环境变量
- javascript - 将 OnClick 事件从组件传递到其他组件
- php - 'mail(): "sendmail_from" 未在 php.ini 中设置或自定义 "From:" 标头丢失' 错误
- java - 无法从 MainActivity 中找到 Menu.xml 中包含的特定项目 ID
- css - Sass/Css 我可以在悬停动作中设置多个类吗?