我一直在为我正在从事的这个当前项目处理深度学习项目,它基本上是一个时间序列分类问题。在给定一系列时间序列数据的情况下,我需要将客户分类为诚实或不诚实。
我现在拥有的当前模型仅使用 CNN,但我计划在未来使用 LSTM 或其他模型对其进行扩展。这是我的模型的代码。
model = Sequential([
Input(batch_input_shape = (None, 1036, 1)),
Conv1D(
filters=32,
kernel_size=3,
padding='same',
activation='relu',
activity_regularizer=l2(5e-4),
),
Conv1D(
filters=16,
kernel_size=3,
padding='same',
activation='relu',
activity_regularizer=l2(5e-4),
),
MaxPooling1D(),
Conv1D(
filters=8,
kernel_size=3,
padding='same',
activation='relu',
activity_regularizer=l2(5e-4),
),
Conv1D(
filters=8,
kernel_size=3,
padding='same',
activation='relu',
activity_regularizer=l2(5e-4),
),
MaxPooling1D(),
Flatten(),
Dense(10, activation='relu'),
Dropout(0.25),
Dense(1, activation='sigmoid'),
])
model.compile(
# optimizer=tf.keras.optimizers.Adam(learning_rate=1e-4),
loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
metrics=[f1_m,precision_m, recall_m, matthews_correlation, 'accuracy', fpr_m]
)
我已经尝试了很多东西,它们是:
- 减少网络规模。这仍然会导致相同的问题,但在网络中的不同点
- 降低优化器的学习率。与上面的点相同。这似乎有效,但实际上发生这种情况时它正在改变。
我愿意接受任何关于如何使测试曲线更符合训练曲线的意见或建议。我应该注意我的数据集是不平衡的,我只是平衡x_train和y_train使用 SMOTE,而不是平衡测试和验证数据集以保持数据尽可能干净。
