微信公众号:龙跃十二

我是小玉,一个平平无奇的小天才!

上篇文章我们说了关于猫狗大战这个项目的一些准备工作,接下来,我们看看具体的代码详解。

猫狗大战——基于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_listlabel_listhstack((a,b))的功能是将a和b以水平的方式连接,比如原来cats和dogs是长度为12500的向量,执行了hstack(cats, dogs)后,image_list的长度为25000,同理label_list的长度也为25000。接着将一一对应的image_listlabel_list再合并一次。temp的大小是2×25000,经过转置(变成25000×2),然后使用np.random.shuffle()方法进行乱序。
  最后从temp中分别取出乱序后的image_listlabel_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_batchlabel_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)相关推荐

  1. 猫狗大战——基于TensorFlow的猫狗识别(1)

    微信公众号:龙跃十二 我是小玉,一个平平无奇的小天才! 简介: 关于猫狗识别是机器学习和深度学习的一个经典实例,下来小玉把自己做的基于CNN卷积神经网络利用Tensorflow框架进行猫狗的识别的程序 ...

  2. 基于tensorflow的猫狗分类

    基于tensorflow的猫狗分类 数据的准备 引入库 数据集来源 准备数据 显示一张图片的内容 搭建网络模型 构建网络 模型的编译 数据预处理 模型的拟合与评估 模型的拟合 预测一张图片 损失和精度 ...

  3. 【实战】kaggle猫狗大战-卷积神经网络实现猫狗识别

    卷积神经网络:猫狗识别 目录 第一步:导入数据集 第二步:数据预处理 第三步:迁移学习 第四步:模型保存 第五步:模型融合 第一步:导入数据集 kaggle猫狗大战数据集地址:kaggle # 将ka ...

  4. 深度学习-使用tensorflow实现猫狗识别

    最近一直在撸猫,为了猫主子的事情忧三愁四,皱纹多了不少,头发也掉了好几根,神态也多了几分忧郁,唯一不变的还是那份闲鱼的懒散和浪荡的心. 要说到深度学习图像分类的经典案例之一,那就是猫狗大战了.猫和狗在 ...

  5. 基于VGG的猫狗识别

    由于猫和狗的数据在这里,所以就做了一下分类的神经网络 1.首先进行图像处理: import csv import glob import os import randomos.environ['TF_ ...

  6. tensorflow实现猫狗识别

    import os import numpy as np import time import tensorflow as tf from PIL import Image import matplo ...

  7. 毕设:基于CNN卷积神经网络的猫狗识别、狗品种识别(Tensorflow、Keras、Kaggle竞赛)

    基于卷积神经网络的图像识别算法及其应用研究 毕业快一年了,拿出来分享给大家,我和网上唯一的区别就是,我能够同时实现两个方案(猫狗识别和狗品种识别),我当时也是网上各种查,花了2,3个月的时间,一个萝卜 ...

  8. Tensorflow实现kaggle猫狗识别(循序渐进进行网络设计)

    这篇是tensorflow版本,pytorch版本会在下一篇博客给出 友情提示:尽量上GPU,博主CPU上跑一个VGG16花了1.5h... Tensorflow实现kaggle猫狗识别 数据集获取 ...

  9. 基于卷积神经网络(CNN)的猫狗识别

    目录 引言 1.什么是卷积神经网络? 1.1什么是神经网络? 1.2什么是卷积? 2.准备工作 2.1一些知识: 2.2keras 2.3Conv2D 2.4 MaxPooling2D 3.基于卷积神 ...

最新文章

  1. 企业架构 - 如何实施TOGAF
  2. Python函数的非固定参数
  3. bgi::detail::intersection_content用法的测试程序
  4. 求数组里面的最大值和最小值
  5. CF993E Nikita and Order Statistics
  6. 乐学python_铁乐学python_day01-作业
  7. python部署工具fabric
  8. shell进行mysql统计
  9. Android 多层视差头部背景的实现
  10. matlab中 dataset用法,dataset中shuffle()、repeat()、batch()用法
  11. 大数据项目实训总结_最详细大数据项目落地路线图实践总结
  12. SaaSBase:最适合小团队轻量级项目管理的软件——Tower
  13. java可达性_java 垃圾回收总结(可达性分析 引用分类
  14. css3实现图片旋转木马效果
  15. 各种转码(bytes、string、base64、numpy array、io、BufferedReader )
  16. 类型多样的数码配件免抠元素素材,速来收藏
  17. 微信公众号(一) --- 开启微信公众号服务
  18. Gradle源码全解析,已拿offer
  19. 微信小程序开发笔记 进阶篇⑤——getPhoneNumber 获取用户手机号码(基础库 2.21.2 之前)
  20. 谷歌研究利用AI合成图片,使静态图片动起来

热门文章

  1. 聊天机器人chatbot搭建及思考(TensorFlow)(附代码)
  2. KDJ金叉死叉分析以及KDJ金叉的买点形态
  3. 龙讯4号 龙芯图谋你的客厅
  4. 2022 综合英语慕课(大学英语二)最新满分章节测试答案(题库中自找具体题目)
  5. android 绘画笔迹回放_一种基于可缩放矢量图形的安卓平台笔迹回放方法及装置与流程...
  6. win10系统无法访问指定设备或路径怎么解决?
  7. 2020-06-29
  8. 时尚主题快闪视频相册视频案例制作教程(可转载)
  9. 哪种变压器好-如何选择好的变压器-有哪几种型号和规格呢?
  10. 篱笆回路Fence Loops