【问题标题】:Loss is not decreasing while training Keras Sequential Model训练 Keras 序列模型时损失没有减少
【发布时间】:2019-09-18 11:35:25
【问题描述】:

我正在创建一个非常简单的 2 层前馈网络,但我发现损失根本没有更新。我有一些想法,但我想获得额外的反馈/指导。

数据详情:

X_train: (336876, 158)

X_dev: (42109, 158)

Y_train 计数:

0    285793
1     51083
Name: default, dtype: int64

Y_dev 计数:

0    35724
1     6385
Name: default, dtype: int64

这是我的模型架构:

# define the architecture of the network
model = Sequential()
model.add(Dense(50, input_dim=X_train.shape[1], init="uniform", activation="relu"))
model.add(Dense(3print("[INFO] compiling model...")

adam = Adam(lr=0.01)
model.compile(loss="binary_crossentropy", optimizer=adam,
    metrics=['accuracy'])
model.fit(np.array(X_train), np.array(Y_train), epochs=12, batch_size=128,  verbose=1)Dense(1, activation = 'sigmoid'))

现在,有了这个,我在前几个 epoch 之后的损失如下:

Epoch 1/12
336876/336876 [==============================] - 8s - loss: 2.4441 - acc: 0.8484     
Epoch 2/12
336876/336876 [==============================] - 7s - loss: 2.4441 - acc: 0.8484     
Epoch 3/12
336876/336876 [==============================] - 6s - loss: 2.4441 - acc: 0.8484     
Epoch 4/12
336876/336876 [==============================] - 7s - loss: 2.4441 - acc: 0.8484     
Epoch 5/12
336876/336876 [==============================] - 7s - loss: 2.4441 - acc: 0.8484     
Epoch 6/12
336876/336876 [==============================] - 7s - loss: 2.4441 - acc: 0.8484     
Epoch 7/12
336876/336876 [==============================] - 7s - loss: 2.4441 - acc: 0.8484     
Epoch 8/12
336876/336876 [==============================] - 6s - loss: 2.4441 - acc: 0.8484     
Epoch 9/12
336876/336876 [==============================] - 6s - loss: 2.4441 - acc: 0.8484    

当我之后测试模型时,我的 f1_score 为 0。我的主要想法是我可能需要更多数据,但我仍然希望它比现在在测试集上的表现更好。会不会是过拟合了?我添加了 Dropout,但也没有运气。

任何帮助将不胜感激。

【问题讨论】:

    标签: python pandas keras classification


    【解决方案1】:

    乍一看,我认为你的学习率太高了。此外,请考虑规范化您的数据,特别是如果不同的特征具有不同的值范围(查看Scaling)。此外,请考虑根据您的标签是否为多类来更改您的层激活。假设您的代码是这种形式(您似乎在问题描述中有一些拼写错误):

    # define the architecture of the network
    model = Sequential()
    #also what is the init="uniform" argument? I did not find this in keras documentation, consider removing this.
    model.add(Dense(50, input_dim=X_train.shape[1], init="uniform", 
    activation="relu"))
    model.add(Dense(1, activation = 'sigmoid')))
    #a slightly more conservative learning rate, play around with this.
    adam = Adam(lr=0.0001)
    model.compile(loss="binary_crossentropy", optimizer=adam,
    metrics=['accuracy'])
    model.fit(np.array(X_train), np.array(Y_train), epochs=12, batch_size=128,  
    verbose=1)
    

    这应该导致损失收敛。如果没有,请考虑加深你的神经网络(想想你可能需要多少参数)。

    【讨论】:

      【解决方案2】:

      考虑在编译模型之前添加分类层。

      model.add(Dense(1, activation = 'sigmoid'))
      adam = Adam(lr=0.01)
      model.compile(loss="binary_crossentropy", optimizer=adam,
          metrics=['accuracy'])
      model.fit(np.array(X_train), np.array(Y_train), epochs=12, batch_size=128, verbose=1)
      

      【讨论】:

        猜你喜欢
        • 2019-08-18
        • 2018-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-27
        相关资源
        最近更新 更多