Pytorch D2L Subplots方法对画图、图片处理

news2024/11/27 5:38:38

问题代码

def show_images(imgs, num_rows, num_cols, titles=None, scale=1.5): #@save
"""绘制图像列表"""
figsize = (num_cols * scale, num_rows * scale)
_, axes = d2l.plt.subplots(num_rows, num_cols, figsize=figsize)
axes = axes.flatten()
for i, (ax, img) in enumerate(zip(axes, imgs)):
if torch.is_tensor(img):
# 图片张量
ax.imshow(img.numpy())
else:
# PIL图片
ax.imshow(img)
ax.axes.get_xaxis().set_visible(False)
ax.axes.get_yaxis().set_visible(False)
if titles:
ax.set_title(titles[i])
return axes

d2l.plt.subplots返回值

plt.subplots是matplotlib库中的一个函数,用于创建一个新的Figure对象,并在其中创建一个或多个子图(subplot)。
它的基本用法是:

fig, ax = plt.subplots(nrows=1, ncols=1, **kwargs)
其中,nrowsncols分别指定了子图的行数和列数。如果只想创建一个子图,可以省略其中一个参数。

返回值fig是Figure对象ax则是一个或多个子图的Axes对象(如果只创建了一个子图,则返回一个单独的Axes对象;如果创建了多个子图,则返回一个Axes对象列表)。

kwargs是可选的关键字参数,用于设置Figure和子图的属性。例如,可以使用figsize参数设置Figure的大小,使用sharexsharey参数来共享子图的x轴和y轴。

axes = d2l.plt.subplots(num_rows, num_cols, figsize=figsize)

解释:

d2l.plt.subplots创建了一个包含多个子图的网格(grid);

num_rows和num_cols分别指定了网格中子图的行数和列数;
figsize指定了整个图像的尺寸,即包含所有子图的画布大小。
返回值axes是一个由网格的子图对象组成的NumPy数组。
我们可以使用它来访问、控制和绘制每个子图。

举例说明:

axes是一个由子图对象组成的NumPy数组,它可以用来访问、控制和绘制每个子图。具体来说,axes是一个大小为(num_rows, num_cols)的NumPy数组,其中axes[i, j]表示第 i + 1 i+1 i+1行和第 j + 1 j+1 j+1列的子图对象。

例如,如果我们使用以下代码创建一个包含 2 2 2行 3 3 3列子图的网格:


import matplotlib.pyplot as plt

import d2l



figsize = (6, 4)

num_rows, num_cols = 2, 3

axes = d2l.plt.subplots(num_rows, num_cols, figsize=figsize)

那么`axes`将是一个大小为$(2, 3)$的NumPy数组,可以通过索引来访问每个子图对象。例如,我们可以在第$1$行第$2$列的子图中绘制一条直线:

axes[0, 1].plot([0, 1], [0, 1])

或者我们可以在所有子图中添加一个标题:


for i in range(num_rows):

for j in range(num_cols):

axes[i, j].set_title(f'Subplot ({i+1}, {j+1})')

原链接

subplot()、subplots()

subplot()、subplots()在实际过程中,先创建了一个figure画窗,然后通过调用add_subplot()来向画窗中各个分块添加坐标区,其差别在于是分次添加(subplot())还是一次性添加(subplots())

在这里插入图片描述
3.plt.subplots()
语法格式:

matplotlib.pyplot.subplots(nrows=1, ncols=1, *, sharex=False,
sharey=False, squeeze=True,subplot_kw=None, gridspec_kw=None, **fig_kw)
-nrows:默认为 1,设置图表的行数。
-ncols:默认为 1,设置图表的列数。
-sharex、sharey:设置 x、y 轴是否共享属性,默认为 false,可设置为 ‘none’、‘all’、‘row’ 或 ‘col’。 False 或 none 每个子图的 x 轴或 y 轴都是独立的,True 或 ‘all’:所有子图共享 x 轴或 y 轴,‘row’ 设置每个子图行共享一个 x 轴或 y 轴,‘col’:设置每个子图列共享一个 x 轴或 y 轴。

import matplotlib.pyplot as plt
import numpy as np

# 创建一些测试数据 
x = np.linspace(0,100, 4)
y = np.sin(x**2)

# 创建一个画像和子图 -- 图1
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_title('Simple plot')

# 创建两个子图 -- 图2
#如图figure2,四个子图中上两幅图并无x轴(与下子图共享),因为已设置sharex=True
#若改为sharey=True,可观察到四副子图中右两幅无y轴(即与左子图共享)
f, ([ax1, ax2],[ax3,ax4]) = plt.subplots(2, 2, sharex=True)
ax1.plot(x, y)
ax1.set_title('Sharing x axis')
ax2.scatter(x, y)
ax3.scatter(x, y)
ax4.scatter(x, y)

# 创建四个子图 -- 图3
#通过对subplot_kw传入参数,生成关于极坐标系的子图
fig, axs = plt.subplots(2, 2, subplot_kw=dict(projection="polar"))
axs[0, 0].plot(x, y)
axs[1, 1].scatter(x, y)

plt.show()

在这里插入图片描述

文章来源地址

python内置函数:zip()函数搭配enumerate函数使用,用在for循环中

简介enumerate()

enumerate()函数是Python的内置函数,对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),可以利用enumerate函数同时获取对象的索引和值。

x=np.arange(0,100,10)
for i in enumerate(x):
    index = i[0]; xval = i[1]
    print(index,xval)
0 0
1 10
2 20
3 30
4 40
5 50
6 60
7 70
8 80
9 90
简介zip()

zip函数是Python的内置函数,它用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象(即对多个序列进行并行迭代)。如果各个迭代器元素个数不一致,zip()函数则在最短序列“用完”时就会停止。

sz = np.arange(1,100,10)
sx = np.arange(1,10,1)
for index, (szi, sxi) in enumerate(zip(sz, sx)):
    print(index,szi,sxi)
0 1 1
1 11 2
2 21 3
3 31 4
4 41 5
5 51 6
6 61 7
7 71 8
8 81 9

transforms.Compose(trans)

Compose()类会将transforms列表里面的transform操作进行遍历。实现的代码很简单:

## 这里对源码进行了部分截取。
def __call__(self, img):
	for t in self.transforms:	
		img = t(img)
    return img

pytorch通过深度学习进行预处理图片,离不开transforms.Compose(),torchvision.datasets.ImageFolder(),torch.utils.data.DataLoader()的用法。

源自于文章

1.Transform.Compose()详解

导入相应的库


import torch
import torchvision
import matplotlib.pyplot as plt
from torch.utils import data
from torchvision import datasets,transforms
from PIL import Image
%matplotlib inline

在这里插入图片描述

class torchvision.transforms.Compose(transforms):
 # Composes several transforms together.
 # Parameters: transforms (list of Transform objects) – list of transforms to compose.
 
Example # 可以看出Compose里面的参数实际上就是个列表,而这个列表里面的元素就是你想要执行的transform操作。
>>> transforms.Compose([
>>>     transforms.CenterCrop(10),
>>>     transforms.ToTensor(),])


展示原始图片

pic = "./train/Chihuahua/n02085620_10074.jpg"

img = plt.imread(pic)
plt.imshow(img)

定义图片预处理的对象。

traintransform = transforms.Compose([transforms.RandomRotation(20),           # 随机旋转20°
                                     transforms.ColorJitter(brightness=0.1), #随机改变图像的亮度对比度和饱和度
                                     transforms.Resize([150,150]),          # 转换为需要的尺寸
                                     transforms.ToTensor(),                #convert a PIL image to tensor (H*W*C)
                                    ])
img1 = Image.fromarray(img)   #将numpy对象的img转换为PIL格式
img2 = traintransform(img1)# 图像预处理tensor
img3 = transforms.ToPILImage()(img2)#转换为PIL进行展示
plt.imshow(img3)

展示处理之后的图片,可以看出,图片旋转了20°,并且大小转换为(150,150)

附上——transforms中的函数如何使用?

# Resize:把给定的图片resize到given size
# Normalize:Normalized an tensor image with mean and standard deviation
# ToTensor:convert a PIL image to tensor (H*W*C) in range [0,255] to a torch.Tensor(C*H*W) in the range [0.0,1.0]
# ToPILImage: convert a tensor to PIL image
# Scale:目前已经不用了,推荐用Resize
# CenterCrop:在图片的中间区域进行裁剪
# RandomCrop:在一个随机的位置进行裁剪
# RandomHorizontalFlip:以0.5的概率水平翻转给定的PIL图像
# RandomVerticalFlip:以0.5的概率竖直翻转给定的PIL图像
# RandomResizedCrop:将PIL图像裁剪成任意大小和纵横比
# Grayscale:将图像转换为灰度图像
# RandomGrayscale:将图像以一定的概率转换为灰度图像
# FiceCrop:把图像裁剪为四个角和一个中心
# TenCrop
# Pad:填充
# ColorJitter:随机改变图像的亮度对比度和饱和度。

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

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

相关文章

Flink(六)【DataFrame 转换算子(下)】

前言 今天学习剩下的转换算子。 1、物理分区算子 常见的物理分区策略有随机分配(Random)、轮询分配(Round-Robin)、重缩放(Rescale)和广播(Broadcast),下边我们分别来做…

科创人·蓝凌董事长杨健伟:夯实“四梁八柱”,让数字化“城中村上建高楼”

杨健伟 蓝凌软件董事长 长江商学院EMBA、数字化转型专家、深圳市企业联合会副会长、清华英赛克管理学博士。 “越来越多的企业家在谈数字化转型,软件行业需要思考CIO如何跟CEO对话,这是很大的挑战”,杨健伟在数智2023蓝凌用户大会上的这番话&…

openssl1.0.2版本Windows安装问题

之前安装过1.1版本,Windows环境下C 安装OpenSSL库 源码编译及使用(VS2019)_vs2019安装openssl_肥宝Fable的博客-CSDN博客 后来发现linux编译不过,以为是版本问题,相差太大,所以降一下版本,以免…

Python基础入门----如何通过conda搭建Python开发环境

文章目录 使用 conda 搭建Python开发环境是非常方便的,它可以帮助你管理Python版本、依赖库、虚拟环境等。以下是一个简单的步骤,演示如何通过 conda 搭建Python开发环境: 安装conda: 如果你还没有安装 conda,首先需要安装Anaconda或Miniconda。Anaconda是一个包含很多数据…

Kafka 集群如何实现数据同步?

哈喽大家好,我是咸鱼 最近这段时间比较忙,将近一周没更新文章,再不更新我那为数不多的粉丝量就要库库往下掉了 T﹏T 刚好最近在学 Kafka,于是决定写篇跟 Kafka 相关的文章(文中有不对的地方欢迎大家指出)…

电磁场与电磁波part2--电磁场的基本规律

1、电流连续性方程的微分形式 表明时变电流场是有散场,电流线是由电荷随时间变化的地方发出或终止的,在正电荷随时间减小的地方就会发出电流线,在正电荷随时间增加的地方就会终止电流线。 2、任何一个标量函数的梯度再求旋度时恒等于零&#…

洗地机选购攻略,洗地机哪个品牌好?一篇教会你挑到好用的洗地机

随着国内生活水平的提高,智能清洁产品的呼声也越来越高,尤其是洗地机,可以说是国内各个品牌的洗地机铺天盖地而来,那么如何挑选洗地机成了很多新手的困惑,别着急,笔者今天就给大家讲讲洗地机! 一、购买洗地…

【Vue全家桶 合集 关注收藏】

【Vue全家桶】全面了解学习并实践总结Vue必备知识点 写在前面 🤗 这里是SuperYi Vue全家桶合集站! 🌻 人海茫茫,感谢这一秒你看到这里。希望我的文章对你的有所帮助! 🌟 愿你在未来的日子,保持…

【STM32外设系列】NRF24L01无线收发模块

🎀 文章作者:二土电子 🌸 关注公众号获取更多资料! 🐸 期待大家一起学习交流! 文章目录 一、NRF24L01简介1.1 什么是NRF24L011.2 NRF24L01引脚介绍1.3 NRF24L01工作模式1.4 NRF24L01的SPI时序1.5 Enhanc…

图解分布式事务实现原理(三)

参考 本文参考https://zhuanlan.zhihu.com/p/650791238从零到一搭建 TCC 分布式事务框架,并在小徐的基础上增加个人见解笔记。 项目地址:https://github.com/xiaoxuxiansheng/gotcc 图解分布式事务实现原理(一):https…

Kubernetes学习-概念2

参考:关于 cgroup v2 | Kubernetes 关于 cgroup v2 在 Linux 上,控制组约束分配给进程的资源。 kubelet 和底层容器运行时都需要对接 cgroup 来强制执行为 Pod 和容器管理资源, 这包括为容器化工作负载配置 CPU/内存请求和限制。 Linux 中…

CentOs 7 PHP安装和配置

目录 1 安装epel源 2 安装REMI源 3 安装yum源管理工具 4 安装PHP7.3 5 启动php服务 6 设置PHP 6.1 查找安装包 6.2 查找PHP安装位置 6.3 查找php配置文件位置 6.4 配置PHP 6.5 设置快捷命令 6.6 查看php版本 6.7 更新php 1 安装epel源 yum -y install epel-release 2 安…

这次轮到微软炸场了;5000+AI工具调研报告 (500万字);狂打一星开喷AI聊天机器人;CMU LLM课程;AI创业的方向与时机 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🉑 Microsoft Ignite 2023 技术大会:微软的年度炸场时刻,而且连炸四天 https://ignite.microsoft.com OpenAI 开发…

【ARM Trace32(劳特巴赫) 使用介绍 2.2 -- TRACE32 进阶命令之 DIAG 弹框命令】

请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】 上篇文章:【ARM Trace32(劳特巴赫) 使用介绍 2.1 – TRACE32 Practice 脚本 cmm 脚本学习】 下篇文章:【ARM Trace32(劳特巴赫) 使用介绍 3 - trace32 访问运行时的内存】 文章目录 DIALOG.OK 命令DIA…

2023年中国恒温蜡疗仪发展趋势分析:应用前景存有很大发展与探索空间[图]

恒温电蜡疗仪可将蜡熔化,利用蜡自身特点,能阻止热的传导、散热慢、气体和水分不易消失,保温性能优越。利用蜡能紧密贴于体表的可塑性,可加入其他药物协同进行治疗,也可将中药与蜡疗有机地结合在一起,产生柔…

Axure基础详解二十二:随机点名效果

效果演示 组件 建立一个【中继器】,内部插入一个“文本框”。【中继器】每页项目数为1,开始页为1。 设置交互 页面载入时交互 给【中继器】新曾行,“name”数据列添加10行数据,填入相应的名字;“shunxu”数据列全部…

【迅搜01】安装运行并测试XunSearch

安装运行并测试XunSearch 这回的新系列,我们将学习到的是一个搜索引擎 迅搜 XunSearch 的使用。这个搜索引擎在 PHP 圈可能还是有一点名气的,而且也是一直在更新的,虽说现在 ElasticSearch 已经是实际上的搜索引擎霸主了,而且还有…

容性负载箱与电容器的关系是什么?

容性负载箱用于测试电容器性能的设备,电容器是储存电能的元件,具有储存和释放电荷的能力。容性负载箱通过对电容器施加不同的负载,可以测量电容器的容量、电压响应、损耗等参数。 容性负载箱与电容器的关系主要体现在以下几个方面&#xff1a…

快递鸟荣获全球电子商务创业创新大赛总决赛一等奖

日前,以“开放、连接、协同、赋能”为主题,由商务部中国国际电子商务中心指导,浙江省商务厅、中共省委组织部、中共省委宣传部、中共省委网信办、省发展和改革委、省教育厅、省科技厅、省财政厅、省人力社保厅、团省委主办,湖州市…

聊聊ThreadLocal(二)

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 大部分面试官喜欢问Thr…