基于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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章