python - Keras 多类训练准确率没有提高,没有损失报告
问题描述
我不确定我的数据或我提出问题的方式有什么问题。我已经构建了一个时间序列数据集,在 x(10 个特征)上具有多个输入特征,并且 y 被构建为一个热编码的多类输出,其特征为 (61726,3)。y 类具有三个潜在值,每个值的频率估计值:
- [1 0 0], 4200
- [0 1 0], 2000
- [0 0 1], 2100
我在 Keras 中的模型如下:
trainy = to_categorical(trainy)
testy = to_categorical(testy)
# create model
model = Sequential()
model.add(Dense(8, input_dim=trainx.shape[1], activation='relu'))
model.add(Dense(3, activation='softmax'))
#Compile model
model.compile(loss='categorical_crossentropy',
# optimizer=SGD(lr=0.0001),
optimizer='adam',
metrics=['categorical_accuracy'])
trainy_ints=numpy.argmax(trainy, axis=1)
class_weights=class_weight.compute_class_weight(class_weight='balanced',
classes=numpy.unique(trainy_ints),
classification y=trainy_ints)
class_weights=dict(enumerate(class_weights))
print('\tusing class_weights: ',class_weights)
model.fit(x=trainx,y=trainy,
batch_size=batchSize,epochs=epochs,
class_weight=class_weights)
正如其他答案中所建议的,我尝试将优化函数更改为 SGD 并更改学习率,但这并没有帮助。
我发现了另一个关于不平衡类的答案,并认为这对我的问题很有意义,因为该算法可能总是预测最频繁的类,所以我也尝试使用 class_weights 参数,如您所见,但我仍然遇到同样的问题。
这是我在训练期间有问题的输出的一个例子。您还可以看到,第一个时期似乎总是以较低的精度开始,然后在第二个时期它总是达到最大值。
Epoch 1/100
63/63 [==============================] - 0s 3ms/step - loss: nan - categorical_accuracy: 0.4818
Epoch 2/100
63/63 [==============================] - 0s 3ms/step - loss: nan - categorical_accuracy: 0.4933
Epoch 3/100
63/63 [==============================] - 0s 3ms/step - loss: nan - categorical_accuracy: 0.4933
任何见解都非常感谢!谢谢。
解决方案
我发现我的输入数据集中仍有“nan”,这导致训练过程中断。
推荐阅读
- react-native - React Native 找不到变量:导航
- elasticsearch - 如何在不知道 Elasticsearch 中的字段的情况下进行搜索
- javascript - 使用 .fromHTML 方法生成 PDF 时文本对齐不正确
- html - 如何以不同的方式为网页着色?
- javascript - 如何防止将非常小的数字转换为科学计数法?
- python - 为什么可选参数帮助消息根据动作参数而变化?
- javascript - 如何在 WEB.API 中显示自定义错误 JSON 结果
- html - html 或 css 来调整和格式化博客文章的宽度
- express - 我们如何从 react native 的 fetch 函数中获取 post 数据来表达 api?
- vaadin - Vaadin UI 分离异常