张量转换代码解析

all_slices_tensor = torch.stack(all_slices)这句代码什么意思

all_slices_tensor = torch.stack(all_slices) 的作用是将一个包含多个张量的列表 all_slices 组合成一个新的多维张量 all_slices_tensor

假设 all_slices 是一个包含多个形状相同的张量的列表,例如 [(3, 1024, 1024), (3, 1024, 1024), ...]torch.stack() 会在新维度上将它们组合起来,生成一个新的张量,形状变为 (N, 3, 1024, 1024),其中 Nall_slices 中的张量数量。

import torch

# 假设有 3 个形状相同的张量
slice1 = torch.ones(3, 1024, 1024)
slice2 = torch.zeros(3, 1024, 1024)
slice3 = torch.full((3, 1024, 1024), 5)

# 将这些张量放入一个列表
all_slices = [slice1, slice2, slice3]

# 使用 torch.stack 将列表中的张量组合成一个四维张量
all_slices_tensor = torch.stack(all_slices)

print(all_slices_tensor.shape)  # 输出形状为 (3, 3, 1024, 1024)

torch.stack(all_slices):在新的第一个维度上叠加每个张量,生成 all_slices_tensor。最终的形状会多一个维度。

slice3 = torch.full((3, 1024, 1024), 5)这个是什么意思

slice3 = torch.full((3, 1024, 1024), 5) 这行代码的作用是创建一个指定形状的 PyTorch 张量,并用特定的值填充它。

解释

  • torch.full(size, fill_value)
    • size:指定要创建的张量的形状。在这个例子中,(3, 1024, 1024) 表示创建一个三维张量,第一维大小为 3(通常对应于通道数),第二维和第三维大小为 1024(通常对应于图像的高度和宽度)。
    • fill_value:指定用于填充张量的值。在这个例子中,5 是填充的值,表示张量中的每个元素都会被设置为 5。

结果

执行这行代码后,将得到一个形状为 (3, 1024, 1024) 的张量,其中每个元素的值都为 5。这通常用于初始化张量,以便在后续操作中使用。

import torch

# 创建一个形状为 (3, 1024, 1024) 的张量,所有元素均为 5
slice3 = torch.full((3, 1024, 1024), 5)

print(slice3.shape)  # 输出: torch.Size([3, 1024, 1024])
print(slice3)        # 打印张量,所有元素均为 5

torch.full与torch.zeros和 torch.ones的区别

torch.fulltorch.zerostorch.ones 是 PyTorch 中用于创建张量的函数,但它们的用途和填充值不同。以下是它们之间的主要区别:

1. torch.full(size, fill_value)

这三者在初始化张量时提供了灵活性,可以根据具体需要选择合适的方法。

  • 功能:创建一个指定形状的张量,并用给定的值填充该张量。
  • 参数
    • size:张量的形状(如 (3, 1024, 1024))。
    • fill_value:用来填充张量的值(如 5)。
  • 示例
    import torch
    
    tensor_full = torch.full((2, 3), 7)
    print(tensor_full)  # 输出: tensor([[7, 7, 7], [7, 7, 7]])
    

    2. torch.zeros(size)

  • 功能:创建一个指定形状的张量,并用 0 填充该张量。
  • 参数
    • size:张量的形状。
  • 示例
    import torch
    
    tensor_zeros = torch.zeros((2, 3))
    print(tensor_zeros)  # 输出: tensor([[0., 0., 0.], [0., 0., 0.]])
    

    3. torch.ones(size)

  • 功能:创建一个指定形状的张量,并用 1 填充该张量。
  • 参数
    • size:张量的形状。
  • 示例
    import torch
    
    tensor_ones = torch.ones((2, 3))
    print(tensor_ones)  # 输出: tensor([[1., 1., 1.], [1., 1., 1.]])
    
  • torch.full:创建张量并用任意值填充,适合需要初始化为特定值的场景。
  • torch.zeros:创建张量并用 0 填充,适合初始化为零的情况。
  • torch.ones:创建张量并用 1 填充,适合初始化为一的情况。

4.torch.randn: 生成一个服从标准正态分布(均值为0,标准差为1)的随机张量 

input= torch.randn(2, 1, 1)
print(input)
##输出:tensor([[[-0.3457]],

        [[-1.9507]]])

 

 5.torch.tensor

创建一个包含指定数据的张量,其内容由用户指定,数据不会是随机的

torch.tensor和transform.Totensor的区别 

torch.tensortorchvision.transforms.ToTensor 都用于将数据转换为 PyTorch 张量,但它们的使用场景和功能有所不同。以下是它们之间的主要区别:

1. 用途

  • torch.tensor:

    • 用于从 NumPy 数组或其他可转换的对象(如 Python 列表)创建 PyTorch 张量。
    • 适用于一般的张量创建,不仅限于图像数据。
  • torchvision.transforms.ToTensor:

    • 专门用于将图像数据(PIL 图像或 NumPy 数组)转换为 PyTorch 张量。
    • 常用于图像预处理,尤其是在训练深度学习模型时。

2. 输入数据类型

  • torch.tensor:

    • 可以接受多种输入,包括 NumPy 数组、Python 列表、标量等。
    • 不会自动处理数据的类型和归一化。
  • torchvision.transforms.ToTensor:

    • 可以接受 PIL 图像或 NumPy 数组作为输入。
    • 仅处理图像数据,并将其转换为 (C, H, W) 形式(通道在前),同时自动将图像数据归一化到 [0, 1] 范围(假设输入范围是 [0, 255])。

3. 归一化处理

  • torch.tensor:

    • 不进行归一化,直接保留原始数据的数值范围。
  • torchvision.transforms.ToTensor:

    • 会将输入图像的像素值从 [0, 255] 范围缩放到 [0, 1] 范围。这对于训练神经网络时是非常重要的,因为它有助于模型更快收敛。

4. 使用示例

  • torch.tensor:

    import torch
    import numpy as np
    
    # 从 NumPy 数组创建张量
    data = np.array([[1, 2], [3, 4]])
    tensor_data = torch.tensor(data)
    print(tensor_data)  # 输出: tensor([[1, 2], [3, 4]])
    

    torchvision.transforms.ToTensor:

    from PIL import Image
    from torchvision.transforms import ToTensor
    
    # 创建 ToTensor 转换
    transform = ToTensor()
    
    # 从 PIL 图像转换为张量
    image = Image.open('example.jpg')  # 假设这是一个图像文件
    tensor_image = transform(image)
    print(tensor_image.shape)  # 输出形状通常是 (C, H, W)
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值