深度学习基础之《TensorFlow框架(12)—图片数据》

一、图像基本知识

1、如何转换图片文件
回忆:之前我们在特征抽取中讲过如何将文本处理成数据
思考:如何将图片文件转换成机器学习算法能够处理的数据?
我们经常接触到的图片有两种,一种是黑白图片(灰度图),另一种是彩色图片
组成图片的最基本单位是像素

2、特征抽取
文本特征抽取:转换成数值,二维数组shape(n_samples, m_features)
n_samples行,m_features列
字典特征抽取:转换成数值,二维数组shape(n_samples, m_features)
one-hot编码

图片怎么特征抽取?

3、图片三要素
组成一张图片特征值是所有的像素值,有三个维度:图片长度、图片宽度、图片通道数

图片的通道数是什么?
描述一个像素点,如果是灰度图,那么只需要一个数值来描述它,就是单通道
如果一个像素点,有RGB三种颜色来描述它,就是三通道

灰度图:单通道
彩色图:三通道,RGB

4、图片的特征抽取
图片:转换成数值,三维数组shape(图片长度、图片宽度、图片通道数)

灰度图[长,宽,1]
    每一个像素点是[0, 255]的数,越接近255越白

彩色图[长,宽,3]
    每一个像素点是三个通道(每个通道又是一个灰度图)
    一个彩色像素点是由三个通道像素点组合而成
    每一个像素点用3个[0, 255]的数来表示

5、如果一张彩色图片的长为200,宽为200,通道数为3,那么总的像素为:200 * 200 * 3

二、图片张量的形状

1、在tensorflow中如何用张量表示一张图片呢?
Tensor(指令名称, shape, dtype)

一张图片可以被表示成一个3D张量,即其形状为[height, width, channel],height就表示高,width表示宽,channel表示通道数。我们会经常遇到3D和4D的表示

2、单个图片
一张图片,shape部分 = (height, width, channel)

3、多个图片
多张图片,shape部分 = (batch, height, width, channel),batch表示一个批次的张量数量

三、图片特征值处理

1、图片数据集
(1)一个样本图片:327 * 499 * 3,数据量过大
(2)样本和样本的形状不统一,没办法进行批量操作和运算

2、为什么要将图片缩放到统一大小?
在进行图像识别的时候,每个图片样本的特征数量要保持相同。所以要将所有图片张量大小统一转换
另一方面,如果图片的像素量太大,通过这种方式适当减少像素的数量,减少训练的计算开销

3、tf.image.resize(images, size)
说明:
(1)缩放图片
(2)images:4-D形状[batch, height, width, channels]或3-D形状的张量[height, width, channels]的图片数据
(3)size:是1-D int32张量,有2个要素:new_height,new_width,图像的新尺寸
(4)返回4-D格式或者3-D格式图片

四、图片数据格式

1、存储
用统一的uint8(节约空间)

2、矩阵计算
float32(提高精度)

五、案例:狗图片读取

1、读取流程分析
(1)构造图片文件名队列
(2)读取图片数据并进行解码
(3)处理图片数据形状
(4)运行

2、代码day02_dog_picture_read.py

import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
import tensorflow as tfdef picture_read():"""狗图片读取案例"""image_dataset = []  #创建一个空列表image_resize = []# 1、构造文件名列表filenames = tf.data.Dataset.list_files("./dog/*.jpg")for filename in filenames:print(filename)# 2、读取与解码for filename in filenames:raw = tf.io.read_file(filename)image = tf.io.decode_jpeg(raw, channels=3)print("image: ", image.shape, image.dtype)image_dataset.append(image)# 3、批处理#print("image_dataset: ", image_dataset)# 图像的形状、类型修改for image in image_dataset:resize = tf.image.resize(image, [200, 200])print("resize: ", resize)image_resize.append(resize)#print("image_resize: ", image_resize)return Noneif __name__ == "__main__":picture_read()

filename打印例子:

tf.Tensor(b'./dog/dog.73.jpg', shape=(), dtype=string)

image打印例子:

image:  (375, 499, 3) <dtype: 'uint8'>

resize打印例子:

resize:  tf.Tensor(
[[[ 35.787663  35.787663  43.787663][ 28.08867   28.846172  32.36117 ][ 17.412218  17.412218  15.636655]...[103.03774  106.03774  114.813324][102.62288  105.62288  113.107925][ 93.996574  96.780716 101.780716]][[ 60.637985  60.637985  69.14299 ][ 27.600521  28.289515  32.010033][ 19.479155  19.479155  18.004156]...[ 32.533382  35.607536  41.51757 ][ 35.41387   37.985897  43.11993 ][ 43.380077  43.592636  47.422752]][[ 69.490005  69.490005  78.20056 ][ 23.95669   24.47169   28.818346][ 22.8125    22.8125    21.6125  ]...[ 39.336327  43.336327  45.53636 ][ 22.146877  23.9786    25.84197 ][ 50.45275   47.524483  48.972183]]...[[106.42441   86.42441   79.42441 ][121.99182  101.99182   94.99182 ][169.41891  149.4189   142.4189  ]...[145.95242  122.95242  114.95242 ][147.68799  124.68798  116.68798 ][122.67888  102.26643   95.12895 ]][[117.95943   94.80693   91.95943 ][124.60395  101.27746  100.38693 ][153.56409  129.69409  130.43408 ]...[142.74245  118.30745  112.796585][142.50908  117.41502  113.44056 ][131.79726  109.64476  101.92726 ]][[141.82442  117.82442  117.82442 ][120.10246   95.10246   98.34496 ][131.69261  106.69261  110.69261 ]...[154.4974   126.497406 123.497406][147.52274  120.795166 120.522736][135.49553  112.49553  104.49553 ]]], shape=(200, 200, 3), dtype=float32)

先用tf.data.Dataset.list_files()获取文件名列表,然后用tf.io.read_file()读取成dtype string类型的tensor对象,然后用tf.io.decode_jpeg()解码成dtype uint8类型的tensor对象,然后把解码后的image放入列表里,然后用tf.image.resize()调整大小
 

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

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

相关文章

网站被SmartScreen标记为不安全怎么办?

在互联网时代&#xff0c;网站的安全性和可信度是用户选择是否继续访问的重要因素之一&#xff0c;然而&#xff0c;网站运营者偶尔会发现使用Edge浏览器访问网站时&#xff0c;会出现Microsoft Defender SmartScreen&#xff08;以下简称SmartScreen&#xff09;提示网站不安全…

Windows下搭建Flutter开发环境

IDE:VS code Flutter官网:Flutter: 为所有屏幕创造精彩 - Flutter 中文开发者网站 - Flutter 下载&安装 下载Flutter SDK,如图,建议自行下载安装: SDK还是挺大的,近1G,使用迅雷下载会快不少。 下载完成,解压缩到指定目录即可! 设置Local SDK,按下面步骤操作即…

【数据结构(邓俊辉)学习笔记】绪论05——动态规划

文章目录 0.前言1. Fibonacci数应用1.1 fib&#xff08;&#xff09;&#xff1a;递归1.1.1 问题与代码1.1.2 复杂度分析1.1.3 递归分析 1.2 fib&#xff08;&#xff09;&#xff1a;迭代 0.前言 make it work,make it right,make it fast. 让代码能够不仅正确而且足够高效地…

适合初学者的自然语言处理 (NLP) 综合指南

一、简述 自然语言处理 (NLP) 是人工智能 (AI) 最热门的领域之一&#xff0c;现在主要指大语言模型了。这要归功于人们热衷于能编写故事的文本生成器、欺骗人们的聊天机器人以及产生照片级真实感的文本到图像程序等应用程序。近年来&#xff0c;计算机理解人类语言、编程语言&a…

前端开发攻略---用原生JS在网页中也能实现文本转语音

1、原理 语音合成 (也被称作是文本转为语音&#xff0c;英语简写是 tts) 包括接收 app 中需要语音合成的文本&#xff0c;再在设备麦克风播放出来这两个过程。 Web API中对此有一个主要控制接口 SpeechSynthesis&#xff0c;外加一些处理如何表示要被合成的文本 (也被称为 utte…

Idea:通义千问插件

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 一、通义千问大模型 二、程序编写助手 三、Idea安装通义千问插件 总结 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、通义千问大模型…

数据结构——二叉树的操作 (层序遍历)(C++实现)

数据结构——二叉树的操作&#xff08;2&#xff09;&#xff08;C实现&#xff09; 统计叶子结点个数统计结点个数层序遍历非递归方式递归方式 我们今天接着来看二叉树的操作&#xff0c;如果还没有看过上一篇的可以点击这里&#xff1a; https://blog.csdn.net/qq_67693066/a…

来自异国的客人 - 华为OD统一考试(D卷)

OD统一考试(D卷) 分值: 100分 题解: Java / Python / C++ 题目描述 有位客人来自异国,在该国使用m进制计数。 该客人有个幸运数字n(n<m),每次购物时,其总是喜欢计算本次支付的花费(折算为异国的价格后)中存在多少幸运数字。 问: 当其购买一个在我国价值k的产品时,…

【Leetcode每日一题】 穷举vs暴搜vs深搜vs回溯vs剪枝_全排列 - 子集(难度⭐⭐)(65)

1. 题目解析 题目链接&#xff1a;78. 子集 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 算法思路详解&#xff1a; 为了生成数组 nums 的所有子集&#xff0c;我们需要对数组中的每个元素进行“选择”或“不选择…

JavaScript-Vue入门

本文主要测分享Vue的一些基础 Vue简介 Vue.js 是一个构建数据驱动的 web 界面的渐进式框架。它的主要目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。 下是一些 Vue 的主要特点和概念&#xff1a; 1. 响应式数据绑定&#xff1a;Vue 使用基于 HTML 的模板语法…

Visual Studio安装MFC开发组件

MFC由于比较古老了&#xff0c;Visual Studio默认没有这个开发组件。最近由于一些原因&#xff0c;需要使用这个库&#xff0c;这就需要另外安装。 参考了网上的一些资料&#xff0c;根据实际使用&#xff0c;其实很多步骤不是必须的。 https://zhuanlan.zhihu.com/p/68117276…

Neo-reGeorg(webshell代理)-php

https://github.com/L-codes/Neo-reGeorg python加载需要的库 pip install requests 生成webshell代理文件 python .\neoreg.py generate -k 123456 其中&#xff0c;123456为密码&#xff0c;可以修改 生成后的文件路径&#xff1a; > neoreg_servers/tunnel.ashx …

Java后台开发的前置说明

1.知识点逻辑 一个部分 都是先挑重点知识点讲解 然后根据这些重点知识点去完成一个项目的开发 然后在到返回来解决这个部分其他细枝末节的知识点 2.软件开发的分工 我们大致可以将软件开发分成四块&#xff1a; 1.前端开发(比如开发电脑中的京东 htmlcssjavascript) 2.移动开…

什么是主数据管理?合理管理主数据,奠定企业数据战略基石

主数据&#xff08;Master Data&#xff09;是指在企业多个业务系统中重复使用、共享的、具有高价值的核心业务实体数据&#xff0c;如客户、产品、供应商、员工等&#xff0c;它们是企业运营和决策的基础&#xff0c;需要保持高度的准确性、一致性和完整性&#xff0c;以确保业…

Scala 05 —— 函数式编程底层逻辑

Scala 05 —— 函数式编程底层逻辑 该文章来自2023/1/14的清华大学交叉信息学院助理教授——袁洋演讲。 文章目录 Scala 05 —— 函数式编程底层逻辑函数式编程假如...副作用是必须的&#xff1f;函数的定义函数是数据的函数&#xff0c;不是数字的函数如何把业务逻辑做成纯函…

贪吃蛇详解

Win32 API介绍&#xff1a; 在写贪吃蛇这款游戏时需要用到一些有关Win32 API的知识&#xff0c; 接下来我会将设计到的知识点列举并讲解&#xff1a; 首先我们先了解一下Win32 API是什么&#xff0c;Windows这个多作业系统除了协调应⽤程序的执⾏、分配内存、管理资源之外&am…

普乐蛙VR航天航空体验馆VR双人旋转座椅元宇宙VR飞船

多长假来袭&#xff01;&#xff01;想为门店寻找更多新鲜有趣的吸粉体验&#xff1f;想丰富景区体验&#xff1f;别着急&#xff0c;小编为你准备了一款爆款设备——时光穿梭机&#xff0c;720无死角旋转&#xff01;&#xff01;吸睛、刺激体验&#xff0c;将亲子、闺蜜、情侣…

Java对象不再使用时,为什么要赋值为 null

相信大家在面试Java开发的时候,会遇到比较多的问题是Java的内存管理,这里面涉及到Java垃圾回收机制,以及JVM调优等等,那么今天跟大家讨论一个问题:Java对象不再使用时,为什么要赋值为 null ? 1、Java内存管理 在Java中,对象是在堆内存中分配的。 这部分内存用于存储…

科技论文网站:中国科技论文在线

文章目录 1. Intro2. Main3. Cons Evaluation彩蛋&#xff1a;科学素质 这是作者最后一次发 这种类型的宣传 科普文章 1. Intro 中国科技论文在线是经教育部批准&#xff0c;由教育部科技发展中心主办&#xff0c; 利用现代信息技术手段&#xff0c;打破传统出版物的概念&…

Scrapy爬虫框架入门(豆瓣电影Top 250)

文章目录 Scrapy 官网Scrapy 文档GithubScrapy 简介项目结构爬虫实现XPath 教程创建 Scrapy 项目配置用户代理网页 dom 元素 IP 代理池IP代理池作用配置IP代理池申请IP代理池 Scrapy 官网 https://scrapy.org/ Scrapy 文档 https://docs.scrapy.org/en/latest/ Github htt…