Getting started with the Keras Sequential model
翻译原文:https://keras.io/getting-started/sequential-model-guide/
Sequential 是layers的线性叠加
可以通过在 Sequential 中列出一系列的 layer 实例来构建模型
from keras.models import Sequential
from keras.layers import Dense, Activation
model = Sequential([
Dense(32, input_shape=(784,)),
Activation('relu'),
Dense(10),
Activation('softmax'),
])
同样地,可通过 .add() 添加层来构建模型(两种方式构建的模型相同)
model = Sequential()
model.add(Dense(32, input_dim=784))
model.add(Activation('relu'))
model.add(Dense(10))
model.add(Activation('softmax'))
Specifying the input shape
模型需要明确输入数据是什么样的shape,因此在 Sequential 的首层需要接受输入数据的shape信息(并且也是唯一需要接受此shape的层,其他层会自动得到shape信息),以下有几种可行的方法输入shape信息
1 为第一层设定 input_shape 参数,参数值的类型为元组(数值为整数或者None, None表示任何正整数)在 input_shape 中,不需要包括batch的维度
2 对于2D层或3D层,可以通过设定 input_dim 参数
3 如果需要为输入数据指定确定的batch大小,可通过设定 batch_size 参数。假如 batch_size=32,input_shape=(6, 8),则指定任何输入数据的shape需要满足(32,6,8)
以下两种方式等同
model = Sequential()
model.add(Dense(32, input_shape=(784,)))
model = Sequential()
model.add(Dense(32, input_dim=784))
Compilation
在训练模型之前,必要要配置学习过程,其通过 compile 方法来配置,其三个参数如下:
1 optimizer 其值可以为存在优化算法的字符串,也可以是Optimizer类的实例,具体可看optimizers
2 loss 此为模型需要最小化的损失函数,其值可以为存在的损失函数的字符串,也可以是一个损失函数,具体可看losses
3 metrics 其值为列表,列表中元素是需要得到的指标,指标可以为存在的指标的字符串,也可以是自定义的度量函数,具体可看metrics
# 对于多分类问题
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
# 对于二分类问题
model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['accuracy'])
# 对于均方误差回归问题
model.compile(optimizer='rmsprop',
loss='mse')
# 对于自定义的度量函数
import keras.backend as K
def mean_pred(y_true, y_pred):
return K.mean(y_pred)
model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['accuracy', mean_pred])
Training
keras 模型在numpy格式的输入数组和标签上训练,使用 fit 函数开始训练,其中参数详情查看The Sequential model API
# 训练一个二分类模型
model = Sequential()
model.add(Dense(32, input_dim=100, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['accuracy'])
# 产生一些numpy数据
import numpy as np
data = np.random.random((1000, 100))
labels = np.random.randint(2, size=(1000, 1))
# 训练模型,batch大小为32
model.fit(data, labels, epochs=10, batch_size=32)
# 构建一个10分类的模型
import keras
model = Sequential()
model.add(Dense(32, input_dim=100, activation='relu'))
model.add(Dense(10, activation='softmax'))
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
# 产生一些numpy数据
import numpy as np
data = np.random.random((1000, 100))
labels = np.random.randint(10, size=(1000, 1))
# 将labels进行one-hot编码
one_hot_labels = keras.utils.to_categorical(labels, num_classes=10)
# 训练模型,batch大小为32
model.fit(data, one_hot_labels, epochs=10, batch_size=32)