Keras Sequential 顺序模型
2019-10-02 本文已影响0人
墨马
创建Sequential模型
通过网络层实例的列表传递给Sequential的构造器
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'))
指定输入数据的尺寸
模型需要知道它所期望的输入的尺寸,顺序模型的第一层需要接受关于尺寸的信息(其他层可以推断)
- input_shap 表示尺寸的元组(整数或None,None表示任何整数) ,不包含batch大小。
- 某些2D层(Dense)支持通过input_dim指定尺寸,某些3D支持input_dim和input_length参数。
- batch_size固定batch大小。
batsize = 32
input_shap=(6,8)
每一批输入的尺寸是(32,6,8)
model = Sequential()
model.add(Dense(32, input_shape=(784,)))
# 等价于
model = Sequential()
model.add(Dense(32, input_dim=784))
模型编译
通过compile配置学习过程
- 优化器optimizer
- 现有优化器的字符串标识:rmsprop或adagrad
- Optimizer类的实例
- 损失函数loss,模型试图最小化的目标函数
- 现有损失函数的字符串标识符:categorical_crossentropy 或 mse
- 目标函数
- 评估标准metrics(metrics = ['accuracy'])
- 现有的标准的字符串标识符
- 自定义的评估标准函数
# 多分类问题
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])
模型训练
对输入数据和标签的Numpy矩阵上进行训练。
通常使用fit函数
# 对于具有 2 个类的单输入模型(二进制分类):
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'])
# 生成虚拟数据
import numpy as np
data = np.random.random((1000, 100))
labels = np.random.randint(2, size=(1000, 1))
# 训练模型,以 32 个样本为一个 batch 进行迭代
model.fit(data, labels, epochs=10, batch_size=32)
# 对于具有 10 个类的单输入模型(多分类分类):
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'])
# 生成虚拟数据
import numpy as np
data = np.random.random((1000, 100))
labels = np.random.randint(10, size=(1000, 1))
# 将标签转换为分类的 one-hot 编码
one_hot_labels = keras.utils.to_categorical(labels, num_classes=10)
# 训练模型,以 32 个样本为一个 batch 进行迭代
model.fit(data, one_hot_labels, epochs=10, batch_size=32)