keras TF Transformer模型永远不会过拟合,只是平稳:对该训练曲线的解释和改进建议

n53p2ov0  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(127)

bounty将在6天后过期。回答此问题有资格获得+50声望奖励。Stooges4正在寻找规范答案

此训练曲线适用于处理2D的Transformer模型(不包括批量)顺序信号,并使用亚当优化器,32批量大小和学习率:一个自定义的LR训练器,复制了在“注意力就是你所需要的一切”论文中使用的热身调度器。训练曲线低于平台,最终训练损失略低于验证损失,但训练损失永远不会开始回升,我将其解释为模型从未开始过拟合,只是在90左右的时期后停止重新调整权重。
更好的解释和解决方案,以改善这一模式?


的数据
下面是我的简短可复制代码:

x_train = np.random.normal(size=(32, 512, 512))
batch_size = 32
H, W = x_train.shape
rows, cols = np.indices((H, W), sparse=True)
padding_mask_init = np.zeros((H, W, W), dtype=np.bool_)
padding_mask_init[rows, 1:, cols] = 1
padding_mask = padding_mask_init[:batch_size]
embed_dim = 512
dense_dim = 2048
num_heads = 2
shape = (batch_size, embed_dim, 512) #(32, 512, 512)
decoder_inputs = layers.Input(batch_input_shape=shape, dtype=tensorflow.float16)
mha_1 = layers.MultiHeadAttention(num_heads=num_heads, key_dim=embed_dim)
mha_2 = layers.MultiHeadAttention(num_heads=num_heads, key_dim=embed_dim)
layernorm_1 = layers.LayerNormalization()

Z = decoder_inputs
Z = mha_1(query=Z, value=Z, key=Z, use_causal_mask=True, attention_mask=padding_mask)
Z = layernorm_1(Z + decoder_inputs)
Z = mha_2(query=Z, value=decoder_inputs, key=decoder_inputs, attention_mask=padding_mask)
outputs = layers.TimeDistributed(keras.layers.Dense(embed_dim, activation="softmax"))(Z)

model = keras.Model(decoder_inputs, outputs)
model.compile(loss="mean_squared_error", optimizer=tf.keras.optimizers.Adam(learning_rate=lr_schedule(embed_dim, 3000),beta_1=0.9,beta_2=0.98,epsilon=1.0e-9), metrics=["accuracy"])

history = model.fit(dataset, epochs=200, validation_data=val_dataset)

字符串

bksxznpy

bksxznpy1#

**首先,**我将给你留下一个博客文章源,它很好地解释了如何进行深度神经网络的训练过程。我相信无论如何,这都会对阅读有帮助。
**第二,**不爬升的训练损失不能被解释为非过拟合。相反,缺失的验证损失爬升可能表明您的模型没有过拟合。

最后,优化是所有关于容量。如果你的模型不能过拟合,你可以尝试增加模型的参数数量,或者最初尝试减少数据,看看你是否能够在整个数据集的一个小子集上过拟合。

接下来要考虑的事项:

  • 你的学习率可能太高(由陡峭的下降和“早期”收敛指示)
  • 您的批量大小可能有点太高(由损失曲线的小带宽表示,但很难说)
  • 添加图层并报告。
  • 注:* 如果不知道您的数据,这真的很难回答。

相关问题