pytorch11->线性层linear的简单应用
·
import torch
import torchvision
from torch import nn
from torch.nn import Linear
from torch.utils.data import DataLoader
dataset = torchvision.datasets.CIFAR10(
root="./data",
train=False,
transform=torchvision.transforms.ToTensor(),
download=True
)
dataloader = DataLoader(dataset, batch_size=64, drop_last=True)
class Tudui(nn.Module):
def __init__(self):
super(Tudui, self).__init__()
# 每个样本展平后是 3*32*32 = 3072
self.linear1 = Linear(3072, 10)
def forward(self, input):
output = self.linear1(input)
return output
tudui = Tudui()
for data in dataloader:
imgs, targets = data
print(f"输入形状: {imgs.shape}") # [64, 3, 32, 32]
# flatten 把每个样本展平成一维
output = torch.flatten(imgs, start_dim=1) # 从第1维开始展平
print(f"flatten 后: {output.shape}") # [64, 3072]
output = tudui(output)
print(f"线性层输出: {output.shape}") # [64, 10]
break
1.dataloader = DataLoader(dataset, batch_size=64, drop_last=True),
drop_last=True:10000张测试集图片64个一组,剩下的最后一组不到64的,不要
2
class Tudui(nn.Module):
def __init__(self):
super(Tudui, self).__init__()
# 方式2的写法:每个样本展平后是 3*32*32 = 3072
self.linear1 = Linear(3072, 10)
每张图片有32*32个像素,每个像素由三维的RGB数构成,例为【255,255,255】,所以每张图片的数字表示会有3072个数来表示,
self.linear1 = Linear(3072, 10)意为,通过线性层把所有的数据信息,归为10类,为什么是10?
因为CIFAR-10 有 10 个类别:飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船、卡车。
3.
for data in dataloader:
imgs, targets = data
print(f"输入形状: {imgs.shape}") # [64, 3, 32, 32]
output = torch.flatten(imgs, start_dim=1) # 从第1维开始展平
print(f"flatten 后: {output.shape}") # [64, 3072]
output = tudui(output)
print(f"线性层输出: {output.shape}") # [64, 10]
break
这里imgs不是一张图,是dataloader打包的64张图,所以imgs.shape是[64, 3, 32, 32]
output = torch.flatten(imgs, start_dim=1) ,从第1维开始展平,把1,2,3维的3,32,32乘到一起成为[64, 3072],再通过tudui网络输出,3072输入进去,10输出来
更多推荐

所有评论(0)