【问题标题】:Keras loss value not changingKeras 损失值不变
【发布时间】:2018-10-21 12:53:06
【问题描述】:

我正在尝试在贷款状态数据集上应用深度学习网络,以检查我是否可以获得比传统机器学习算法更好的结果。

准确度似乎非常低(甚至低于使用正常逻辑回归)。我该如何改进它?

我尝试过的事情: - 改变学习率 - 增加层数 - 增加/减少节点数**

X = df_dummies.drop('Loan_Status', axis=1).values
y = df_dummies['Loan_Status'].values
model = Sequential()

model.add(Dense(50, input_dim = 17, activation = 'relu'))
model.add(Dense(100, activation = 'relu'))
model.add(Dense(100, activation = 'relu'))
model.add(Dense(100, activation = 'relu'))
model.add(Dense(100, activation = 'relu'))
model.add(Dense(1, activation = 'sigmoid'))

sgd = optimizers.SGD(lr = 0.00001)

model.compile(optimizer=sgd, loss='binary_crossentropy', metrics=`['accuracy'])`

model.fit(X, y, epochs = 50, shuffle=True, verbose=2)
model.summary()

纪元 1/50 - 1s - 损失:4.9835 - acc:0.6873 纪元 2/50 - 0s - 损失:4.9830 - acc:0.6873 时代 3/50 - 0s - 损失:4.9821 - acc:0.6873 时代 4/50 - 0s - 损失:4.9815 - acc:0.6873 纪元 5/50 - 0s - 损失:4.9807 - acc:0.6873 时代 6/50 - 0s - 损失:4.9800 - acc:0.6873 纪元 7/50 - 0s - 损失:4.9713 - acc:0.6873 时代 8/50 - 0s - 损失:8.5354 - acc:0.4397 纪元 9/50 - 0s - 损失:4.8322 - acc:0.6743 纪元 10/50 - 0s - 损失:4.9852 - acc:0.6873 11/50 纪元 - 0s - 损失:4.9852 - acc:0.6873 12/50 纪元 - 0s - 损失:4.9852 - acc:0.6873 13/50 纪元 - 0s - 损失:4.9852 - acc:0.6873 14/50 纪元 - 0s - 损失:4.9852 - acc:0.6873 15/50 纪元 - 0s - 损失:4.9852 - acc:0.6873 16/50 纪元 - 0s - 损失:4.9852 - acc:0.6873 17/50 纪元 - 0s - 损失:4.9852 - acc:0.6873 18/50 纪元 - 0s - 损失:4.9852 - acc:0.6873 19/50 纪元 - 0s - 损失:4.9852 - acc:0.6873 20/50 纪元 - 0s - 损失:4.9852 - acc:0.6873 21/50 纪元 - 0s - 损失:4.9852 - acc:0.6873 22/50 纪元 - 0s - 损失:4.9852 - acc:0.6873 时代 23/50 - 0s - 损失:4.9852 - acc:0.6873 时代 24/50 - 0s - 损失:4.9852 - acc:0.6873 25/50 纪元 - 0s - 损失:4.9852 - acc:0.6873 时代 26/50 - 0s - 损失:4.9852 - acc:0.6873 时代 27/50 - 0s - 损失:4.9852 - acc:0.6873 时代 28/50 - 0s - 损失:4.9852 - acc:0.6873 29/50 纪元 - 0s - 损失:4.9852 - acc:0.6873 时代 30/50 - 0s - 损失:4.9852 - acc:0.6873 时代 31/50 - 0s - 损失:4.9852 - acc:0.6873 时代 32/50 - 0s - 损失:4.9852 - acc:0.6873 时代 33/50 - 0s - 损失:4.9852 - acc:0.6873 时代 34/50 - 0s - 损失:4.9852 - acc:0.6873 时代 35/50 - 0s - 损失:4.9852 - acc:0.6873 时代 36/50 - 0s - 损失:4.9852 - acc:0.6873 时代 37/50 - 0s - 损失:4.9852 - acc:0.6873 时代 38/50 - 0s - 损失:4.9852 - acc:0.6873 时代 39/50 - 0s - 损失:4.9852 - acc:0.6873 时代 40/50 - 0s - 损失:4.9852 - acc:0.6873 时代 41/50 - 0s - 损失:4.9852 - acc:0.6873 时代 42/50 - 0s - 损失:4.9852 - acc:0.6873 时代 43/50 - 0s - 损失:4.9852 - acc:0.6873 时代 44/50 - 0s - 损失:4.9852 - acc:0.6873 时代 45/50 - 0s - 损失:4.9852 - acc:0.6873 时代 46/50 - 0s - 损失:4.9852 - acc:0.6873 时代 47/50 - 0s - 损失:4.9852 - acc:0.6873 时代 48/50 - 0s - 损失:4.9852 - acc:0.6873 时代 49/50 - 0s - 损失:4.9852 - acc:0.6873 纪元 50/50 - 0s - 损失:4.9852 - acc:0.6873

Layer (type)                 Output Shape              Param #   
=================================================================
dense_19 (Dense)             (None, 50)                900       
_________________________________________________________________
dense_20 (Dense)             (None, 100)               5100      
_________________________________________________________________
dense_21 (Dense)             (None, 100)               10100     
_________________________________________________________________
dense_22 (Dense)             (None, 100)               10100     
_________________________________________________________________
dense_23 (Dense)             (None, 100)               10100     
_________________________________________________________________
dense_24 (Dense)             (None, 1)                 101       
=================================================================
Total params: 36,401
Trainable params: 36,401
Non-trainable params: 0
_________________________________________________________________

【问题讨论】:

    标签: python keras


    【解决方案1】:

    **通过使网络更深并添加 dropout,我能够获得轻微的改进,但我仍然认为这可以进一步改进,因为使用正常的逻辑回归可以提供更好的准确度 (80%+)。

    有人知道进一步改进的方法吗?**

    model = Sequential()
    
    model.add(Dense(1000, input_dim = 17, activation = 'relu'))
    model.add(Dropout(0.2))
    model.add(Dense(1000, activation = 'relu'))
    model.add(Dropout(0.2))
    model.add(Dense(1000, activation = 'relu'))
    model.add(Dropout(0.2))
    model.add(Dense(1000, activation = 'relu'))
    model.add(Dropout(0.2))
    model.add(Dense(1000, activation = 'relu'))
    model.add(Dropout(0.2))
    model.add(Dense(1000, activation = 'relu'))
    model.add(Dense(1, activation = 'sigmoid'))
    
    sgd = optimizers.SGD(lr = 0.0001)
    
    model.compile(optimizer=sgd, loss='binary_crossentropy', metrics=['accuracy'])
    
    
    
    model.fit(X_train, y_train, epochs = 20, shuffle=True, verbose=2, batch_size=30)
    
    
    
    Epoch 1/20
     - 2s - loss: 4.8965 - acc: 0.6807
    Epoch 2/20
     - 1s - loss: 4.6824 - acc: 0.7063
    Epoch 3/20
     - 1s - loss: 4.6091 - acc: 0.7040
    Epoch 4/20
     - 1s - loss: 4.5642 - acc: 0.7040
    Epoch 5/20
     - 1s - loss: 4.6937 - acc: 0.7040
    Epoch 6/20
     - 1s - loss: 4.6830 - acc: 0.7063
    Epoch 7/20
     - 1s - loss: 4.6824 - acc: 0.7063
    Epoch 8/20
     - 1s - loss: 4.6824 - acc: 0.7063
    Epoch 9/20
     - 1s - loss: 4.6824 - acc: 0.7063
    Epoch 10/20
     - 1s - loss: 4.6452 - acc: 0.7086
    Epoch 11/20
     - 1s - loss: 4.6824 - acc: 0.7063
    Epoch 12/20
     - 1s - loss: 4.6824 - acc: 0.7063
    Epoch 13/20
     - 1s - loss: 4.7200 - acc: 0.7040
    Epoch 14/20
     - 1s - loss: 4.6608 - acc: 0.7063
    Epoch 15/20
     - 1s - loss: 4.6940 - acc: 0.7040
    Epoch 16/20
     - 1s - loss: 4.7136 - acc: 0.7040
    Epoch 17/20
     - 1s - loss: 4.6056 - acc: 0.7063
    Epoch 18/20
     - 1s - loss: 4.5640 - acc: 0.7016
    Epoch 19/20
     - 1s - loss: 4.7009 - acc: 0.7040
    Epoch 20/20
     - 1s - loss: 4.6892 - acc: 0.7040
    

    【讨论】:

      猜你喜欢
      • 2020-06-06
      • 2020-11-08
      • 2022-10-19
      • 2023-01-19
      • 2021-01-04
      • 2019-02-13
      • 1970-01-01
      • 2019-10-06
      • 1970-01-01
      相关资源
      最近更新 更多