序贯模型是多个神经网络的线性叠加,也就是“一条路走到黑”。
可以通过向Sequential模型传递一个list来构造:
from keras.models import Sequential
from keras.layers import Dense,Activation
model = Sequential([Dense(32,units=784),Activation('relu'),Dense(10),Activation('softmax')])
# 模型是一个输入为784的模型,通过Dense将其压缩到32,然后调用relu激活函数对其处理,第二层是对第一层输出的32再次使用Dense将其压缩,压缩到10,而后,调用softmax激活函数对第二层网络的输出进行处理
也可以通过.add()方法来将一个网络层加入模型之中:
model.Sequential()
model.add(Dense(32,input_shape=(784,))
model.add(Activation('relu'))
注意:这里input_shape和units都表示输入的参数,神经网络需要指定一个输入参数,而后的神经网络的输入是上一层的输出,且可以自动推到出来,所以就不需要指定这个参数,具体如何计算出这个参数,需要深入理解深度学习网络的知识(这部分内容有待扩充)。
model=Sequential()
model.add(Dense(32,input_shape=(784)
input_shape()是一个tuple类型的数据,可以填入None,如果是None,表示此位置可能是任何一个正整数。数据中的batch大小不应该包含在其中。(这句话不懂)
有些2D层,如Dense,支持通过指定输入维度input_dim来隐含指定的输入数据shape,是一个int类型数据。有些3D层支持通过输入input_dim和input_length来指定输入的shape。
如果需要为输入指定一个固定大小的batch_size,可以传递batch_size参数到一个层中(这段话需要接触更多的深度学习的知识)
在训练模型前,需要调用compile()来对学习过程进行配置。
compile()接受三个参数:
优化器optimizer:该参数可以指定为已预定义的优化器名,如rmsprop,adagrad,或者一个Optimizer类的对象,详情看:optimier(http://keras-cn.readthedocs.io/en/latest/other/optimizers/)
损失函数loss,该参数为模型试图将损失达到最小的目标函数,可以定义为一个预定义的损失函数名,如categorical_crossentropy,mse,也可以定义为一个损失函数。详情参见loss(http://keras-cn.readthedocs.io/en/latest/other/objectives/)
评估指标函数metrics:对训练的结果进行评估的指标。可以是一个预定义的指标的名字,也可以是一个用户自定义的函数,指标函数应该返回一个张两或者一个字典,一个metrics_name->metrics_value的字典。指标函数不一定需要指定。
对编译好的模型进行训练:
keas以numpy数组作为输入数据和标签的数据类型。一般使用fit(),详细使用请参考这里(http://keras-cn.readthedocs.io/en/latest/models/sequential/)
文档中的例子:
CIFAR10 小图片分类:使用CNN和实时数据提升
IMDB 电影评论观点分类:使用LSTM处理成序列的词语
Reuters(路透社)新闻主题分类:使用多层感知器(MLP)
MNIST手写数字识别:使用多层感知器和CNN
字符级文本生成:使用LSTM …