【学习笔记】【Pytorch】十、线性层
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
【学习笔记】【Pytorch】九、线性层
学习地址
主要内容
一、前言
在神经网络中我们通常用线性层来完成两层神经元间的线性变换。
在普通神经网络里输入是一个二维矩阵不需要摊平。而在卷积神经网络里在网络的最后几层里会把卷积层摊平放到全连接里进行计算。
二、Pytorch的线性层
三、Linear类的使用
from torch.nn import Linear
作用对输入数据做线性变换y=Ax+b。
1.使用说明
【实例化】Linear(in_features, out_features, bias=True, device=None, dtype=None)
- 作用创建一个实例。
- in_features:输入结点数
out_features:输出结点数
bias :是否需要偏置 - 计算公式
2.代码实现
import torch
import torchvision
from torch import nn
from torch.nn import Linear
from torch.utils.data import DataLoader
class Model(nn.Module):
def __init__(self):
super().__init__() # 初始化父类参数
self.linear1 = Linear(196608, 10) # 创建一个实例
def forward(self, input):
output = self.linear1(input)
return output
# 创建一个实例
dataset = torchvision.datasets.CIFAR10(root="./dataset", train=False,
transform=torchvision.transforms.ToTensor())
# 创建一个实例drop_last=True防止经过线性函数报错
dataloader = DataLoader(dataset, batch_size=64, drop_last=True)
model = Model() # 创建一个实例
for data in dataloader:
imgs, targets = data
# batch_size, 通道数, 图片尺寸
print(imgs.shape) # torch.Size([64, 3, 32, 32])
# 拉伸成向量自动计算最后一个位置(64*3*32*32=196608)
output = torch.reshape(imgs, (1, 1, 1, -1))
print(output.shape) # torch.Size([1, 1, 1, 196608])
output = model(output)
print(output.shape) # torch.Size([1, 1, 1, 10])
输出
torch.Size([64, 3, 32, 32])
torch.Size([1, 1, 1, 196608])
torch.Size([1, 1, 1, 10])
torch.Size([64, 3, 32, 32])
torch.Size([1, 1, 1, 196608])
torch.Size([1, 1, 1, 10])
....
....
补充
output = torch.reshape(imgs, (1, 1, 1, -1))
# 也可以换成
output = torch.flatten(imgs)
输出变成
torch.Size([64, 3, 32, 32])
torch.Size([196608])
torch.Size([10])
torch.Size([64, 3, 32, 32])
torch.Size([196608])
torch.Size([10])
....
....