注意事项:
1.Linear是来自nn模块下的
from torch.nn import Linear
2.flatten是来自torch模块下的和nn是平级的from torch import nn, flatten
3.展平操作不仅仅是把一张图片进行展平,而是把一个batch里面的所有图片都进行展平,然后再连接在一起
imgs,targets = data print(imgs.shape) imgs = flatten(imgs)#展平处理,包括把batch一起展平 print(imgs.shape)
4.__init__方法 里面self.linear不是单纯的变量,而是指代对象的变量。
def __init__(self) -> None: super().__init__() self.linear = Linear(196608,10)#用liner变量指向Linear对象 def forward(self,input): output = self.linear(input)#为什么属性这里可以传入参数---------》因为liner是实例化对象 return output
下面展示完整代码
import torchvision from torch import nn, flatten from torch.nn import Linear from torch.utils.data import DataLoader from torchvision import transforms test_set = torchvision.datasets.CIFAR10("./datasets2",train=False,transform=transforms.ToTensor(),download=True) test_loader = DataLoader(dataset=test_set,batch_size=64) class zj_linear(nn.Module): def __init__(self) -> None: super().__init__() self.linear = Linear(196608,10)#用liner变量指向Linear对象 def forward(self,input): output = self.linear(input)#为什么属性这里可以传入参数---------》因为liner是实例化对象 return output zj_linear_1 = zj_linear() for data in test_loader: imgs,targets = data print(imgs.shape) imgs = flatten(imgs)#展平处理,包括把batch一起展平 print(imgs.shape) output = zj_linear_1(imgs) print(output.shape)