最近在看keras文档,想写博客却真的无从下手(其实就是没咋学会),想想不写点笔记过段时间估计会忘得更多,所以还是记录一下吧,感觉学习keras最好的方式还是去读示例的代码,后期也有想些keras示例代码注释的想法,但是现在还是老老实实地先记录keras的基础知识吧。
《统计学习方法》中指出,机器学习的三个要素是模型,策略和优算法,这当然也适用于深度学习,而我个人觉得keras训练也是基于这三个要素的,先建立深度模型,然后选用策略(目标函数),采用优化器,编译和训练模型。
- Sequential模型,顾名思义,就是多个网络层的线性堆叠
建立模型有两种方式:一是向layer添加list的方式,二是通过.add()
方式一层层添加(一个add为一层),具体可见如下代码
#引入Sequential,Dense,Activation
from keras.models import Sequential
from keras.layers import Dense, Activation
#向layer添加list方式
model = Sequential([Dense(32, input_dim=784),Activation('relu'),Dense(10),Activation('softmax'),])
#通过.add()方式
model = Sequential()
model.add(Dense(32, input_dim=784))
model.add(Activation('relu'))
- 输入数据shape
Sequential只需在第一层需接受一个关于输入数据shape的参数,后面的各个层则可自动推导出中间数据的shape。
input_shape
是一个tuple
类型的数据,其中也可以填入None
,如果填入None
则表示此位置可能是任何正整数。数据的batch大小不应包含在其中。
传递一个batch_input_shape
的关键字参数给第一层,该参数包含数据的batch大小。该参数在指定固定大小batch时比较有用。事实上,Keras在内部会通过添加一个None
将input_shape
转化为batch_input_shape
有些2D层,如Dense,支持通过指定其输入维度input_dim
来隐含的指定输入数据shape
。一些3D的时域层支持通过参数input_dim
和input_length
来指定输入shape
。
model = Sequential()
model.add(Dense(32, input_shape=(784,)))
model = Sequential()
model.add(Dense(32, batch_input_shape=(None, 784)))
model = Sequential()
model.add(Dense(32, input_dim=784))
#以上三种输入是等价的
编译
在训练模型之前,我们需要通过
compile
来对学习过程进行配置。compile
接收三个参数:- 优化器optimizer:已预定义的优化器名,如rmsprop、ad