本文转自微信公众号 createamind
keras中文-快速开始Sequential模型
快速开始Sequential模型
Sequential
是多个网络层的线性堆叠
可以通过向Sequential
模型传递一个layer的list来构造该模型:

也可以通过.add()
方法一个个的将layer加入模型中:

指定输入数据的shape
模型需要知道输入数据的shape,因此,Sequential
的第一层需要接受一个关于输入数据shape的参数,后面的各个层则可以自动的推导出中间数据的shape,因此不需要为每个层都指定这个参数。有几种方法来为第一层指定输入数据的shape
-
传递一个
input_shape
的关键字参数给第一层,input_shape
是一个tuple类型的数据,其中也可以填入None
,如果填入None
则表示此位置可能是任何正整数。数据的batch大小不应包含在其中。 -
传递一个
batch_input_shape
的关键字参数给第一层,该参数包含数据的batch大小。该参数在指定固定大小batch时比较有用,例如在stateful RNNs中。事实上,Keras在内部会通过添加一个None将input_shape转化为batch_input_shape -
有些2D层,如
Dense
,支持通过指定其输入维度input_dim
来隐含的指定输入数据shape。一些3D的时域层支持通过参数input_dim
和input_length
来指定输入shape。
下面的三个指定输入数据shape的方法是严格等价的:

下面三种方法也是严格等价的:

Merge层
多个Sequential
可经由一个Merge层合并到一个输出。Merge层的输出是一个可以被添加到新Sequential
的层对象。下面这个例子将两个Sequential合并到一起:

Merge层支持一些预定义的合并模式,包括:
-
sum
(defualt):逐元素相加 -
concat
:张量串联,可以通过提供concat_axis
的关键字参数指定按照哪个轴进行串联 -
mul
:逐元素相乘 -
ave
:张量平均 -
dot
:张量相乘,可以通过dot_axis
关键字参数来指定要消去的轴 -
cos
:计算2D张量(即矩阵)中各个向量的余弦距离
这个两个分支的模型可以通过下面的代码训练:
final_model.compile(optimizer='rmsprop', loss='categorical_crossentropy')
final_model.fit([input_data_1, input_data_2], targets) # we pass one data array per model input
也可以为Merge层提供关键字参数mode
,以实现任意的变换,例如:
merged = Merge([left_branch, right_branch], mode=lambda x, y: x - y)
现在你已经学会定义几乎任何Keras的模型了,对于不能通过Sequential和Merge组合生成的复杂模型,可以参考泛型模型API
编译
在训练模型之前,我们需要通过compile
来对学习过程进行配置。compile
接收三个参数:
-
优化器optimizer:该参数可指定为已预定义的优化器名,如
rmsprop
、adagrad
,或一个Optimizer
类的对象,详情见optimizers -
损失函数loss:该参数为模型试图最小化的目标函数,它可为预定义的损失函数名,如
categorical_crossentropy
、mse
,也可以为一个损失函数。详情见objectives -
指标列表metrics:对分类问题,我们一般将该列表设置为
metrics=['accuracy']
。指标可以是一个预定义指标的名字(目前仅支持accuracy
),也可以是一个一般的函数。
![]()
训练
Keras以Numpy数组作为输入数据和标签的数据类型。训练模型一般使用fit
函数,该函数的详情见这里。下面是一些例子。


例子
这里是一些帮助你开始的例子
在Keras代码包的examples文件夹中,你将找到使用真实数据的示例模型:
-
CIFAR10 小图片分类:使用CNN和实时数据提升
-
IMDB 电影评论观点分类:使用LSTM处理成序列的词语
-
Reuters(路透社)新闻主题分类:使用多层感知器(MLP)
-
MNIST手写数字识别:使用多层感知器和CNN
-
字符级文本生成:使用LSTM ...
基于多层感知器的softmax多分类:

相似MLP的另一种实现:

用于二分类的多层感知器:
类似VGG的卷积神经网络:

使用LSTM的序列分类

使用带有门限的递归单元进行图像描述:
(单词级别嵌入,描述语句最多16个单词)
注意,要使该网络良好工作需要更大规模的卷积神经网络并以预训练权重初始化,此处仅为结构示例。

用于序列分类的栈式LSTM
在该模型中,我们将三个LSTM堆叠在一起,是该模型能够学习更高层次的时域特征表示。
开始的两层LSTM返回其全部输出序列,而第三层LSTM只返回其输出序列的最后一步结果,从而其时域维度降低(即将输入序列转换为单个向量)

采用状态LSTM的相同模型
状态(stateful)LSTM的特点是,在处理过一个batch的训练数据后,其内部状态(记忆)会被作为下一个batch的训练数据的初始状态。状态LSTM使得我们可以在合理的计算复杂度内处理较长序列
请FAQ中关于状态LSTM的部分获取更多信息
将两个LSTM合并作为编码端来处理两路序列的分类
在本模型中,两路输入序列通过两个LSTM被编码为特征向量
两路特征向量被串连在一起,然后通过一个全连接网络得到结果,示意图如下:
本文摘自keras-cn 文档 http://keras-cn.readthedocs.io/
一起学习讨论:qq群号 325921031;微信群请后台留言加群或下方二维码;
线下活动报名请后台留言所在地区;
其他入门干货访问公众号createamind即可。

微信扫一扫
关注该公众号