目录

一、tensorflow库安装

(1)TensorFlow的历史版本与对应Python版本

(2)Python版本查询

(3)找到上面的版本框进行对应的TensorFlow下载

(4)安装成功

(5)TensorFlow成功验证

二、项目简介

(1)项目说明

(2)项目目的

三、实现过程

(1)库导入

(2)匹配图形

(3)定义图像以及测试集与验证集路径确认

(4)模型训练参数设置

(5)维度定义与图像生成器

(6)卷积神经网络各层次设置

(7)函数回调结果注入训练

(8)训练结果可视化


一、tensorflow库安装

(1)TensorFlow的历史版本与对应Python版本

TensorFlow的历史版本与Python对应版本
TensorFlow版本 Python 发布时间
tensorflow-2.4.0 3.6-3.8 2020年12月
tensorflow-2.3.0 3.5-3.8 2020年7月
tensorflow-2.2.0 3.5-3.8 2020年5月
tensorflow-2.1.0 3.5-3.7 2020年1月
tensorflow-2.0.0 3.5-3.7 2019年10月
tensorflow-1.15.0 3.5-3.7 2019年10月
tensorflow-1.14.0 3.5-3.7 2019年6月
tensorflow-1.13.0 3.5-3.7 2019年2月
tensorflow-1.12.0 3.5-3.6 2018年11月
tensorflow-1.11.0 3.5-3.6 2018年9月
tensorflow-1.10.0 3.5-3.6 2018年8月
tensorflow-1.9.0 3.5-3.6 2018年7月
tensorflow-1.8.0 3.5-3.6 2018年4月
tensorflow-1.7.0 3.5-3.6 2018年3月
tensorflow-1.6.0 3.5-3.6 2018年3月
tensorflow-1.5.0 3.5-3.6 2018年1月
tensorflow-1.4.0 3.5-3.6 2017年11月
tensorflow-1.3.0 3.5-3.6 2017年8月
tensorflow-1.2.0 3.5-3.6 2017年6月
tensorflow-1.1.0 3.5 2017年4月
tensorflow-1.0.0 3.5 2017年2月

(2)Python版本查询

在配置了python环境变量的情况下可以使用以下方法:

win+R或者在搜索框搜索cmd打开Windows的终端,在终端输入python --version

未配置python环境的情况下,使用anaconda prompt终端查询版本号以及后面的操作。

(3)找到上面的版本框进行对应的TensorFlow下载

当时安装时并没有想到版本问题会影响TensorFlow后续的使用,就随便选了一个版本,当然你想选择一样的版本也行,后续做法跟我的做法会是一样的。

这里我们从清华园下载TensorFlow的镜像文件,后面是版本号

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tensorflow==1.14

注意:

①这里的命令运行时在Windows的终端下直接运行,前提是有Python环境

②若下载遇到非环境的报错,请复制Downloading后的网址,直接去网址上下载安装文件,然后切换到,下载路径,用pip insatll 下载的文件后缀为.whl文件

(4)安装成功

安装时出现如下情况就是安装成功

(5)TensorFlow成功验证

导入TensorFlow库做一个简单的计算

import tensorflow as tf
sess = tf.Session()
a = tf.constant(10)
b = tf.constant(12)
sess.run(a+b)

得到如下结果就证明安装成功

注:

在验证阶段可能会出现如下错误

第一个是jupyter的报错,第二个是anaconda的报错信息

这是因为有得机器protobuf版本等级与TensorFlow不相符,只需要根据后面的protobuf>=的版本号进行重装即可

命令如下:

pip install protobuf==3.19.0

二、项目简介

(1)项目说明

图像识别技术是人工智能计算机视觉的重要基础,使用机器学习/深度学习算法可以高效准确的识别出图片的主要特征,从而对不同图片内容的图片进行分类识别。

在图像识别研究领域有一个经典的数据集:Cat_vs_Dogs(猫狗识别数据集),很多计算机视觉的算法研究使用这个数据集来验证其效果。附件中采集了1500张猫的照片和1500张狗的照片,分别放入下面的目录结构中:

cats_vs_dogs:

train:

cats: [cat.0.jpg, cat.1.jpg, cat.2.jpg ....]

dogs: [dog.0.jpg, dog.1.jpg, dog.2.jpg ...]

validation:

cats: [cat.2000.jpg, cat.2001.jpg, cat.2002.jpg ....]

dogs: [dog.2000.jpg, dog.2001.jpg, dog.2002.jpg ...]

注:其中train作为训练集,有猫狗各1000张照片;validation作为验证集,有猫狗各500张照片。图片示例如下:

(2)项目目的

项目目的主要是实现对于猫狗图形识别的模型建立,再通过验证集验证图形识别模型的准确性。本篇文章主要讲述项目模型建立过程,至于模型设计、参数调优以及模型结果分析会在后续的文章中给出。

三、实现过程

(1)库导入

from tensorflow.keras.preprocessing.image import ImageDataGenerator, load_img, img_to_array, array_to_img
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D
from tensorflow.keras.layers import Activation, Dropout, Flatten, Dense
from tensorflow.keras import backend as K
from tensorflow.keras.callbacks import TensorBoard
from tensorflow.keras.applications import VGG16,InceptionV3,ResNet50,MobileNet
import numpy as np
import matplotlib.pyplot as plt
import glob, os, random

os模块作用

可以处理文件和目录这些我们日常手动需要做的操作。如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的。

glob模块作用

主要用来查找符合特定规则的目录和文件,并将搜索的到的结果返回到一个列表中。

(2)匹配图形

path = 'data'
os.path.join(path, '*/*/*.*')
# 使用 glob 模块批量匹配图像, * 代表匹配所有东西
img_list = glob.glob(os.path.join(path, '*/*/*.*'))
print('>>>图像数量:', len(img_list))
print(img_list[:5])for i, img_path in enumerate(img_list[:6]):img_plot = load_img(img_path)  # 加载图像arr = img_to_array(img_plot)  # 将图像转换成数组print(arr.shape)  # 图像形状plt.subplot(2, 3, i + 1)plt.imshow(img_plot)

os.path.join(path,name):连接目录与文件名或目录。

glob.glob():返回符合匹配条件的所有文件的路径。

注:此处需要,ipynb文件和data文件同在一个目录下,如下图所示

(3)定义图像以及测试集与验证集路径确认

# 统一定义图像像素的宽度和高度
img_width, img_height = 100, 100
# 定义训练集、验证集的图形路径(文件夹路径即可)
train_data_dir = 'data/train/'
validation_data_dir = 'data/validation/'

注:此处可以调试的有统一定义图像像素的宽度和高度,再不看后续分析文章的情况下可以自行进行数据的调试,此处不做过多解释。

(4)模型训练参数设置

# 模型训练的参数设置
nb_train_samples = 30
nb_validation_samples = 10
epochs = 20  # 迭代次数
batch_size = 32  # 每个批量观测数

注:模型训练参数的设置影响模型训练的结果,其中迭代次数与每个批量观测数影响着模型的结果,前两个参数是后面models.fit_generator()的参数,它一般是一个生成器函数,主要作用是利用生成器,分批次向模型送入数据的方式,可以有效节省单次内存的消耗。

(5)维度定义与图像生成器

# 图像输入维度设置
if K.image_data_format() == 'channels_first':input_shape = (3, img_width, img_height)
else:input_shape = (img_width, img_height, 3)# 定义图像生成器
train_datagen = ImageDataGenerator(rescale=1. / 255,  # 重缩放因子shear_range=0.2,  # 剪切强度(以弧度逆时针方向剪切角度)zoom_range=0.2,  # 随机缩放范围horizontal_flip=True,  # 随机水平翻转rotation_range=360  # 360度范围内随机旋转)# 使用图像生成器,从train_data_dir目录中读取图片,生成训练集(X_train图片数据, y_train图片所在的目录名称)
train_generator = train_datagen.flow_from_directory(train_data_dir,  # 训练数据的文件夹路径target_size=(img_width, img_height),  # 统一像素大小batch_size=batch_size,  # 每一批次的观测数class_mode='categorical'  # 指定分类模式,指定二分类)test_datagen = ImageDataGenerator(rescale=1. / 255,shear_range=0.2,  # 剪切强度(以弧度逆时针方向剪切角度)zoom_range=0.2,  # 随机缩放范围horizontal_flip=True)  # 随机水平翻转validation_generator = test_datagen.flow_from_directory(validation_data_dir,  # 验证集文件夹路径target_size=(img_width, img_height),batch_size=batch_size,class_mode='categorical'  # 二分类)

注:图像维度设置中k.image_data_format(),返回图像维度顺序(“channels_first”或“channels_last”),彩色图像的性质一般包括:width、height、channels。

(6)卷积神经网络各层次设置

model = Sequential()# -----------------------------------------------------
# 输入层:第一层
# 添加第一个卷积层/最大池化层(必选)
model.add(Conv2D(filters=32,  # 32 个过滤器kernel_size=(3, 3),  # 卷积核大小 3 x 3input_shape=input_shape,  # 图像输入维度activation='relu'))  # 'relu' 激活函数
model.add(MaxPooling2D(pool_size=(2, 2)))  # 池化核大小 2 x 2# ----------------------------------------------------
# 隐藏层:介于第一层和最后一层之间
# 添加第二个卷积层/最大池化层(可选)
model.add(Conv2D(filters=32, kernel_size=(3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))# 添加第三个卷积层/最大池化层(可选)
model.add(Conv2D(filters=64, kernel_size=(3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))# 添加第三个卷积层/最大池化层(可选)
model.add(Conv2D(filters=64, kernel_size=(3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))# 由于卷积层是 2D 空间,训练时需要将数据展平为 1D 空间
model.add(Flatten())  # 添加展平层(必选)
model.add(Dense(units=64, activation='relu'))  # 添加全连接层(必选) 64 个神经元
model.add(Dropout(0.5))  # 添加丢弃层,防止过拟合# ---------------------------------------------------
# 输出层:最后一层,神经元控制输出的维度,并指定分类激活函数
model.add(Dense(units=2, activation='sigmoid'))  # 指定分类激活函数model.summary()model.compile(loss='binary_crossentropy',  # 指定损失函数类型optimizer='rmsprop',  # 优化器metrics=['accuracy'])  # 评价指标

完成后运行会出现如下的过程图:

(7)函数回调结果注入训练

# tensorboard回调函数
logs = os.path.join("logs")
if not os.path.exists(logs):os.mkdir(logs)
train_callbacks = [TensorBoard(log_dir=r'./logs',histogram_freq=1,)
]tensorboard_dir = os.path.join(r'.\logs\plugins\profile')
history = model.fit_generator(train_generator,steps_per_epoch=nb_train_samples,epochs=epochs,validation_data=validation_generator,validation_steps=nb_validation_samples,callbacks=train_callbacks)

models.fit_generator()的参数,它一般是一个生成器函数,主要作用是利用生成器,分批次向模型送入数据的方式,可以有效节省单次内存的消耗。

注:其中logs\plugins\profile这个文件内容需要自己手动建立,本实验代码没有写代码创建模块,当创建logs后需要自己在logs文件夹下创建plugins文件夹,在文件夹plugins下创建profile文件夹。否则会报以下错误:

运行后会出现如下过程图

(8)训练结果可视化

#现在将训练后的结果可视化。
acc = history.history['acc']
val_acc = history.history['val_acc']loss = history.history['loss']
val_loss = history.history['val_loss']epochs_range = range(epochs)plt.figure(figsize=(20, 10))
plt.subplot(1, 2, 1)
plt.plot(epochs_range, acc, label='Training Accuracy')
plt.plot(epochs_range, val_acc, label='Validation Accuracy')
plt.legend(loc='lower right')
plt.title('Training and Validation Accuracy')plt.subplot(1, 2, 2)
plt.plot(epochs_range, loss, label='Training Loss')
plt.plot(epochs_range, val_loss, label='Validation Loss')
plt.legend(loc='upper right')
plt.title('Training and Validation Loss')
plt.show()

可视化训练后的结果图:

猫狗图像识别(卷积神经网络算法,TensorFlow安装)相关推荐

  1. CV之CNN:基于tensorflow框架采用CNN(改进的AlexNet,训练/评估/推理)卷积神经网络算法实现猫狗图像分类识别

    CV之CNN:基于tensorflow框架采用CNN(改进的AlexNet,训练/评估/推理)卷积神经网络算法实现猫狗图像分类识别 目录 基于tensorflow框架采用CNN(改进的AlexNet, ...

  2. CV之IC之AlexNet:基于tensorflow框架采用CNN卷积神经网络算法(改进的AlexNet,训练/评估/推理)实现猫狗分类识别案例应用

    CV之IC之AlexNet:基于tensorflow框架采用CNN卷积神经网络算法(改进的AlexNet,训练/评估/推理)实现猫狗分类识别案例应用 目录 基于tensorflow框架采用CNN(改进 ...

  3. 基于Python的卷积神经网络的猫狗图像识别系统

    目录 基与卷积神经网络模型的猫狗图像识别 1 一. 摘要 2 二. 动机 2 三. 理论和算法理解 2 I.卷积神经网络 2 定义 3 结构 3 应用 5 II.算法实现 5 Part 1 - Dat ...

  4. 基于CNN卷积神经网络 猫狗图像识别

    目录 一:数据集准备 二:读取自己的数据集 三:搭建网络 训练模型 四:猫狗图像识别 一:数据集准备 从官网下载比较麻烦,可根据以下链接,从百度网盘获取数据集 https://pan.baidu.co ...

  5. 卷积神经网络图像识别_[源码和文档分享]基于CUDA的卷积神经网络算法实现

    摘 要 卷积神经网络是近年来人工智能领域取得重大突破的一种重要手段,给出了图像识别.语音识别和自然语言处理领域中关键问题的优化解决方案,尤其适合处理图像方面的任务,如人脸识别和手写体识别.手写数字识别 ...

  6. 卷积神经网络 图像识别,卷积神经网络处理图片

    卷积神经网络怎么生成图片? 需要使用类似GAN的生成模型去做.望采纳GAN的基本原理其实非常简单,这里以生成图片为例进行说明.假设我们有两个网络,G(Generator)和D(Discriminato ...

  7. python狗图像识别_使用pytorch完成kaggle猫狗图像识别方式

    kaggle是一个为开发商和数据科学家提供举办机器学习竞赛.托管数据库.编写和分享代码的平台,在这上面有非常多的好项目.好资源可供机器学习.深度学习爱好者学习之用. 碰巧最近入门了一门非常的深度学习框 ...

  8. 使用pytorch完成kaggle猫狗图像识别

    kaggle是一个为开发商和数据科学家提供举办机器学习竞赛.托管数据库.编写和分享代码的平台,在这上面有非常多的好项目.好资源可供机器学习.深度学习爱好者学习之用.碰巧最近入门了一门非常的深度学习框架 ...

  9. 卷积神经网络的训练算法,卷积神经网络算法实现

    卷积神经网络算法是什么? 一维构筑.二维构筑.全卷积构筑. 卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feed ...

  10. 卷积神经网络 图像识别,卷积神经网络图像处理

    街道垃圾识别系统的原理是什么? 不久前上海关于垃圾分类的出台政策大家应该还记得,做好垃圾分类成为了许多人的难题.其实,随着人工智能技术的突飞猛进,自动分类垃圾桶已经出现了. 目前有许多关于人工智能自动 ...

最新文章

  1. linux 报错 kernel: nf_conntrack: falling back to vmalloc 解决方法
  2. 【CF913F】Strongly Connected Tournament 概率神题
  3. 三个步骤分析网站优化程度
  4. 毕业论文 | 基于单片机的烟雾报警器设计(完整源代码、流程图、电路图)
  5. php两个数组找公共部分,PHP开发中如何查找两个数组的交集
  6. android 线程太多,应用程序可能在其主线程上做了太多的工作。
  7. RabbitMQ非root用户安装(Linux环境)
  8. DevExpress中获取GridControl排序之后的List
  9. eclipse java 注释_Eclipse Java注释模板设置详解
  10. VS解决方案的目录结构设置和管理
  11. 群联PS3111坏硬盘修复记录
  12. ffmpeg 将视频转换为图片
  13. Mysql的explain,你真的会用吗?
  14. java无法双击打开.jar文件/jar包以压缩文件显示
  15. C/C++编程学习 - 第3周 ⑥ 温度表达转化
  16. Linux Socket编程实战第1季第1部分-熊健-专题视频课程
  17. rk3328 Android8.1 usb otg host和device切换
  18. java while求百钱买百鸡问题_java - 百钱百鸡小算法
  19. k8s与日志--journalbeat源码解读 1
  20. 2018.8.21 广州科目三展茂东满分飘技巧

热门文章

  1. 八中计算机是学啥的,邹毅:我与CCF的不解之缘
  2. 《第一桶金怎么赚——淘宝开店创业致富一册通》一一1.1 创业者需具备的素质...
  3. ubuntu下python安装wx包出错解决办法
  4. 老五苏-34:慧眼独具 比起“大哥”苏-27,苏-34的个子要高大一些。
  5. 大数据正当时,理解这几个术语很重要
  6. 降噪蓝牙耳机排行榜10强,通话质量好的降噪蓝牙耳机推荐
  7. 笔记本电脑不显示WIFI列表无法连接到网络的解决办法
  8. 锐龙R5 4500 怎么样 相当于什么水平
  9. 盗版影视网站买什么服务器,文化部严打影视盗版:网吧主清空影视服务器
  10. x50pro怎么升级鸿蒙系统,被央视点赞的vivo X50 Pro拍照如何?实测告诉你