下面分别给出二分类和多分类的例子,需要重点关注一下这两个案例的异同点,后面会给出详细说明:
二分类
# -*- 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)