4 Tensorflow图像识别模型——数据预处理

上一篇:3 tensorflow构建模型详解-CSDN博客

本篇开始介绍识别猫狗图片的模型,内容较多,会分为多个章节介绍。模型构建还是和之前一样的流程:

  • 数据集准备
  • 数据预处理
  • 创建模型
  • 设置损失函数和优化器
  • 训练模型

本篇先介绍数据集准备&预处理。


1、了解监督学习

开始前,需要先了解什么是监督学习。机器学习基于学习方式的分类,可分为:

  • 监督学习
  • 无监督学习
  • 强化学习

百度百科对监督学习的定义是使用标记数据集来训练算法,以便对数据进行分类或准确预测结果。

我们要构建的图片识别模型就属于监督学习的方式,模型的输入是“特征-标签”对,特征就是输入的图片,标签是标记该图片的预期结果(比如该图片是猫还是狗)。

2、训练数据集介绍

网上有很多公开的数据集可以用来学习,初学者不用花很多的时间在数据准备上面。下面是猫狗的数据集下载地址:

https://storage.googleapis.com/mledu-datasets/cats_and_dogs_filtered.zip

下载后,可以将解压的文件夹放在自己项目的根目录,方便后面读取。

(1)数据集的目录结构

数据集下面有两个子目录,一个训练集(train),一个是验证集(validation),训练集和验证集下面都有猫狗的文件夹,里面是收集好的猫、狗照片。

划分train和validation两个子集,主要是用于训练和评估模型,validation的数据可以看看模型在没有训练过的图片效果如何。

(2)查看数据集数量

本人把数据集放在了当前pycharm项目的根目录,读者可以根据自己实际放的位置替换路径。

import os# 获取训练集和验证集目录
train_dir = os.path.join('cats_and_dogs_filtered/train')
validation_dir = os.path.join('cats_and_dogs_filtered/validation')# 获取训练集猫、狗的目录
train_cats_dir = os.path.join(train_dir, 'cats')
train_dogs_dir = os.path.join(train_dir, 'dogs')# 获取验证集猫、狗的目录
validation_cats_dir = os.path.join(validation_dir, 'cats')
validation_dogs_dir = os.path.join(validation_dir, 'dogs')# 查看训练集猫狗的图片数量
print('训练集猫的图片数量:')
print(len(os.listdir(train_cats_dir)))
print('训练集狗的图片数量:')
print(len(os.listdir(train_dogs_dir)))# 查看验证集猫狗的图片数量
print('验证集猫的图片数量:')
print(len(os.listdir(validation_cats_dir)))
print('验证集狗的图片数量:')
print(len(os.listdir(validation_dogs_dir)))

运行结果:

训练集猫的图片数量:
1000
训练集狗的图片数量:
1000
验证集猫的图片数量:
500
验证集狗的图片数量:
500

从运行结果可以了解到训练集一共2000张图片,验证集有1000张。

(3)了解RGB图像

了解RGB图像有助于我们理解模型的参数为什么要这么设置。

根据百度百科对RGB的定义,RGB是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是运用最广的颜色系统之一。

可以用下面的草图辅助理解,比如一张3 X 3 大小的图片,可以解析成由红绿蓝三色通道叠加成的三维数组(图片信息数值仅用于辅助理解,不是该照片的真实值)

大多数彩色图像可以分为RGB三色通道,我们可以选取训练集的其中一张图片看看:

import os
import cv2# 获取训练集和验证集目录
train_dir = os.path.join('cats_and_dogs_filtered/train')
validation_dir = os.path.join('cats_and_dogs_filtered/validation')# 获取训练集猫、狗的目录
train_cats_dir = os.path.join(train_dir, 'cats')
train_dogs_dir = os.path.join(train_dir, 'dogs')# 获取验证集猫、狗的目录
validation_cats_dir = os.path.join(validation_dir, 'cats')
validation_dogs_dir = os.path.join(validation_dir, 'dogs')# 获取训练集-猫文件的所有文件名称
train_cats_name = os.listdir(train_cats_dir)# 获取其中一张图片的路径
picture_1 = os.path.join(train_cats_dir, train_cats_name[0])# 打印该图片名称
print('图片名称:'+train_cats_name[0])# 读取图片的信息值
picture_1 = cv2.imread(picture_1)# 打印该图片的形状
print(picture_1.shape)

运行结果:

图片名称:cat.952.jpg
(375, 499, 3)
 

可以看到图片cat.952.jpg的尺寸大小是375 X 499,深度是3,即该图片解析为RGB三色通道叠加的三维数组。

再选取另外一张,只需更改下面两句代码:

# 获取其中一张图片的路径
picture_1 = os.path.join(train_cats_dir, train_cats_name[0])# 打印该图片名称
print('图片名称:'+train_cats_name[0])

运行结果:

图片名称:cat.946.jpg
(374, 500, 3)

可以看到两张图片的尺寸不一样,神经网络输入需要相同的尺寸大小,所以这些数据集不能直接拿来训练,还需要做数据预处理。

(4)数据预处理

主要有两部分内容:

统一图片大小、按比例缩放

可以先看单张图片的效果,图片尺寸调整为150*150,按1/255比例缩放:

import os
import cv2# 获取训练集和验证集目录
train_dir = os.path.join('cats_and_dogs_filtered/train')
validation_dir = os.path.join('cats_and_dogs_filtered/validation')# 获取训练集猫、狗的目录
train_cats_dir = os.path.join(train_dir, 'cats')
train_dogs_dir = os.path.join(train_dir, 'dogs')# 获取验证集猫、狗的目录
validation_cats_dir = os.path.join(validation_dir, 'cats')
validation_dogs_dir = os.path.join(validation_dir, 'dogs')# 获取训练集-猫文件的所有文件名称
train_cats_name = os.listdir(train_cats_dir)# 获取其中一张图片的路径
picture_1 = os.path.join(train_cats_dir, train_cats_name[0])# 打印该图片名称
print('图片名称:'+train_cats_name[0])# 读取图片的信息值
picture_1 = cv2.imread(picture_1)# 打印该图片的信息值
print(picture_1)picture_2 = cv2.resize(picture_1, (150, 150))
print('调整后的图片形状为:')
print(picture_2.shape)# 除以255缩放图片
picture_2 = picture_1 / 255
print('缩放后的图片信息值矩阵:')
print(picture_2)

运行结果:

图片名称:cat.946.jpg
[[[158 157 143]
  [128 126 115]
  [103  97  92]
  ...
  [ 71  70  66]
  [ 71  70  66]
  [ 71  70  66]]

 [[158 157 143]
  [128 126 115]
  [103  97  92]
  ...
  [ 74  73  69]
  [ 74  73  69]
  [ 74  73  69]]

 [[157 156 142]
  [128 126 115]
  [103  97  92]
  ...
  [ 77  76  72]
  [ 77  76  72]
  [ 77  76  72]]

 ...

 [[128 123 125]
  [126 121 123]
  [124 119 121]
  ...
  [ 40  61  83]
  [ 38  59  81]
  [ 37  58  80]]

 [[135 132 134]
  [132 129 131]
  [130 127 129]
  ...
  [ 39  60  82]
  [ 38  59  81]
  [ 37  58  80]]

 [[140 137 139]
  [138 135 137]
  [135 132 134]
  ...
  [ 39  60  82]
  [ 38  59  81]
  [ 37  58  80]]]
调整后的图片形状为:
(150, 150, 3)
缩放后的图片信息值矩阵:
[[[0.61960784 0.61568627 0.56078431]
  [0.50196078 0.49411765 0.45098039]
  [0.40392157 0.38039216 0.36078431]
  ...
  [0.27843137 0.2745098  0.25882353]
  [0.27843137 0.2745098  0.25882353]
  [0.27843137 0.2745098  0.25882353]]

 [[0.61960784 0.61568627 0.56078431]
  [0.50196078 0.49411765 0.45098039]
  [0.40392157 0.38039216 0.36078431]
  ...
  [0.29019608 0.28627451 0.27058824]
  [0.29019608 0.28627451 0.27058824]
  [0.29019608 0.28627451 0.27058824]]

 [[0.61568627 0.61176471 0.55686275]
  [0.50196078 0.49411765 0.45098039]
  [0.40392157 0.38039216 0.36078431]
  ...
  [0.30196078 0.29803922 0.28235294]
  [0.30196078 0.29803922 0.28235294]
  [0.30196078 0.29803922 0.28235294]]

 ...

 [[0.50196078 0.48235294 0.49019608]
  [0.49411765 0.4745098  0.48235294]
  [0.48627451 0.46666667 0.4745098 ]
  ...
  [0.15686275 0.23921569 0.3254902 ]
  [0.14901961 0.23137255 0.31764706]
  [0.14509804 0.22745098 0.31372549]]

 [[0.52941176 0.51764706 0.5254902 ]
  [0.51764706 0.50588235 0.51372549]
  [0.50980392 0.49803922 0.50588235]
  ...
  [0.15294118 0.23529412 0.32156863]
  [0.14901961 0.23137255 0.31764706]
  [0.14509804 0.22745098 0.31372549]]

 [[0.54901961 0.5372549  0.54509804]
  [0.54117647 0.52941176 0.5372549 ]
  [0.52941176 0.51764706 0.5254902 ]
  ...
  [0.15294118 0.23529412 0.32156863]
  [0.14901961 0.23137255 0.31764706]
  [0.14509804 0.22745098 0.31372549]]]

下面是数据集预处理的代码:

# 模型参数设置
BATCH_SIZE = 100# 图片尺寸统一为150*150
IMG_SHAPE = 150# 处理图像尺寸
train_image_generator = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1. / 255)
validation_image_generator = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1. / 255)train_data_gen = train_image_generator.flow_from_directory(directory=train_dir,batch_size=BATCH_SIZE,target_size=(IMG_SHAPE, IMG_SHAPE),class_mode='binary')
val_data_gen = validation_image_generator.flow_from_directory(directory=validation_dir,batch_size=BATCH_SIZE,target_size=(IMG_SHAPE, IMG_SHAPE),class_mode='binary')

  • target_size=(IMG_SHAPE, IMG_SHAPE), IMG_SHAPE设为150,即读取数据时统一调整尺寸为150*150
  • tf.keras.preprocessing.image.ImageDataGenerator(rescale=1. / 255) 是按1/255比例缩放。因为图片信息的数值矩阵类型为unit8型,在0~255范围内,缩放后将像素值标准化为0-1之间

数据准备好就是成功的一半,后续介绍构建图像识别模型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/182840.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每日一题 318. 最大单词长度乘积(中等)

暴力求解没超时&#xff0c;那就这样吧 class Solution:def maxProduct(self, words: List[str]) -> int:ans 0for i in range(len(words)):for j in range(i 1, len(words)):if len(words[i]) * len(words[j]) < ans:continuet 0for k in range(26):ch chr(k ord(…

使用蒙特卡罗模拟的投资组合优化

在金融市场中&#xff0c;优化投资组合对于实现风险与回报之间的预期平衡至关重要。蒙特卡罗模拟提供了一个强大的工具来评估不同的资产配置策略及其在不确定市场条件下的潜在结果。 我们的目标是开发一个蒙特卡罗模拟模型的投资组合优化。参与者将被要求构建和分析由各种资产…

Camtasia2024破解版电脑屏幕录制剪辑软件

屏幕录制剪辑 TechSmith Camtasia for Mac v2021是 TechSmith 公司所开发出一款专业屏幕录像和编辑&#xff0c; Camtasia Studio2024版是由TechSmith公司官方进行汉化推出的最新版本,除2023版以下版本均没有官方汉化。 同时TechSmith公司打击第三方贩卖Camtasia Studio汉化的…

数据库的备份和恢复

备份&#xff1a;完全备份&#xff0c;增量备份 完全备份&#xff1a;将整个数据库完整的进行备份 增量备份&#xff1a;在完全备份基础的之上&#xff0c;对后续新增的内容进行备份 备份的需求 1生产环境中&#xff0c;数据的安全性至关重要&#xff0c;任何数据都可能产生非…

Disk Drill v5.3.1313(数据恢复备份)

Disk Drill是一款功能强大的数据恢复软件&#xff0c;它可以帮助用户恢复已删除、丢失、格式化或损坏的文件&#xff0c;并支持多种存储设备&#xff0c;包括计算机硬盘驱动器、外部硬盘、USB闪存驱动器、内存卡和其他存储介质。它和很多的文件系统都兼容&#xff0c;比如&…

NOIP2023模拟12联测33 B. 游戏

NOIP2023模拟12联测33 B. 游戏 文章目录 NOIP2023模拟12联测33 B. 游戏题目大意思路code 题目大意 期望题 思路 二分答案 m i d mid mid &#xff0c;我们只关注学生是否能够使得被抓的人数 ≤ m i d \le mid ≤mid 那我们就只关心 a > m i d a > mid a>mid 的房…

No Presto metadata available for docker-ce-stable

Linux CentOS中执行Docker一键安装脚本报错&#xff1a; No Presto metadata available for docker-ce-stable 执行以下命令可以解决&#xff0c;整个过程比较耗费时间&#xff0c;请耐心等待。 yum install docker-ce -y

蓝桥杯每日一题2023.11.6

取位数 - 蓝桥云课 (lanqiao.cn) 题目描述 题目分析 由题意我们知道len中为现阶段长度&#xff0c;如果其与k相等也就是找到了正确的位数&#xff0c;否则就调用递归来进行搜索&#xff0c;每次搜索一位数。 #include <stdio.h> // 求x用10进制表示时的数位长度 int …

LED点阵显示原理(取字模软件+Keil+Proteus)

前言 写这个的时候我还是有点生气的&#xff0c;因为发现完全按照书上面的步骤来&#xff0c;结果发现不理想&#xff0c;后面还是自己调试才解决了。-_-说多了都是泪&#xff0c;直接进入正文。 软件的操作还是参考我之前的博客。 LED数码管的静态显示与动态显示&#xff0…

基于wireguard与NAT实现windows10代理服务器

参考文章&#xff1a;https://blog.csdn.net/babytiger/article/details/127111474 一、 下载windows 安装包 下载wireguard安装包 二、 配置服务端&#xff1a; 新建空隧道并保存为server1&#xff0c;配置如下&#xff1a; 点击保存&#xff0c;并连接&#xff0c;多了个se…

Docker数据管理、网络与Cgroup资源限制

目录 一、Docker的数据管理 1、数据卷 2、数据卷容器 3、端口映射 4、容器互联 二、Docker网络 2.1Docker网络实现原理 2.2Docker 的网络模式 3.3网络模式详解&#xff1a; host模式 container模式 none模式 bridge模式 自定义网络 创建自定义网络 三、Cgroup资源…

Harbor企业级Registry基础镜像仓库的详细安装使用教程(保姆级)

Harbor Docker 官方提供的私有仓库 registry&#xff0c;用起来虽然简单 &#xff0c;但在管理的功能上存在不足。 Harbor是vmware一个用于存储和分发Docker镜像的企业级Registry服务器&#xff0c;harbor使用的是官方的docker registry(v2命名是distribution)服务去完成。 ha…

shell综合项目

主菜单 http和Nginx分别的install的菜单&#xff0c;安装过程通过重定向到/dev/null达到看不见的效果 输入非整数或者大于4的数字都会提示错误 代码如下: [rootserver ~]# vim install_menu.sh #!/bin/bash function menu() { cat << EOF …

蓝桥杯官网填空题(方格计数)

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 如下图所示&#xff0c;在二维平面上有无数个 11 的小方格。 我们以某个小方格的一个顶点为圆心画一个半径为 50000 的圆。 你能计算出这个圆里有多少个完整的小方…

CSAPP BOMB LAB part2

bomb lab part2 phase3 将rsp0xc存入rcx, 将rsp0x8存入rdx, 地址0x4025cf存储格式&#xff0c;然后调用好sscanf函数&#xff0c; 当rsp0x8的值大于0x7, 会跳转到400fad, 会boom!!! 所以rsp0x8的值不大于0x7。 0x8rsp的值不进入ja的代码段&#xff0c;会执行400f71对应的指令…

docker---dockerfile相关知识

第 3 章 Docker 高级实践 在这一部分我们主要来介绍一些Docker的高级内容&#xff1a; Dockerfile 和 Docker compose 3.1 Dockerfile Dockerfile我们从下面的几个方面来介绍&#xff1a; Dockerfile简介 Dockerfile快速入门 Dockerfile详解 Dockerfile简单 实践 3.1.1 Docke…

阿里云安全恶意程序检测(速通一)

阿里云安全恶意程序检测 赛题理解赛题介绍赛题说明数据说明评测指标 赛题分析数据特征解题思路 数据探索数据特征类型数据分布箱型图 变量取值分布缺失值异常值分析训练集的tid特征标签分布测试集数据探索同上 数据集联合分析file_id分析API分析 特征工程与基线模型构造特征与特…

【Kubernetes部署】通过Kubeadm部署Kubernetes高可用集群

Kubeadm 一、kubeadm部署思路二、基本架构2.1 资源分配2.2 系统初始化操作&#xff08;所有节点&#xff09;2.2.1关闭防火墙、selinux和swap分区2.2.2 修改主机名&#xff0c;添加域名映射2.2.3 内核相关2.2.4 加载ip_vs模块2.2.5 时间同步 三、部署docker3.1 通过yum安装dock…

程序员笔记本电脑选 windows 还是 MAC

计算机选择是每个进入 IT 行业同学的第一个重要选择&#xff0c;那么你是怎么选择的呢&#xff1f; 选择操作系统&#xff08;Windows还是macOS&#xff09;取决于程序员的需求、偏好和工作流程。每个操作系统都有其优点和缺点&#xff0c;下面将分别讨论它们&#xff0c;以帮助…

小红书运营篇1,新手如何快速分析拆解对标账号

hi&#xff0c;同学们&#xff0c;本期是第1期AI运营技巧篇 很多新手博主初期都非常迷茫&#xff0c;主要是因为他们没有找对标账号&#xff0c;也没有充分分析同行账号。 有些人可能会说&#xff0c;“我不想参考同行&#xff0c;我想要追求创新”。这种勇气是真的非常值得鼓…