Pytorch学习14_线性层及其他层

import torch
import torchvision
from torch import nn
from torch.utils.data import DataLoader

dataset=torchvision.datasets.CIFAR10("./dataset",train=False,
                                     transform=torchvision.transforms.ToTensor(),
                                     download=True)

dataloader=DataLoader(dataset,batch_size=64)

for data in dataloader:
    imgs,target=data
    print(f"imgs.shape:{imgs.shape}")

    output=torch.reshape(imgs,(1,1,1,-1))
    print(f"output.shape:{output.shape}")

使用 torch.reshape 进行形状重塑时,如果某一个维度使用了 -1,它表示该维度的大小将由系统自动计算,以确保总的元素数量不变。在 (1, 1, 1, -1) 中:

  • 第一个维度:1
  • 第二个维度:1
  • 第三个维度:1
  • 第四个维度:-1

这里的 -1 表示这个维度的大小将由系统自动计算。系统将会根据原始张量的元素总数,以及前面三个维度的大小,来计算这个维度的大小,以保持总的元素数量不变。

这种用法通常用于将多维张量重塑为特定形状,同时保持元素总数不变。

import torch
import torchvision
from torch import nn
from torch.nn import Linear
from torch.utils.data import DataLoader

# 加载 CIFAR-10 数据集,设置转换为张量并下载数据
dataset = torchvision.datasets.CIFAR10("./dataset", train=False,
                                       transform=torchvision.transforms.ToTensor(),
                                       download=True)

# 创建数据加载器,每批次包含64张图像
dataloader = DataLoader(dataset, batch_size=64)

# 定义一个神经网络类 nn_lin,继承自 nn.Module
class nn_lin(nn.Module):

    def __init__(self) -> None:
        super().__init__()
        # 定义一个线性层,输入大小为 196608,输出大小为 10
        self.linear01 = Linear(196608, 10)

    def forward(self, input):
        # 在前向传播中应用线性层
        output = self.linear01(input)
        return output

# 创建 nn_lin 类的实例
lin_xx = nn_lin()
step = 0

# 遍历数据加载器中的第一个批次
for data in dataloader:
    # 获取图像和目标标签
    imgs, target = data
    print(f"imgs.shape: {imgs.shape}")

    # 使用 torch.reshape 将图像展平成 (1, 1, 1, -1) 的形状
    output = torch.reshape(imgs, (1, 1, 1, -1))
    print(f"output.shape: {output.shape}")

    # 将展平后的图像传递给神经网络进行前向传播
    output_lin = lin_xx(output)
    print(f"output_lin: {output_lin}")
    
    # 仅遍历第一个批次以防止输出过多
    break

参考

【PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】】 https://www.bilibili.com/video/BV1hE411t7RN/?p=21&share_source=copy_web&vd_source=be33b1553b08cc7b94afdd6c8a50dc5a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值