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

相关文章

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

pico2 开发环境搭建-基于ubuntu

pico2 开发环境搭建-基于ubuntu 安装编译工具链下载sdk 和example编译example 安装编译工具链 sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib 注意cmake的版本,需要在3.17 以上 下载sdk 和ex

动手学深度学习【数据操作+数据预处理】

import osos.makedirs(os.path.join('.', 'data'), exist_ok=True)data_file = os.path.join('.', 'data', 'house_tiny.csv')with open(data_file, 'w') as f:f.write('NumRooms,Alley,Price\n') # 列名f.write('NA

线程的四种操作

所属专栏:Java学习        1. 线程的开启 start和run的区别: run:描述了线程要执行的任务,也可以称为线程的入口 start:调用系统函数,真正的在系统内核中创建线程(创建PCB,加入到链表中),此处的start会根据不同的系统,分别调用不同的api,创建好之后的线程,再单独去执行run(所以说,start的本质是调用系统api,系统的api

Java IO 操作——个人理解

之前一直Java的IO操作一知半解。今天看到一个便文章觉得很有道理( 原文章),记录一下。 首先,理解Java的IO操作到底操作的什么内容,过程又是怎么样子。          数据来源的操作: 来源有文件,网络数据。使用File类和Sockets等。这里操作的是数据本身,1,0结构。    File file = new File("path");   字

MySQL——表操作

目录 一、创建表 二、查看表 2.1 查看表中某成员的数据 2.2 查看整个表中的表成员 2.3 查看创建表时的句柄 三、修改表 alter 3.1 重命名 rename 3.2 新增一列 add 3.3 更改列属性 modify 3.4 更改列名称 change 3.5 删除某列 上一篇博客介绍了库的操作,接下来来看一下表的相关操作。 一、创建表 create

Verybot之OpenCV应用一:安装与图像采集测试

在Verybot上安装OpenCV是很简单的,只需要执行:         sudo apt-get update         sudo apt-get install libopencv-dev         sudo apt-get install python-opencv         下面就对安装好的OpenCV进行一下测试,编写一个通过USB摄像头采