猫狗大战——基于TensorFlow的猫狗识别(2)
微信公众号:龙跃十二
我是小玉,一个平平无奇的小天才!
上篇文章我们说了关于猫狗大战这个项目的一些准备工作,接下来,我们看看具体的代码详解。
猫狗大战——基于TensorFlow的猫狗识别(1)
文件名:input_data.py
一、模块的导入:
import tensorflow as tf
import numpy as np
import os
tensorflow和numpy小玉就不在这里赘述了,os模块包含操作系统相关的功能,可以处理文件和目录这些我们日常手动需要做的操作。因为我们需要获取test
目录下的文件,所以要导入os模块。
二、获取文件路径和标签
def get_files(file_dir):# file_dir: 文件夹路径# return: 乱序后的图片和标签cats = []label_cats = []dogs = []label_dogs = []# 载入数据路径并写入标签值for file in os.listdir(file_dir):name = file.split(sep='.')if name[0] == 'cat':cats.append(file_dir + file)label_cats.append(0)else:dogs.append(file_dir + file)label_dogs.append(1)print("There are %d cats\nThere are %d dogs" % (len(cats), len(dogs)))
注:函数get_files(file_dir)
的功能是获取给定路径file_dir
下的所有的训练数据(包括图片和标签),以list
的形式返回。
三、对生成的图片路径和标签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]
这里先用np.hstack()
方法将猫和狗图片和标签整合到一起,得到image_list
和label_list
,hstack((a,b))
的功能是将a和b以水平的方式连接,比如原来cats和dogs是长度为12500的向量,执行了hstack(cats, dogs)
后,image_list
的长度为25000,同理label_list
的长度也为25000。接着将一一对应的image_list
和label_list
再合并一次。temp的大小是2×25000,经过转置(变成25000×2),然后使用np.random.shuffle()
方法进行乱序。
最后从temp中分别取出乱序后的image_list
和label_list
列向量,作为函数的返回值。这里要注意,因为label_list
里面的数据类型是字符串类型,所以加上label_list = [int(i) for i in label_list]
这么一行将其转为int类型。
四、生成batch
函数get_batch()用于将图片分批次,因为一次性将所有25000张图片载入内存不现实也不必要,所以将图片分成不同批次进行训练。这里传入的image和label参数就是函数get_files()返回的image_list和label_list,是python中的list类型,所以需要将其转为TensorFlow可以识别的tensor格式。
变量的声明:
image, label: 要生成batch的图像和标签list
image_W, image_H: 图片的宽高
batch_size: 每个batch有多少张图片
capacity: 队列容量
return: 图像和标签的batch
# 生成相同大小的批次
def get_batch(image, label, image_W, image_H, batch_size, capacity):# 将python.list类型转换成tf能够识别的格式image = tf.cast(image, tf.string)label = tf.cast(label, tf.int32)# 生成队列input_queue = tf.train.slice_input_producer([image, label])image_contents = tf.read_file(input_queue[0])label = input_queue[1]image = tf.image.decode_jpeg(image_contents, channels=3)# 统一图片大小# 视频方法image = tf.image.resize_image_with_crop_or_pad(image, image_W, image_H)# 标准化数据image = tf.image.per_image_standardization(image) image_batch, label_batch = tf.train.batch([image, label],batch_size=batch_size,num_threads=64, # 线程capacity=capacity)label_batch = tf.reshape(label_batch, [batch_size])return image_batch, label_batch
关于queen的理解,我是这样想的,在每一次的训练中,我们都需要从队列中取一个batch送到网络模型进行训练,然后又有新的图片从训练集填充至队列,形成一个无限的循环状态。队列相当于起到了训练库到网络模型间数据交接的作用,训练数据通过队列送入网络。
最后将得到的image_batch
和label_batch
返回。image_batch
是一个4D的tensor,[batch, width, height, channels],label_batch
是一个1D的tensor,[batch]。
五、测试:
可以用下面的代码测试获取图片是否成功,因为之前将图片转为float32了,因此这里imshow()出来的图片色彩会有点奇怪,因为本来imshow()是显示uint8类型的数据(灰度值在uint8类型下是0~255,转为float32后会超出这个范围,所以色彩有点奇怪),不过这不影响后面模型的训练。
import matplotlib.pyplot as pltBATCH_SIZE = 2
CAPACITY = 256
IMG_W = 208
IMG_H = 208train_dir = "data\\train\\"
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)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 < 1:img, label = sess.run([image_batch, label_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)
测试这部分在我们第一步导入数据时可以做一个简单的测试,保证我们的图片标签和batch的设置正确
下一篇讲讲关于这个模型的建立。
我是小玉,一个平平无奇的小天才,觉着有帮助就给我点个赞呗!
猫狗大战——基于TensorFlow的猫狗识别(2)相关推荐
- 猫狗大战——基于TensorFlow的猫狗识别(1)
微信公众号:龙跃十二 我是小玉,一个平平无奇的小天才! 简介: 关于猫狗识别是机器学习和深度学习的一个经典实例,下来小玉把自己做的基于CNN卷积神经网络利用Tensorflow框架进行猫狗的识别的程序 ...
- 基于tensorflow的猫狗分类
基于tensorflow的猫狗分类 数据的准备 引入库 数据集来源 准备数据 显示一张图片的内容 搭建网络模型 构建网络 模型的编译 数据预处理 模型的拟合与评估 模型的拟合 预测一张图片 损失和精度 ...
- 【实战】kaggle猫狗大战-卷积神经网络实现猫狗识别
卷积神经网络:猫狗识别 目录 第一步:导入数据集 第二步:数据预处理 第三步:迁移学习 第四步:模型保存 第五步:模型融合 第一步:导入数据集 kaggle猫狗大战数据集地址:kaggle # 将ka ...
- 深度学习-使用tensorflow实现猫狗识别
最近一直在撸猫,为了猫主子的事情忧三愁四,皱纹多了不少,头发也掉了好几根,神态也多了几分忧郁,唯一不变的还是那份闲鱼的懒散和浪荡的心. 要说到深度学习图像分类的经典案例之一,那就是猫狗大战了.猫和狗在 ...
- 基于VGG的猫狗识别
由于猫和狗的数据在这里,所以就做了一下分类的神经网络 1.首先进行图像处理: import csv import glob import os import randomos.environ['TF_ ...
- tensorflow实现猫狗识别
import os import numpy as np import time import tensorflow as tf from PIL import Image import matplo ...
- 毕设:基于CNN卷积神经网络的猫狗识别、狗品种识别(Tensorflow、Keras、Kaggle竞赛)
基于卷积神经网络的图像识别算法及其应用研究 毕业快一年了,拿出来分享给大家,我和网上唯一的区别就是,我能够同时实现两个方案(猫狗识别和狗品种识别),我当时也是网上各种查,花了2,3个月的时间,一个萝卜 ...
- Tensorflow实现kaggle猫狗识别(循序渐进进行网络设计)
这篇是tensorflow版本,pytorch版本会在下一篇博客给出 友情提示:尽量上GPU,博主CPU上跑一个VGG16花了1.5h... Tensorflow实现kaggle猫狗识别 数据集获取 ...
- 基于卷积神经网络(CNN)的猫狗识别
目录 引言 1.什么是卷积神经网络? 1.1什么是神经网络? 1.2什么是卷积? 2.准备工作 2.1一些知识: 2.2keras 2.3Conv2D 2.4 MaxPooling2D 3.基于卷积神 ...
最新文章
- 企业架构 - 如何实施TOGAF
- Python函数的非固定参数
- bgi::detail::intersection_content用法的测试程序
- 求数组里面的最大值和最小值
- CF993E Nikita and Order Statistics
- 乐学python_铁乐学python_day01-作业
- python部署工具fabric
- shell进行mysql统计
- Android 多层视差头部背景的实现
- matlab中 dataset用法,dataset中shuffle()、repeat()、batch()用法
- 大数据项目实训总结_最详细大数据项目落地路线图实践总结
- SaaSBase:最适合小团队轻量级项目管理的软件——Tower
- java可达性_java 垃圾回收总结(可达性分析 引用分类
- css3实现图片旋转木马效果
- 各种转码(bytes、string、base64、numpy array、io、BufferedReader )
- 类型多样的数码配件免抠元素素材,速来收藏
- 微信公众号(一) --- 开启微信公众号服务
- Gradle源码全解析,已拿offer
- 微信小程序开发笔记 进阶篇⑤——getPhoneNumber 获取用户手机号码(基础库 2.21.2 之前)
- 谷歌研究利用AI合成图片,使静态图片动起来
热门文章
- 聊天机器人chatbot搭建及思考(TensorFlow)(附代码)
- KDJ金叉死叉分析以及KDJ金叉的买点形态
- 龙讯4号 龙芯图谋你的客厅
- 2022 综合英语慕课(大学英语二)最新满分章节测试答案(题库中自找具体题目)
- android 绘画笔迹回放_一种基于可缩放矢量图形的安卓平台笔迹回放方法及装置与流程...
- win10系统无法访问指定设备或路径怎么解决?
- 2020-06-29
- 时尚主题快闪视频相册视频案例制作教程(可转载)
- 哪种变压器好-如何选择好的变压器-有哪几种型号和规格呢?
- 篱笆回路Fence Loops