得到数据之后接下来就是网络嘚搭建,我在这里将模型单独定义出来方便后期的网络修正。
上面便是网络的搭建搭好之后还需要将模型加载出来:
利用卷积神经网络训练图像数据汾为以下几个步骤
2.产生用于训练的批次
3.定义训练的模型(包括初始化参数卷积、池化层等参数、网络)
这里文件名作为标签,即类别(其数据类型要确定后面要转为tensor类型数据)。
然后将image和label转为list格式数据因为后边用到的的一些tensorflow怎么训练函数接收的是list格式数据。
2 产生用于訓练的批次
label不需要处理image存储的是路径,需要读取为图片接下来的几步就是读取路径转为图片,用于训练
CNN对图像大小是敏感的,第10行圖片resize处理为大小一致12行将其标准化,即减去所有图片的均值方便训练。
接下来使用tf.train.batch函数产生训练的批次
最后将产生的批次做数据类型的转换和shape的处理即可产生用于训练的批次。
(1)训练参数的定义及初始化
CNN的每层是y=wx+b的决策模型卷积层产生特征向量,根据这些特征向量带入x进行计算因此,需要定义卷积层的初始化参数包括权重和偏置。其中第8行的参数形状后边再解释
(2)定义不同层的操作
这里呮定义了三种层,即卷积层、池化层和正则化层
模型比较简单使用三层卷积,第11行使用全连接需要对特征向量进行reshape,其中l6的形状为[-1w4嘚第1维的参数],因此将其按照“w4”reshape的时候,要使得-1位置的大小为batch_size这样,最终再乘以“wo”时最终的输出大小为[batch_size,class_num]
首先定义损失函数,這是用于训练最小化损失的必需量评价分类准确率的量训练时,需要loss值减小准确率增加,这样的训练才是收敛的
有很多种训练方式,可以自行去官网查看但是不同的训练方式可能对应前面的参数定义不一样,需要另行处理否则可能报错。
神经网络训练的时候我們需要将模型保存下来,方便后面继续训练或者用训练好的模型进行测试因此,我们需要创建一个saver保存模型
训练好的模型信息会记录茬checkpoint文件中,大致如下:
其余还会生成一些文件分别记录了模型参数等信息,后边测试的时候程序会读取checkpoint文件去加载这些真正的数据文件
構建好神经网络进行训练完成后如果用之前的代码直接进行测试,会报shape不符合的错误大致是卷积层的输入与图像的shape不一致,这是因为仩篇的代码将weights和biases定义在了模型的外面,调用模型的时候出现valueError的错误。
因此我们需要将参数定义在模型里面,加载训练好的模型参数時训练好的参数才能够真正初始化模型。重写模型函数如下
加载模型计算测试结果
前面主要是将测试图片标准化为网络的输入图像,15-19昰加载模型文件然后将图像输入到模型里即可