keras中文文档 keras( 四 )


其中callbacks模块包含了TensorBoard,ModelCheckpoint,LearningRateScheduler等功能,分别可以用来可视化模型,设置模型检查点,以及设置学习率策略 。
5.1 模型训练
Keras模型训练过程非常简单,只需一行代码,设置几个参数即可,具体代码如下:
首先指定数据生成器,train_generator, 前面介绍过;steps_per_epoch是每次epoch循环的次数,通过训练样本数除以batch_size得到;epochs是整个数据集重复多少次训练 。
Keras是高度封装的,在模型训练过程中,看不到网络的预测结果和网络的反向传播过程,只需定义好损失函数,事实上,网络定义中的模型输出会包含网络的输入和输出 。
5.2 训练过程可视化
keras可以采用tensorboard实现训练过程的可视化 。执行完下面的命令就可以在浏览器访问查看效果 。
tensorboard --logdir 日志文件路径(默认路径=‘./logs’’)
上面是分别是训练和测试过程的loss和accuracy 。
5.3 模型测试
model = simpleconv3()
model.load_weights(model_path, by_name=True)
image_path = '../../../../datas/head/train/0/1left.jpg'
img = Image.open(image_path)
img = img_to_array(img)
img = cv2.resize(img, image_size)
img = np.expand_dims(img, axis=0)
img = preprocess_input(img)
result = model.predict(img, batch_size=1)
print(result)
以上代码简单介绍一下:模型测试流程非常清晰,首先加载模型,加载参数将数据输入网络模型预测 。
模型训练完成后,仅需用model.save_weights('models/model.h5')一句代码就可以完成模型的保存 。同样,模型的导入采用model.load_weights(model_path, by_name=True),需要注意的是要设置by_name=True,这样就能保证和模型名称一样的参数都能加载到模型,当然模型定义要和参数是匹配的,假如要进行fine-tune我们只需保证需要重新训练或者新加的网络层的名称和预加载模型参数名称不一样就可以 。
以上内容涵盖了采用keras进行分类任务的全部流程,从数据导入、模型搭建、模型训练、测试,模型保存和导入几个方面分别进行了介绍 。当然这只是一些基本的应用,还有一些高级、个性化功能需要我们进一步学习,有机会,下一次介绍一下自定义网络层、设置check_point、特征可视化等特性 。
keras中双向LSTM流程的验证??在keras中,双向循环神经网络,无论是普通的RNN还是LSTM还是GRU,都没有直接定义的层函数 。需要另外先导入一个双向结构Bidirectional,并且不能直接从keras.layers导入,直接导入会报错(说起来都是辛酸泪),正确的导入方法如下:
其中参数layer就是RNN的类型,可以使简单的SimpleRNN , LSTM , 或者是GRU等等 。merge_mode = ‘ concat’表示最后前向的输出和后向输出的连接方式,concat表示直接连接,类似于列表直接加上去的那种 。
??和普通LSTM的输入类似,input还是为【batch_size,time_step,num】其中num表示单个时间点上向量的长度,此处搭建的双向LSTM模型的隐藏层的向量维度为5,输入的向量维度为4,每一个时间点都返回一个维度为【batch_size,5】的结果,最后的输出的连接方式为直接像列表那样堆叠 。其中400个参数怎么来的:
??前向循环过程中,输入层和循环层之间之间的权重其维度为,因为这里集成了单个LSTM的3个门控结构和一个输入单元状态的权重,在前向计算的时候,每个时间点的权重是复用的,即不同时间点输入和循环层的权重都是一样的(但前向和后向计算时权重不能复用),具体解释详见: keras中LSTM流程的验证,前向计算过程中,循环成之间的权重,其权重维度为,因为隐藏层的向量维度为5,所以,权重为5*20,其也是将3个门控结构和单元状态都集成在了一个权重参数中,最后加上偏置,也是集成了3个门控结构和输入单元状态的参数 。
??反向循环过程中,输入层和反向循环层之间的权重,其维度和前向循环的维度一样,都为,反向循环层之间的权重和前向循环层维度一样【这里说的只是维度,但数据不同,反向循环不能复用前向循环的参数】,偏置长度也为。所以整个参数的个数为:。
前向计算结果一致
结果一致,整个双向LSTM验证通过,存储和计算的流程验证和我想象中的一样 。
Keras中基础知识在Keras中设定了两类深度学习模型: 一类是序列模型(Sequential类) ; 一类是通用模型(Model类)。其差异在于不同的拓扑结构 。
序列模型属于通用模型的一个子类,因为很常见,所以这里单独列出来进行介绍 。这种模型

秒懂生活扩展阅读