【问题标题】:Keras LSTM multiclass classificationKeras LSTM 多类分类
【发布时间】:2018-03-08 16:29:54
【问题描述】:

我有这段代码适用于二进制分类。我已经针对 keras imdb 数据集对其进行了测试。

    model = Sequential()
    model.add(Embedding(5000, 32, input_length=500))
    model.add(LSTM(100, dropout=0.2, recurrent_dropout=0.2))
    model.add(Dense(1, activation='sigmoid'))
    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])        
    print(model.summary())
    model.fit(X_train, y_train, epochs=3, batch_size=64)
    # Final evaluation of the model
    scores = model.evaluate(X_test, y_test, verbose=0)

我需要将上面的代码转换为多类分类,总共有 7 个类别。在阅读了几篇文章以转换上述代码后我所理解的我必须更改

model.add(Dense(7, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])  

显然只在两行以上进行更改是行不通的。为了使代码适用于多类分类,我还需要进行哪些更改。另外我认为我必须将类更改为一种热编码,但不知道如何在 keras 中使用。

【问题讨论】:

    标签: python deep-learning keras


    【解决方案1】:

    是的,您需要一个热目标,您可以使用to_categorical 对您的目标进行编码或短方式:

    model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

    这里是完整的代码:

    from keras.models import Sequential
    from keras.layers import *
    
    model = Sequential()
    model.add(Embedding(5000, 32, input_length=500))
    model.add(LSTM(100, dropout=0.2, recurrent_dropout=0.2))
    model.add(Dense(7, activation='softmax'))
    model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
    
    model.summary()
    

    总结

    Using TensorFlow backend.
    _________________________________________________________________
    Layer (type)                 Output Shape              Param #   
    =================================================================
    embedding_1 (Embedding)      (None, 500, 32)           160000    
    _________________________________________________________________
    lstm_1 (LSTM)                (None, 100)               53200     
    _________________________________________________________________
    dense_1 (Dense)              (None, 7)                 707       
    =================================================================
    Total params: 213,907
    Trainable params: 213,907
    Non-trainable params: 0
    _________________________________________________________________
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-04
      • 1970-01-01
      • 2019-06-24
      • 2019-01-28
      • 2021-05-02
      • 2018-01-26
      • 1970-01-01
      • 2018-11-23
      相关资源
      最近更新 更多