Keras搭建基本神经网络
该小节内容可以参照第一篇博客:
Tensorflow 的环境配置以及Hello World程序的运行
Keras本身是一套搭建与训练神经网络的高层API协议,自身可以提供tensorflow的接口。而在tensorflow环境中,tf.keras则是其中一个与其他子模块一样的普通模块。透过keras协议我们可以高效搭建,训练,存储,调用神经网络,还可以定义库中没有的网络层,网络结构和测量工具等。
搭建神经网络
Keras提供网络容器Sequential将多个网络层封装成一个大的网络模型,运算时直接调用完成从首层到末层到传播。可以在容器里面直接添加网络层,也可以透过add()方法继续追加新的网络层动态创建。网络层到类接口都包含在tf.keras.layers里面,库本身提供了大部分常用的网络层类接口,如全连接层,激活含水层,池化层,卷积层,循环神经网络层等等。
network = Sequential([]) # 先创建空的网络
network.add(layers.Dense(3)) # 添加全连接层
network.add(layers.ReLU()) # 添加激活函数层
network.build(input_shape=(None, 4)) # 创建网络参数
透过summary()函数可以打印出封装的网络的概览,包括层结构和参数的数量。对于具体的参数,可以通过如下方式手动打印网络中trainable_variables的具体数目。
for layer in network.trainable_variables:
print(layer.name, layer.shape)
模型装配训练和测试
成功创建网络后,需要前向传播进行迭代训练,然后通过选定的损失函数计算与标签的误差,再反向传播计算梯度以更新网络中的各个参数。这一部分的装配在Keras中也提供了模块化的封装,由compile()函数实现上面的运行逻辑进行训练和优化。透过该函数的参数选择确定使用网络的优化器,损失函数以及评价指标。
装配完成后透过fit()函数导入待训练的数据和验证集,该函数可以传入参数指定训练集,验证集,训练epoch次数以及验证频率。同时返回的信息可以保存到对象中,调用history来打印训练记录。
后续测试调用Model.predict(variable)即可使用训练好的模型,也可以透过Model.evaluate(db)跑完数据集上所有样本并打印性能指标。
# 加载一个 batch 的测试数据
x,y = next(iter(db_test)) print('predict x:', x.shape)
out = network.predict(x) # 模型预测
print(out)
network.evaluate(db_test) # 模型测试
模型的保存与加载
模型的保存与加载有三种常用方法,透过张量进行最轻量级的保存,将整个网络保存到单独的可读文件以及跨平台的SavedModel方式。
张量模式如下:
# 保存模型参数到文件上 network.save_weights('weights.ckpt') print('saved weights.')
del network # 删除网络对象
# 重新创建相同的网络结构
network = Sequential([layers.Dense(256, activation

本文介绍了在Tensorflow环境中使用Keras进行深度学习的基础操作,包括搭建基本神经网络、模型训练与测试、模型保存与加载、自定义层以及加载预训练模型。Keras通过Sequential容器简化了网络构建,fit()和evaluate()函数用于训练和评估,而compile()用于定义优化器、损失函数和评价指标。模型的保存与加载支持多种方式,包括张量、网络模型文件和SavedModel格式。此外,还展示了如何自定义网络层并利用预训练模型进行迁移学习。

1659

被折叠的 条评论
为什么被折叠?



