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

相关文章

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat

使用Java填充Word模板的操作指南

《使用Java填充Word模板的操作指南》本文介绍了Java填充Word模板的实现方法,包括文本、列表和复选框的填充,首先通过Word域功能设置模板变量,然后使用poi-tl、aspose-words... 目录前言一、设置word模板普通字段列表字段复选框二、代码1. 引入POM2. 模板放入项目3.代码

利用Python操作Word文档页码的实际应用

《利用Python操作Word文档页码的实际应用》在撰写长篇文档时,经常需要将文档分成多个节,每个节都需要单独的页码,下面:本文主要介绍利用Python操作Word文档页码的相关资料,文中通过代码... 目录需求:文档详情:要求:该程序的功能是:总结需求:一次性处理24个文档的页码。文档详情:1、每个

Python内存管理机制之垃圾回收与引用计数操作全过程

《Python内存管理机制之垃圾回收与引用计数操作全过程》SQLAlchemy是Python中最流行的ORM(对象关系映射)框架之一,它提供了高效且灵活的数据库操作方式,本文将介绍如何使用SQLAlc... 目录安装核心概念连接数据库定义数据模型创建数据库表基本CRUD操作创建数据读取数据更新数据删除数据查

Go语言中json操作的实现

《Go语言中json操作的实现》本文主要介绍了Go语言中的json操作的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录 一、jsOChina编程N 与 Go 类型对应关系️ 二、基本操作:编码与解码 三、结构体标签(Struc

k8s搭建nfs共享存储实践

《k8s搭建nfs共享存储实践》本文介绍NFS服务端搭建与客户端配置,涵盖安装工具、目录设置及服务启动,随后讲解K8S中NFS动态存储部署,包括创建命名空间、ServiceAccount、RBAC权限... 目录1. NFS搭建1.1 部署NFS服务端1.1.1 下载nfs-utils和rpcbind1.1

Java 字符串操作之contains 和 substring 方法最佳实践与常见问题

《Java字符串操作之contains和substring方法最佳实践与常见问题》本文给大家详细介绍Java字符串操作之contains和substring方法最佳实践与常见问题,本文结合实例... 目录一、contains 方法详解1. 方法定义与语法2. 底层实现原理3. 使用示例4. 注意事项二、su

Java Stream流与使用操作指南

《JavaStream流与使用操作指南》Stream不是数据结构,而是一种高级的数据处理工具,允许你以声明式的方式处理数据集合,类似于SQL语句操作数据库,本文给大家介绍JavaStream流与使用... 目录一、什么是stream流二、创建stream流1.单列集合创建stream流2.双列集合创建str