【发布时间】:2020-11-03 00:59:32
【问题描述】:
我不确定我的数据或我提出问题的方式有什么问题。 我已经构建了一个时间序列数据集,在 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
任何见解都非常感谢!谢谢。
【问题讨论】:
标签: python machine-learning keras neural-network