pytorch搭建卷积神经网络【第七课_tensor_图像操作_1】

2024-02-28 02:40

本文主要是介绍pytorch搭建卷积神经网络【第七课_tensor_图像操作_1】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 前言
  • 一、tensor打印配置
  • 二、读取图像
  • 三、 permute矩阵的块行列进行交换
  • 四、预先分配张量 然后读取图像填充张量
  • 五、显示数据及图像
  • 六、正则化数据 方法一
  • 七、正则化数据 方法二
  • 总结


前言

案例代码https://github.com/2012Netsky/pytorch_cnn/blob/main/1_image_dog.ipynb

一、tensor打印配置

#!/usr/bin/env python
# coding: utf-8
import numpy as np
import torch
torch.set_printoptions(edgeitems=2, threshold=50)
# precision是每一个元素的输出精度,默认是八位;
# threshold是输出时的阈值,当tensor中元素的个数大于该值时,进行缩略输出,默认时1000;
# edgeitems是输出的维度,默认是3;
# linewidth字面意思,每一行输出的长度;
# profile=None,修正默认设置(不太懂,感兴趣的可以试试)

在这里插入图片描述

二、读取图像

# imageio模块加载PNG图像
import imageio
# 优点:统一的API读取不同数据类型
img_arr = imageio.imread('../data/p1ch4/image-dog/b.jpg')
print(img_arr.shape)
print(img_arr)

在这里插入图片描述

三、 permute矩阵的块行列进行交换

# permute()函数其实是对矩阵的块行列进行交换
img = torch.from_numpy(img_arr)
out = img.permute(2, 0, 1)

在这里插入图片描述

四、预先分配张量 然后读取图像填充张量

五、显示数据及图像

# 预先分配张量 然后读取图像填充张量
batch_size = 3
batch = torch.zeros(batch_size, 3, 256, 256, dtype=torch.uint8)import os
import matplotlib.pyplot as pltdata_dir = '../data/p1ch4/image-cats/'
# 遍历文件夹下图片
filenames = [name for name in os.listdir(data_dir)if os.path.splitext(name)[-1] == '.png']
# 挑出png格式图片
print(filenames)
# numerate参数为可遍历/可迭代的对象(如列表、字符串) 返回值为 索引+索引值
for i, filename in enumerate(filenames):img_arr = imageio.imread(os.path.join(data_dir, filename))img_t = torch.from_numpy(img_arr)# 将tensor的维度换位。RGB->BGRimg_t = img_t.permute(2, 0, 1)img1 = img_t.numpy()[0]img2 = img_t.numpy()[1]img3 = img_t.numpy()[2]img4 = img_t.numpy()[3]print(img1.shape)# img[:, :, ::-1]是将BGR转化为RGB# 要生成1行4列,这是第一个图plt.subplot('行','列','编号')plt.subplot(141) plt.imshow(img1)plt.title('dog-1')plt.subplot(142)plt.imshow(img2)plt.title('dog-2')plt.subplot(143)plt.imshow(img3)plt.title('dog-3') plt.subplot(144)plt.imshow(img4)plt.title('cat-1')plt.show()print(img_t.size())# 只保留前三个通道 png图有时可能有四个通道 第四个通道为alpha通道表示透明度img_t = img_t[:3] # <1>print(img_t.size())batch[i] = img_t

在这里插入图片描述
在这里插入图片描述

六、正则化数据 方法一

# 正规化图像数据 方法1
batch = batch.float()
print(batch)
batch /= 255.0
print(batch)

在这里插入图片描述

七、正则化数据 方法二

# 正规化图像数据 方法2
# 设置三个通道均值为0 std为1
n_channels = batch.shape[1]
for c in range(n_channels):# 分别取三个通道图 返回值是不同图片相同通道图mean = torch.mean(batch[:, c])print(batch.shape)print(batch[:, c].shape)print(mean.shape)print(mean)std = torch.std(batch[:, c])print(std.shape)print(std)batch[:, c] = (batch[:, c] - mean) / stdprint( batch[:, c])

在这里插入图片描述

总结

这篇关于pytorch搭建卷积神经网络【第七课_tensor_图像操作_1】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/754240

相关文章

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

Python使用DrissionPage中ChromiumPage进行自动化网页操作

《Python使用DrissionPage中ChromiumPage进行自动化网页操作》DrissionPage作为一款轻量级且功能强大的浏览器自动化库,为开发者提供了丰富的功能支持,本文将使用Dri... 目录前言一、ChromiumPage基础操作1.初始化Drission 和 ChromiumPage

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

使用PyTorch实现手写数字识别功能

《使用PyTorch实现手写数字识别功能》在人工智能的世界里,计算机视觉是最具魅力的领域之一,通过PyTorch这一强大的深度学习框架,我们将在经典的MNIST数据集上,见证一个神经网络从零开始学会识... 目录当计算机学会“看”数字搭建开发环境MNIST数据集解析1. 认识手写数字数据库2. 数据预处理的

Redis中管道操作pipeline的实现

《Redis中管道操作pipeline的实现》RedisPipeline是一种优化客户端与服务器通信的技术,通过批量发送和接收命令减少网络往返次数,提高命令执行效率,本文就来介绍一下Redis中管道操... 目录什么是pipeline场景一:我要向Redis新增大批量的数据分批处理事务( MULTI/EXE