【学习】基础知识

1. 不同的维度表示

图像的维度表示(H , W , C):

对于一张彩色图像,通常有三个通道(红、绿、蓝),每个通道都是一个二维矩阵。假设图像的高度为 H,宽度为 W,那么图像的维度表示为 (H, W, 3)。这里的 3 表示三个通道。

对于灰度图像,只有一个通道,其维度表示为 (H, W)。

PyTorch Tensor 的维度表示(batchSize , C , H , W ):

PyTorch Tensor 的维度表示通常是 (batch_size, channels, height, width),其中:

batch_size 表示一个批次中包含的样本数。
channels 表示图像的通道数,与图像的颜色通道数相对应。
height 表示图像的高度。
width 表示图像的宽度。
因此,一张彩色图像在 PyTorch Tensor 中的维度表示为 (1, 3, H, W),其中 1 表示批次大小为 1。一张灰度图像在 PyTorch Tensor 中的维度表示为 (1, 1, H, W)。

在处理图像时,这样的维度表示是为了与深度学习模型的输入格式相匹配。深度学习模型通常期望一批数据,即使只有一张图像,也需要在批次维度上进行表示。

unsqueeze 和 squeeze的用法

squeeze 单词的意思是 挤压、压缩。

unsqueeze 是 PyTorch 中的一个操作,用于在指定的维度上插入新的维度。这个操作在张量的形状中插入一个大小为 1 的新维度。详细解释一下 unsqueeze 的用法和作用:

	new_tensor = original_tensor.unsqueeze(dim)

参数 dim: 要插入新维度的位置(维度索引,下标从0开始)。

例如,对于一个三维张量 tensor,形状为 (A, B, C),如果我们使用 tensor.unsqueeze(0),那么将在第 0 维(最前面)插入一个新的维度,形状变为 (1, A, B, C)。

squeeze 是 PyTorch 中的一个操作,用于去除张量中大小为 1 的维度。它的作用是在张量的形状中去除不必要的、大小为 1 的维度。详细解释一下 squeeze 的用法和作用:

	new_tensor = original_tensor.squeeze(dim)

参数 dim (可选): 要去除的维度索引。如果指定了 dim,那么只会去除指定位置的大小为 1 的维度。如果不指定,则会将所有维度大小为1的维度去除掉。

例如,对于一个四维张量 tensor,形状为 (1, A, 1, B),如果我们使用 tensor.squeeze(),那么将去除所有大小为 1 的维度,形状变为 (A,B)。
如果我们使用 tensor.squeeze(2),那么只会去除第 2 维(从 0 开始计数)上的大小为 1 的维度,形状变为(1,A,B)

2. transforms.ToTensor()

transforms.ToTensor() 操作将图像的像素值转换为 PyTorch 的 Tensor 格式,并自动进行了归一化,使得像素值范围在 0 到 1 之间。具体来说,它会将图像中每个像素的整数值除以 255,将像素值缩放到 0 到 1 之间。

例如,对于一个像素值为 127 的灰度图像,经过 transforms.ToTensor() 后,其对应的值将变为 127/255 = 0.498。这个操作是为了将像素值标准化到一个更小的范围,有助于训练深度学习模型时的稳定性和收敛速度。

总之,transforms.ToTensor() 会将图像中的所有像素值缩放到 0 到 1 之间。如果是使用BCELoss的话,对tensor的要求是必须是属于0到1之间。

3.torch.argmax()

argmax函数:torch.argmax(input, dim=None, keepdim=False)返回指定维度最大值的序号,dim给定的定义是:the demention to reduce.也就是把dim这个维度的,变成这个维度的最大值的index。

参考bolg:torch.argmax函数学习

通常,使用torch.argmax()得到的是一个类别索引。因为他直接读取出了最大值,通常最大值表示最大概率。
具体应用参考:关于torch.argmax()的在深度学习中应用的理解
类别索引表示模型对每个像素点的预测结果所属的类别。在语义分割任务中,每个像素点被分配一个类别,这个类别索引通常对应于模型所学习的类别标签。

例如:分类任务中的预测类别获取

torch.argmax() 在深度学习中经常用于获取张量沿指定维度上最大值的索引。这在分类任务、生成类别预测或评估模型输出时经常使用。下面是一些例子:

  1. 分类任务中的预测类别获取
    假设有一个模型输出的概率分布张量,形状为 (batch_size, num_classes),其中 num_classes 是类别的数量。我们可以使用 torch.argmax() 获取每个样本预测的类别:
import torch

# 模拟模型输出的概率分布
output_probs = torch.tensor([[0.1, 0.6, 0.3],
                            [0.1, 0.2, 0.7]])

# 获取每个样本预测的类别索引
predicted_classes = torch.argmax(output_probs, dim=1)

print(predicted_classes)

这里 dim=1 表示沿着第二个维度(类别维度)获取最大值的索引。输出将是一个包含每个样本预测类别索引的张量。

输出为:tensor([1, 2])

并且,torch.argmax()中得到的数组的取值范围是和dim维度上的值有关。例如,此处dim=1的维度即为列的维度,列维度上共3列,故最终的tensor取值是0,1,2。或者 torch.Size([1, 21, 500, 928]),的dim=1维度上的大小是21,故最终得到的tensor取值是0-20的范围。

理解:这里得到的概率分布为[0.1, 0.6, 0.3], [0.5, 0.2, 0.3],对于第一个数组概率最大的是0.6,其索引为1。对于第二个数组概率最大的是0.5,索引为0。所以按照dim=1,得到的输出为:tensor([1, 0])

接下来,你可以使用这些预测的类别索引进行一些后续操作,比如:

class_labels = ["Class A", "Class B", "Class C"]

predicted_labels = [class_labels[idx] for idx in predicted_classes]
print(predicted_labels)
输出为:['Class B', 'Class C']
  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超好的小白

没体验过打赏,能让我体验一次吗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值