我正在基于8000个输入的训练模型来预测20个输出的向量,其中两个向量的每个元素都是二进制的。当前的模型架构如下:
model = keras.Sequential([
keras.layers.Dense(8000, activation='relu', input_shape=(8000,), kernel_initializer="he_normal"),
keras.layers.BatchNormalization(),
keras.layers.Dense(600, activation='relu', kernel_initializer="he_normal"),
keras.layers.BatchNormalization(),
keras.layers.Dense(600, activation='relu', kernel_initializer="he_normal"),
keras.layers.Dropout(0.5),
keras.layers.Dense(600, activation='relu', kernel_initializer="he_normal"),
keras.layers.Dropout(0.5),
keras.layers.Dense(20, activation='sigmoid')
])
我正在将SGD优化器与learning_rate=0.1
和momentum=0.9
一起使用。损失函数是binary_crossentropy
中的keras.losses.binary_crossentropy
,模型以512的批量大小进行训练。
培训开始后,验证损失立即激增。知道为什么会发生吗?我尝试了不同的学习率,损失,并以不同的方式应用归一化和辍学,但没有任何明显的效果。该模型在单独的测试数据集上的结果如下:
TP: 318378
TN: 20708
FP: 61682
FN: 55232
Accuracy: 0.743
感谢您的帮助。
编辑1:
对问题有有用的评论,我将模型更改为:
model = keras.Sequential([
keras.layers.Dense(8000, activation='relu', input_shape=(8000,), kernel_initializer="he_normal"),
keras.layers.BatchNormalization(),
keras.layers.Dense(600, activation='relu'),
keras.layers.BatchNormalization(),
keras.layers.Dense(600, activation='relu'),
keras.layers.Dropout(0.5),
keras.layers.Dense(20, activation='sigmoid')
])
优化器可以:
optimizers.SGD(learning_rate=0.01, momentum=0.9)
TP: 334313
TN: 16027
FP: 45747
FN: 59913
Accuracy: 0.768