参考:点击跳转
P11 线性层
torch.nn.Linear(in_features, out_features, bias=True, device=None, dtype=None)
in_features
– size of each input sample
out_features
– size of each output sample
bias
– If set to False, the layer will not learn an additive bias. Default: True
将图片内容转化为一维:
for data in dataloader:
imgs,t=data
print(imgs.shape)
output=torch.reshape(imgs,(64,1,1,-1))
print(output.shape)
output:
#torch.Size([64, 3, 32, 32])
#torch.Size([64, 1, 1, 3072])
由此可见,将图片展开后,也就是
inputsize
为3072
import torch
import torchvision
from torch import nn
from torch.nn import Linear
from torch.utils.data import DataLoader
dataset=torchvision.datasets.CIFAR10("dataset",train=False,transform=torchvision.transforms.ToTensor(),
download=True)
#这里不droplast后面会报错,因为linear1的定义是196608,而最后一组图片不够64张,最后的大小也不足196608
dataloader=DataLoader(dataset,batch_size=64,drop_last=True)
class test(nn.Module):
def __init__(self):
super(test, self).__init__()
self.linear1=Linear(3072,10)
def forward(self,input):
output=self.linear1(input)
return output
test1=test()
for data in dataloader:
imgs,t=data
print(imgs.shape)
#将图片线性化
output=torch.reshape(imgs,(64,1,1,-1))
#flatten也可以用
# output=torch.flatten(imgs)
print(output.shape)
output=test1(output)
print(output.shape)
output:
#torch.Size([64, 3, 32, 32])
#torch.Size([64, 1, 1, 3072])
#torch.Size([64, 1, 1, 10])