猫狗分类--Tensorflow实现
贴一张自己画的思维导图
数据集准备
kaggle猫狗大战数据集(训练),微软的不需要FQ
- 12500张cat
- 12500张dog
生成图片路径和标签的List
step1:获取D:/Study/Python/Projects/Cats_vs_Dogs/data/Cat下所有的猫图路径名,存放到cats中,同时贴上标签0,存放到label_cats中。狗图同理。
train_dir = 'D:/Study/Python/Projects/Cats_vs_Dogs/data'def get_files(file_dir): for file in os.listdir(file_dir+'/Cat'): cats.append(file_dir +'/Cat'+'/'+ file) label_cats.append(0) for file in os.listdir(file_dir+'/Dog'): dogs.append(file_dir +'/Dog'+'/'+file) label_dogs.append(1)
step2:对生成的图片路径和标签List做打乱处理
#把cat和dog合起来组成一个list(img和lab)image_list = np.hstack((cats, dogs))label_list = np.hstack((label_cats, label_dogs))#利用shuffle打乱顺序temp = np.array([image_list, label_list]) temp = temp.transpose() np.random.shuffle(temp) #从打乱的temp中再取出list(img和lab) image_list = list(temp[:, 0]) label_list = list(temp[:, 1]) label_list = [int(i) for i in label_list]
生成Batch
step1:将上面生成的List传入get_batch() ,转换类型,产生一个输入队列queue,因为img和lab是分开的,所以使用tf.train.slice_input_producer(),然后用tf.read_file()从队列中读取图像
- image_W, image_H, :设置好固定的图像高度和宽度
- 设置batch_size:每个batch要放多少张图片
- capacity:一个队列最大多少
def get_batch(image, label, image_W, image_H, batch_size, capacity):#转换类型 image = tf.cast(image, tf.string) label = tf.cast(label, tf.int32) # make an input queue input_queue = tf.train.slice_input_producer([image, label]) label = input_queue[1] image_contents = tf.read_file(input_queue[0]) #read img from a queue
step2:将图像解码,不同类型的图像不能混在一起,要么只用jpeg,要么只用png等。
image = tf.image.decode_jpeg(image_contents, channels=3)
step3:数据预处理,对图像进行旋转、缩放、裁剪、归一化等操作,让计算出的模型更健壮。
image = tf.image.resize_image_with_crop_or_pad(image, image_W, image_H)image = tf.image.per_image_standardization(image)
4:生成batch
- image_batch: 4D tensor [batch_size, width, height, 3],dtype=tf.float32
- label_batch: 1D tensor [batch_size], dtype=tf.int32
image_batch, label_batch = tf.train.batch([image, label],batch_size= batch_size,num_threads= 32, capacity = capacity)
#重新排列label,行数为[batch_size]
label_batch = tf.reshape(label_batch, [batch_size]) image_batch = tf.cast(image_batch, tf.float32)
测试
step1:变量初始化,每批2张图,尺寸208x208,设置好自己的图像路径
BATCH_SIZE = 2
CAPACITY = 256 IMG_W = 208 IMG_H = 208 train_dir = 'D:/Study/Python/Projects/Cats_vs_Dogs/data'
step2:调用前面的两个函数,生成batch
image_list, label_list = get_files(train_dir)
image_batch, label_batch = get_batch(image_list, label_list, IMG_W, IMG_H, BATCH_SIZE, CAPACITY)
step3:开启会话session,利用tf.train.Coordinator()和tf.train.start_queue_runners(coord=coord)来监控队列(这里有个问题:官网的start_queue_runners()是有两个参数的,sess和coord,但是在这里加上sess的话会报错)。
利用try——except——finally结构来执行队列操作(官网推荐的方法),避免程序卡死什么的。i<2执行两次队列操作,每一次取出2张图放进batch里面,然后imshow出来看看效果。
with tf.Session() as sess:i = 0coord = tf.train.Coordinator()threads = tf.train.start_queue_runners(coord=coord)try:while not coord.should_stop() and i<2: img, label = sess.run([image_batch, label_batch]) # just test one batch for j in np.arange(BATCH_SIZE): print('label: %d' %label[j]) plt.imshow(img[j,:,:,:]) plt.show() i+=1 except tf.errors.OutOfRangeError: print('done!') finally: coord.request_stop() coord.join(threads)
step4:查看结果,会出现4张图,resize的效果感觉不是很好,不知道是什么问题
2017.7.10 图片不正常是因为生成batch的时候将image转成了浮点型,吧image_batch = tf.cast(image_batch, tf.float32)
注释掉后就好了
转载于:https://www.cnblogs.com/jyxbk/p/7750451.html
猫狗分类--Tensorflow实现相关推荐
- TensorFlow 2.0 - tf.data.Dataset 数据预处理 猫狗分类
文章目录 1 tf.data.Dataset.from_tensor_slices() 数据集建立 2. Dataset.map(f) 数据集预处理 3. Dataset.prefetch() 并行处 ...
- tensorflow.js在nodejs训练猫狗分类模型在浏览器上使用
目录 本人系统环境 注意事项 前言 数据集准备 处理数据集 数据集初步处理 将每一张图片数据转换成张量数据(tensor) 将图片转换成张量数组的代码和运行效果 将图片的标注转换成张量数据(tenso ...
- 使用Tensorflow 2进行猫狗分类识别
使用Tensorflow 2进行猫狗分类识别 本文参照了大佬Andrew Ng的所讲解的Tensorflow 2视频所写,本文将其中只适用于Linux的功能以及只适用于Google Colab的功能改 ...
- 基于tensorflow的猫狗分类
基于tensorflow的猫狗分类 数据的准备 引入库 数据集来源 准备数据 显示一张图片的内容 搭建网络模型 构建网络 模型的编译 数据预处理 模型的拟合与评估 模型的拟合 预测一张图片 损失和精度 ...
- CV之IC之AlexNet:基于tensorflow框架采用CNN卷积神经网络算法(改进的AlexNet,训练/评估/推理)实现猫狗分类识别案例应用
CV之IC之AlexNet:基于tensorflow框架采用CNN卷积神经网络算法(改进的AlexNet,训练/评估/推理)实现猫狗分类识别案例应用 目录 基于tensorflow框架采用CNN(改进 ...
- Tensorflow 学习之猫狗分类案例
Tensorflow 学习之猫狗分类案例 本人一直在Cousera上学习Ng Andrew老师的Tensorflow课程,在本次猫狗分类案例当中,我对课程做了相应的记录,呈现在此,一方面加深学习的印象 ...
- DL之VGG16:基于VGG16迁移技术实现猫狗分类识别(图片数据量调整→保存h5模型)
DL之VGG16:基于VGG16迁移技术实现猫狗分类识别(图片数据量调整→保存h5模型) 目录 基于VGG16迁移技术实现猫狗分类识别(图片数据量调整→保存h5模型) 设计思路 输出结果 1488/1 ...
- AlexNet 实现猫狗分类(keras and pytorch)
AlexNet 实现猫狗分类 前言 在训练网络过程中遇到了很多问题,先在这里抱怨一下,没有硬件条件去使用庞大的ImageNet2012 数据集 .所以在选择合适的数据集上走了些弯路,最后选择有kagg ...
- 基于Pytorch的猫狗分类
无偿分享~ 猫狗二分类文件下载地址 在下一章说 猫狗分类这个真是困扰我好几天,找了好多资料都是以TensorFlow的猫狗分类,但我们要求的是以pytorch的猫狗分类.刚开始我找到了也 ...
最新文章
- 深入理解 Spring Cloud 核心组件与底层原理!
- 图论--DFS-SPFA求负环
- 【Android 进程保活】提升进程优先级 ( 1 像素 Activity 提高进程优先级 | taskAffinity 亲和性说明 | 运行效果 | 源码资源 )
- MFC对话框控件成员变量编程熟悉 - 开发一个简单天线长度计算器
- 产品问答 | PM最应该花时间做这件事……
- SpringBoot2.0 基础案例(06):引入JdbcTemplate,和多数据源配置
- 通过C++的try和catch来捕获SEH异常
- dubbo之服务降级
- 【风电功率预测】基于matlab遗传算法优化BP神经网络风电功率预测【含Matlab源码 760期】
- 带你轻轻松松了解route-map
- CSTSOFT ActiveX GDIPlus Pack 2021.03
- Python比较文件不同
- 水声网络架构及关键问题笔记
- 电脑主屏幕黑屏但有计算机硬盘显示,显示器黑屏但电脑一直在运行怎么办?显示器黑屏的详细解决方案...
- 【No server address listed in hbase:meta for region XX】
- SVG格式化<PATH>说明
- Android OpenGL ES 学习(十一) –渲染YUV视频以及视频抖音特效
- JMS基本概念和模型
- HDU 5514 Frogs 容斥
- 基于J2EE的科研项目管理系统设计与实现