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

六步法回顾

在这里插入图片描述

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

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

在这里插入图片描述
def generateds(图片路径,标签文件)
把图片路径作为第一参数,标签文件作为第二参数,输入generateds()函数,generateds()函数返回输入特征和标签,一般拿到本地数据集先要观察数据集的结构,我们发现txt文件中有两列,第一列是图片名,第二列是对应的标签,value[0]这一列用于索引到每张图片,value[1]这一列就是每张图片对应的标签。我们只需要把图片灰度值数据拼接到图片列表,把标签数据拼接到标签列表,顺序一致就可以了。
在这里插入图片描述
【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行】打印状态提示
完整代码如下:
在这里插入图片描述
【6行-14行】添加了训练集图片路径,训练集标签文件,训练集输入特征存储文件,训练集标签存储文件,测试集图片路径,测试集标签文件,测试集输入特征存储文件,测试集标签存储文件
【16行以后】添加了generateds()函数

在这里插入图片描述
【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完全一样

数据增强,扩充数据集

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

断点续训

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

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

在这里插入图片描述

在这里插入图片描述

acc&loss可视化

在这里插入图片描述

画图的代码如下:
在这里插入图片描述
subplot将图像分为1行2列,上图中间第二段代码画出第一列,第三段代码画出第二列。
title设置图标题,legend画出图例。

在这里插入图片描述
【以上代码背下来】
在这里插入图片描述

给图识物

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值