TensorFlow笔记-制作自己的训练集,利用卷积神经网络模型进行训练、测试

本文详细介绍了如何使用TensorFlow创建自定义训练数据集,包括通过TFRecord文件存储数据和直接从本地读取图片。还涵盖了如何定义卷积神经网络(LeNet-5)模型,并进行训练,最后进行模型测试,展示了模型在MNIST数据集上的应用效果。
摘要由CSDN通过智能技术生成

TensorFlow笔记-制作自己的训练集,利用卷积神经网络模型进行训练、测试(完整流程)
https://blog.csdn.net/jyy555555/article/details/80283219
在学习TensorFlow过程中,发现训练数据集(mnist)大都是直接从网上下载,直接加载到模型上。而如果我们大多时候需要用自己的图片进行训练、测试,为了解决这个问题,在网上看了很多教程,大概明白了制作自己训练数据集的过程。为此,以MNIST数字识别为例,总结一下训练神经网络模型的大致流程。主要包括以下几个部分:

一. 制作自己的数据集
通常情况下,我们需要利用自己的图片进行训练,一种方式是把训练数据存储到TFRecord文件,然后从TFRecord文件中读取样例进行解析,然后组合训练数据(batch);另一种是网上的例子,可以从本地磁盘文件中读取图片,直接组合成batch样本数据。下面结合程序介绍一下这两种方式。

1. 通过TFRecord文件制作自己的数据集
TensorFlow提供了一种统一的格式来存储数据,这个格式就是TFRecord。TFRecord可以统一不同的原始数据格式,并更加有效地管理不同的属性。以下程序是把MNIST数据集中所有的训练数据存储到一个TFRecord文件中。

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
import numpy as np
from PIL import Image
import os

#输出TFRecord文件的地址
filename="f:\\TFRecord\\output.tfrecords"
#创建一个writer来写TFRecord文件
writer=tf.python_io.TFRecordWriter(filename)
#---将MNIST数据集中所有的训练数据存储到一个TFRecord文件中--#
 
#生成字符型的属性

def _bytes_feature(value):
	return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value]))

#生成整数型的属性
    def _int64_feature(value):
    	return tf.train.Feature(int64_list=tf.train.Int64List(value=[value]))
	
mnist=input_data.read_data_sets("/tmp/data/",dtype=tf.uint8,one_hot=True)
#MNIST数据集中的训练样本
images=mnist.train.images
#训练数据所对应的标签,可以作为一个属性保存在TFRecord中
labels=mnist.train.labels
#训练图像的分辨率,作为Example中的一个属性
pixels=images.shape[1]
#训练样本个数
num_examples=mnist.train.num_examples
 
for index in range(num_examples):
	#将图像矩阵转化成一个字符串
	image_raw=images[index].tostring()
	#将一个样例转化成Example Protocol Buffer,并将所有的信息写入这个数据结构
	example=tf.train.Example(features=tf.train.Features(feature={
	           'pixels': _int64_feature(pixels),
			   'label': _int64_feature(np.argmax(labels[index])),
			   'image_raw': _bytes_feature(image_raw)}))
	
	#将一个Example写入TFRecord文件中
	writer.write(example.SerializeToString())
writer.close()

我们也可以把本地磁盘文件中的图片存储到TFRecord文件中,下面程序就是把本地猫狗大战训练集中的训练数据存储到一个TFRecord文件中。猫狗大战数据集在这 链接:http://pan.baidu.com/s/1dFd8kmt 密码:psor

#---从自己电脑磁盘文件中读取图片,存储到一个TFRecord文件中,这里把猫狗大战的训练样本存储到一个TFRecord文件中---#
 
#猫狗大战训练样本在本地磁盘中的地址
file_dir="f:\\cat_dog_image\\train\\"
 
#生成字符型的属性
def _bytes_feature(value):
	return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value]))

#生成整数型的属性
def _int64_feature(value):
	return tf.train.Feature(int64_list=tf.train.Int64List(value=[value]))
	
for file in os.listdir(file_dir):
	img_path=file_dir+file  #每个图片的地址
	img=Image.open(img_path)
	name = file.split(sep='.')
	if name[0]=='cat':
		label=0
	else:
		label=1
#将图像矩阵转化成一个字符串
	image_raw=img.tobytes()
	#获取图像尺寸
	(img_W,img_H)=img.size
	#图像通道数
	channels=3
	#将一个样例转化成Example Protocol Buffer,并将所有的信息写入这个数据结构
	example=tf.train.Example(features=tf.train.Features(feature={
	           'img_W': _int64_feature(img_W),
			   'img_H': _int64_feature(img_H),
			   'channels': _int64_feature(channels),
			   'label': _int64_feature(label),
			   'image_raw': _bytes_feature(image_raw)}))
	
	#将一个Example写入TFRecord文件中
	writer.write(example.SerializeToString())
writer.close()

接下来就是从TFRecord文件中读取单个样例并解析,然后将多个输入样例组织成一个batch可以提高模型训练的效率。TensorFlow提供了tf.train.batch > 和 > tf.train.shuffle_batch函数来将单个样例组织成batch的形式输出。这两个函数都会生成一个队列,队列的入队操作是生成单个样例的方法,而每个出队得到的是一个batch的样例。它们唯一区别就是是否将数据顺序打乱。以下是从TFRecord文件中读取并解析数据,然后组成batch的程序:

import tensorflow as tf
 
def get_batch(file_dir):
	#读取TFRecord文件,创建文件列表,并通过文件列表创建输入文件队列。在调用输入数据处理流程前,需要统一所有原始数据的格式并将它们存储到TFRecord文件中。
	files=tf.train.match_filenames_o
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值