阅读本文需要有一定的深度学习、神经网络基础
Keras 顺序 (Sequential) 模型
顺序模型是多个网络层的线性堆叠。 使用顺序模型的基本步骤如下:
- 初始化顺序模型并指定网络结构
- 编译:通过
compile
方法指定优化器、损失函数、评估标准 - 训练模型:使用
fit
函数
模型的初始化
建立方式如下:
|
|
以上2种方式是等价的,以下将进行基本解释:
model.add(Dense(32, input_dim=784))
:Dense代表核心网络层(即普通的全连接层),其中32代表输出空间的维度,input_dim则表示输入数据的维度,类似的还有Conv2D(卷积层),MaxPooling2D (MaxPooling层),lstm(循环层)等。model.add(Activation('relu'))
:Activation代表激活函数,可以配置单独的激活层(也可统称位隐层层)实现,也可在构造层对象时通过传递activation
参数实现 ,常用的有tanh
relu
softmax
等,一般深层模型使用多用relu ,对于多分类的情况,最后一层是softmax,二分类问题最后一层用sigmoid 。类似的隐藏层有Dropout层、池化层。
编译
通过 compile
方法指定优化器、损失函数、评估标准
|
|
例如我们使用 rmsprop
来作为优化器,binary_crossentropy
来作为损失函数值,使用accuracy
作为评估标准。
|
|
- 常用的损失函数:
- categorical_crossentropy多分类对数损失
- binary_crossentropy对数损失
- mean_squared_error平均方差损失
- mean_absolute_error平均绝对值损失
- 常用优化器:如SGD随机梯度下降, RMSProp, Adagrad, Adam, Adadelta等
训练
使用 fit
函数 进行训练,其中x与y必须是Numpy数组。
|
|
模型评估
使用evaluate
进行评估。
|
|
在测试模式,返回误差值和评估标准值。
预测
|
|
为输入样本生成输出预测。
网络的保存
一般通过model.save(filepath)
将Keras模型和权重保存在一个HDF5文件中。需要事先安装h5py包(pip install h5py
)。
一般通过keras.models.load_model(filepath)
读取模型。
|
|
model.save(filepath)
将会保存模型的所有信息,包括:
- 模型的结构,以便重构该模型
- 模型的权重
- 训练配置(损失函数,优化器等)
- 优化器的状态,以便于从上次训练中断的地方开始
你也可以通过model.save_weights
来保存权重信息。
|
|
也可以只保存/加载模型的网络结构
|
|
保存下来的JSON/YAML是可阅读的文本,可以被编辑,通过以下方式加载:
|
|
样例
基于多层感知器 (MLP) 的 softmax 多分类:
样例来自官方文档
|
|
分析代码,生成数据x_train具有20维特征,目标y_train分为10类,网络结构有5层,其中2层具有64个全连接单元,2个dropout层,以及一个10个单元的输出层。
模型采用随机梯度下降法,损失函数为多分类对数损失,评价指标为正确率。
基于 1D 卷积的序列分类:
|
|
Conv1D代表1D 卷积层 (例如时序卷积)。 对于图像的卷积通常使用Conv2D。
Conv1D的使用如下:
|
|
代码样例中使用model.add(Conv1D(128, 3, activation='relu'))
建立了一个输出维度为128,卷积窗口为3的卷积层。