11.11学习笔记之keras的sequential模型

来源:互联网 发布:字体识别软件 编辑:程序博客网 时间:2024/06/09 21:37
Keras是一种高度模块化,使用简单上手快,合适深度学习初学者使用的深度学习框架。Keras由纯Python编写而成并以Tensorflow、Theano以及CNTK为后端。Keras为支持快速实验而生,能够把你的idea迅速转换为结果。


sequential模型,就是多个网络层的线性堆叠
建立模型有两种方式:一是向layer添加list的方式,二是通过.add()方式一层层添加(一个add为一层),具体可见如下代码:


#引入Sequential,Dense,Activation
from keras.models import Sequential
from keras.layers import Dense, Activation
#向layer添加list方式
model = Sequential([Dense(input_dim=784,output dim=500),Activation('relu'),Dense(10),Activation('softmax'),])


#通过.add()方式
model = Sequential()
model.add(Dense(input_dim=784,output dim=500))
model.add(Activation('relu'))
model.add(Dense(output dim=500))
model.add(Activation('softmax'))
Dense表示使用 fully connected layers(全连接层)
Activation表示激活函数
当再增加一个layer时候,不需要再input dim ,因为这一层的input就是上一层的output
在训练模型之前,我们需要通过compile来对学习过程进行配置。compile接收三个参数:
# 多分类问题
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])


# 二分类问题
model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['accuracy'])


#均方误差回归问题
model.compile(optimizer='rmsprop',
loss='mse')


优化器optimizer:已预定义的优化器名,如rmsprop、adagrad,或一个Optimizer类的对象
损失函数loss:最小化的目标函数,它可为预定义的损失函数,如categorical_crossentropy、mse,也可以为一个损失函数。
指标列表metrics:对分类问题,我们一般将该列表设置为metrics=['accuracy']。指标可以是一个预定义指标的名字,也可以是一个用户定制的函数。指标函数应该返回单个张量,或一个完成metric_name - > metric_value映射的字典。
下一步就是要训练模型了,训练模型一般使用fit函数
model.fit(x_train, labels, batch_size=32, nb_epoch=10,)


x_train为training data, labels为标签,batch_size为mini-batch的大小,即一个mini-batch里有32个sample,nb_epoch为迭代次数,1个epoch等于使用训练集中的全部样本训练一次。


假如一个完整的训练集合有5000个样本,mini-batch为100,epoch为20,表示每看完100个样本更新一次参数,更新完整个训练集合要看50次不同的mini-batch,即50个iteration后才为1个epoch。(1个iteratio等于使用batchsize个样本训练一次)整个模型要训练20次epoch,1000次iteration,更新1000次参数。






如果使用batch-size=1,即SGD随机梯度下降,每次修正方向都以各自样本的梯度进行修正,方向不是指向圆心,弯弯曲曲地前进,难以收敛。
而且训练速度慢,需要时间长。


mini-batch的速度比较快(gpu的平行运算),而且表现比较平稳。但不宜设的太大,容易陷入local minimu。


如果数据集比较小我们就采用全数据集。全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。
但对于大数据集,不适合使用full batch learning,因为硬件和内存限制,而且容易卡在local minimu,会得到很差的效果。


how to ude the neural network (testing):
case 1:
score = model.evaluate(x_test, y_test)
print('Total loss on Testing Set:',score[0])
print('Accuracy of Testing Set:',score[1])


case 2:
result = model.predict(x_test)