基於keras的二分類和多分類

下面分別給出二分類和多分類的例子,需要重點關注一下這兩個案例的異同點,後面會給出詳細說明:

二分類

# -*- coding: utf-8 -*-
"""
@ModuleName:example_1
@Function: 
@Author: 坡哥
@Time: 2020/3/12 8:34
"""
import numpy as np
from keras.models import Sequential
from keras.layers import Dense

if __name__ == "__main__":
    model = Sequential()
    model.add(Dense(32, activation='relu', input_dim=100))
    model.add(Dense(1, activation='sigmoid'))
    model.compile(optimizer='rmsprop', loss='binary_crossentropy',
                  metrics=['accuracy'])
    data = np.random.random((1000, 100))
    labels = np.random.randint(2, size=(1000, 1))
    model.fit(data, labels, epochs=10, batch_size=32)

多分類

# -*- coding: utf-8 -*-
"""
@ModuleName:example_1
@Function: 
@Author: 坡哥
@Time: 2020/3/12 8:34
"""
import numpy as np
import keras
from keras.models import Sequential
from keras.layers import Dense

if __name__ == "__main__":
    model = Sequential()
    model.add(Dense(32, activation='relu', input_dim=100))
    model.add(Dense(10, activation='softmax'))
    model.compile(optimizer='rmsprop', loss='categorical_crossentropy',
                  metrics=['accuracy'])
    data = np.random.random((1000, 100))
    labels = np.random.randint(10, size=(1000, 1))
    one_hot_labels = keras.utils.to_categorical(labels, num_classes=10)
    model.fit(data, one_hot_labels, epochs=10, batch_size=32)

異同點:

1、model.add(Dense(10, activation='softmax'))
多分類時最後一層要用softmax層,且給出分類的個數10
2、

model.compile(optimizer='rmsprop', loss='categorical_crossentropy',
                  metrics=['accuracy'])

loss選擇categorical_crossentropy時,下面要對label進行one_hot編碼
3、

one_hot_labels = keras.utils.to_categorical(labels, num_classes=10)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章