北大慕课Tensorflow实践过程笔记4——网络八股扩展

网络八股扩展

  • 六步法回顾
  • 自制数据集,解决本领域应用
  • 数据增强,扩充数据集
  • 断点续训
  • 参数提取,把参数存入文本
  • acc&loss可视化
  • 给图识物

六步法回顾

北大慕课Tensorflow实践过程笔记4——网络八股扩展_第1张图片

北大慕课Tensorflow实践过程笔记4——网络八股扩展_第2张图片
自制数据集:当有了自己本领域的数据,又有了标签,如何给x_train,y_train,x_test,y_test,赋值呢?——自治数据集,解决本领域的实际应用。
数据增强:如果你的数据量过少,模型见识不足,泛化力会弱,针对这一问题,用数据增强的代码扩展数据提高泛化力。
断点续训:如果每次训练都从零开始很不划算,用断点续训的代码,实时保存最优模型。神经网络训练的目的就是获取各层网络最优的函数。只要拿到这些参数,是可以在任何平台实现前向推理,复现出模型,实现应用的。
参数提取:参数提取的代码帮我们把参数存入文本。
acc/loss可视化:acc和loss曲线可以见证模型的优化过程,用acc/loss曲线绘制代码帮我们查看训练效果。
当以上都完成,我们嗨编写了给图识物的应用程序,输入神经网络一组新的,从未见过的特征,神经网络会输出预测的结果,实现学以致用。
北大慕课Tensorflow实践过程笔记4——网络八股扩展_第3张图片

自制数据集,解决本领域应用

北大慕课Tensorflow实践过程笔记4——网络八股扩展_第4张图片
def generateds(图片路径,标签文件)
把图片路径作为第一参数,标签文件作为第二参数,输入generateds()函数,generateds()函数返回输入特征和标签,一般拿到本地数据集先要观察数据集的结构,我们发现txt文件中有两列,第一列是图片名,第二列是对应的标签,value[0]这一列用于索引到每张图片,value[1]这一列就是每张图片对应的标签。我们只需要把图片灰度值数据拼接到图片列表,把标签数据拼接到标签列表,顺序一致就可以了。
北大慕课Tensorflow实践过程笔记4——网络八股扩展_第5张图片
【12行】以只读形式打开txt文件
【13行】读取文件中的所有行
【14行】关闭txt文件
【15行】建立空列表,x,y_
【16行】逐行读出
【17行】以空格分开,图片名为value[0],标签为value[1],存入列表
【18行】图片路径+图片名 拼接出图片的索引路径
【19行】读入图片
【20行】图片变为8位宽度的灰度值,np.array格式
【21行】数据归一化
【22行】归一化后的数据贴到列表x
【23行】标签贴到列表y_
【24行】打印状态提示
完整代码如下:
北大慕课Tensorflow实践过程笔记4——网络八股扩展_第6张图片
【6行-14行】添加了训练集图片路径,训练集标签文件,训练集输入特征存储文件,训练集标签存储文件,测试集图片路径,测试集标签文件,测试集输入特征存储文件,测试集标签存储文件
【16行以后】添加了generateds()函数

北大慕课Tensorflow实践过程笔记4——网络八股扩展_第7张图片
【36-37行】判断训练集输入特征x_train,训练集标签y_train,测试集输入特征x_test,测试集标签y_test是不是已经存在了,如果存在,直接读取
【45-56行】如果不存在,调用generateds()函数制作数据集,给x_train,y_train,x_test,y_test赋值
【58-69行】sequential,compile,fit,summary和baseline完全一样

数据增强,扩充数据集

数据增强可以帮助扩展数据集。对图像的增强,就是对图像的简单形变,用来应对因拍照角度不同引起的图片变形。
北大慕课Tensorflow实践过程笔记4——网络八股扩展_第8张图片
只需要告知需要使用的数据增强方法就可以了
北大慕课Tensorflow实践过程笔记4——网络八股扩展_第9张图片
这里的fit需要输入一个四维数据,所以要对x_train 进行reshape,把60000张28行28列数据,变为60000张28行28列单通道数据(即那个数字 1),这个单通道是灰度值。
model.fit同步更新为 .flow形式,把训练集输入特征x_train,训练集标签y_train 按照batch打包送入model.fit,执行训练过程
北大慕课Tensorflow实践过程笔记4——网络八股扩展_第10张图片

断点续训

断点续训可以存取模型
北大慕课Tensorflow实践过程笔记4——网络八股扩展_第11张图片
可以直接使用tensorflow给出的load_weights()函数告知文件存在哪里,就可以直接读取已有模型参数了。
可以先定义出存放模型的路径和文件名,命名为ckpt文件,因为生成ckpt文件的时候会同步生成索引表,所以通过判断是不是已经有了索引表,就知道是不是已经保存过模型参数了。如果有了索引表,就可以调用load_weights()函数读取模型参数。
保存模型参数可以使用tensorflow给出的回调函数,直接保存训练出来的模型参数。在callbacks.ModelCheckpoint中告知文件存储路径,告知是否只保留模型参数,告知是否只保留最优结果。
执行训练过程到时候,加入callbacks选项,记录到history中。
可以给出文件保存路径fiepath,只保留模型参数,只保留最优模型,在fit()函数中加入回调选项,返回给history。
完整代码如下:北大慕课Tensorflow实践过程笔记4——网络八股扩展_第12张图片
【2行】为了判断保存的模型参数是否存在,引入了os模块,【23行】加入了回调函数,返回给cp_callback。
【26行】在fit中加入callbacks,赋值给history

参数提取,把参数存入文本

北大慕课Tensorflow实践过程笔记4——网络八股扩展_第13张图片

北大慕课Tensorflow实践过程笔记4——网络八股扩展_第14张图片

acc&loss可视化

北大慕课Tensorflow实践过程笔记4——网络八股扩展_第15张图片

画图的代码如下:
北大慕课Tensorflow实践过程笔记4——网络八股扩展_第16张图片
subplot将图像分为1行2列,上图中间第二段代码画出第一列,第三段代码画出第二列。
title设置图标题,legend画出图例。

北大慕课Tensorflow实践过程笔记4——网络八股扩展_第17张图片
【以上代码背下来】
北大慕课Tensorflow实践过程笔记4——网络八股扩展_第18张图片

给图识物

北大慕课Tensorflow实践过程笔记4——网络八股扩展_第19张图片
北大慕课Tensorflow实践过程笔记4——网络八股扩展_第20张图片
北大慕课Tensorflow实践过程笔记4——网络八股扩展_第21张图片
【16行】读取待识别的图片。因为训练时是28*28,读入的新图片是任意尺寸的,所以需要先resize成28行28列的标准尺寸。
【24行】把白底黑字的图转换成黑底白字的灰度图,所以让每个像素点等于255减去当前像素值,相当于颜色去反。这个操作使得输入的从未见过的图片满足了神经网络模型对输入风格的要求,这个过程叫做预处理,预处理方法很多,还可以让输入图片变成只有黑白两色的高对比度图片,代码如下:
北大慕课Tensorflow实践过程笔记4——网络八股扩展_第22张图片
使用嵌套for循环遍历输入图片的每一个像素点,把灰度值小于200的像素点变为255,纯白色,其余像素点变为0,纯黑色。这种预处理在保留图片有用信息的同时,滤去了背景噪声,图片更干净。当阈值选择合理时识别效果会更好。这两种预处理方法选择其一。
【29行】随后对图片数据除以255归一化。
由于神经网络训练时都是按照batch送入网络的 ,所以在进入predict函数之前要先把img_arr前面添加一个维度,从28行28列的二维数据变为1个28行28列的三维数据,送入predict预测,把最大的概率值输出,返回预测结果。

你可能感兴趣的:(北大慕课Tensorflow实践过程笔记4——网络八股扩展)