我有一个模型,学会在7-14个时期之后几乎以100%的准确度进行分类(二进制分类)但在达到0.0004的最小损失之后,在下一个时期它会跳到7.5(这意味着它有50%的几率正确分类,同样有机会)然后在所有后续时期保持在7.附近。
我使用adam optimiser来处理学习率。
如何防止培训损失增加?
SGD优化器不会发生这种巨大的跳跃。
inputs = Input(shape=(X_train.shape[1],))
Dx = Dense(32, activation="relu")(inputs)
Dx = Dense(32, activation="relu")(Dx)
for i in range(20):
Dx = Dense(32, activation="relu")(Dx)
Dx = Dense(1, activation="sigmoid")(Dx)
D = Model(input=[inputs], output=[Dx])
D.compile(loss="binary_crossentropy", optimizer="adam")
D.fit(X_train, y_train, nb_epoch=20)
答案 0 :(得分:1)
对于完全连接的体系结构,您的网络非常深。您最有可能受到vanishing- or exploding gradient的打击,即由重复乘以非常小或非常大的数字引起的数值问题。我建议使用一个较浅但较宽的网络,在我的经验中,像2-3层这样的密集层通常就足够了。如果您希望使用更深的体系结构,可以尝试使用skip connections之类的东西。
答案 1 :(得分:0)
这可能来自小批量。您可以尝试增加批量大小。 referring to this.