IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 线性层及其pytorch使用 -> 正文阅读

[人工智能]线性层及其pytorch使用

查看官方的文档:Linear — PyTorch 1.10 documentation

CLASS torch.nn.Linear(in_features, out_features, bias=True, device=None, dtype=None)

使用线性层是一般只需要三个参数:in_features,out_features,bias


?

?其中x1,x2.....xd x的个数就是in_features,在这里就是d

g1,g2......gL,? g的个数就是out_features,在这里就是L

g1为例:g1=k1*x1+b1

? ? ? ? ? ? ? ? ? ? ? ?+k2*x2+b2

? ? ? ? ? ? ? ? ? ? ? ?+k3*x3+b3

? ? ? ? ? ? ? +……+kd*xd+bd

其中bias偏置为ture就意味着有后缀b。

而至于k与b的取值问题,则不需要我们考虑。

因为? :pytorch已经为我们求好了,我们只需要提供in_features和out_features和bias即可

?下面进行代码实践:

首先计算in_features的大小

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

dataset = torchvision.datasets.CIFAR10("./DXAA",train=False,transform=torchvision.transforms.ToTensor(),download=True)
dataloader =DataLoader(dataset,batch_size=64)



for data in dataloader:
    imgs,targets = data
    print(imgs.shape)#运行的尺寸为torch.Size([64, 3, 32, 32])
    output = torch.reshape(imgs,(1,1,1,-1))#要想使用线形层,我们需要变成为(1,1,1,?)这样格式的。
    # 即 batch_size=1,in_channels=1,图片是1*?的格式
    print(output.shape)#经过运行结果为torch.Size([1, 1, 1, 196608]),那么我们使用Linear的in_features=196608

下面使用线性层:

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

dataset = torchvision.datasets.CIFAR10("./DXAA",train=False,transform=torchvision.transforms.ToTensor(),download=True)
dataloader =DataLoader(dataset,batch_size=64)

class sza_(nn.Module):
    def __init__(self):
        super(sza_, self).__init__()
        self.linear1 = Linear(196608,10,bias=True)#bias默认为ture,可以不写
    def forward(self,input):
        output = self.linear1(input)
        return output


sza__ = sza_()

for data in dataloader:
    imgs,targets = data
    print(imgs.shape)#运行的尺寸为torch.Size([64, 3, 32, 32])
    output = torch.reshape(imgs,(1,1,1,-1))#要想使用线形层,我们需要变成为(1,1,1,?)这样格式的。
    # 即 batch_size=1,in_channels=1,图片是1*?的格式
    # print(output.shape)#经过运行结果为torch.Size([1, 1, 1, 196608]),那么我们使用Linear的in_features=196608
    output = sza__(output)
    print(output.shape)#运行结果为torch.Size([1, 1, 1, 10])
    #此时代码可以运行,但是到最后一次会报错

可以运行,但是到循环的最后一次会出现错误:

?

?问题解决:由于我们设置的in_features是固定的,然而在我们的数据集中,由于dataloader的batch_size为64,因而in_features大部分为196608,然而最后dataloader的drop_last默认为false,因而最后一组为16张,故而不满足in_features。解决办法就是将drop_last设置为true

接下来我们使用torch.flatten

t = torch.tensor([[[1, 2],
                   [3, 4]],
                  [[5, 6],
                   [7, 8]]])
torch.flatten(t)
#tensor([1, 2, 3, 4, 5, 6, 7, 8])
torch.flatten(t, start_dim=1)
#tensor([[1, 2, 3, 4],
#       [5, 6, 7, 8]])

?

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

dataset = torchvision.datasets.CIFAR10("./DXAA",train=False,transform=torchvision.transforms.ToTensor(),download=True)
dataloader =DataLoader(dataset,batch_size=64,drop_last=True)

class sza_(nn.Module):
    def __init__(self):
        super(sza_, self).__init__()
        self.linear1 = Linear(196608,10,bias=True)#bias默认为ture,可以不写
    def forward(self,input):
        output = self.linear1(input)
        return output


sza__ = sza_()

for data in dataloader:
    imgs,targets = data
    print(imgs.shape)#运行的尺寸为torch.Size([64, 3, 32, 32])
    # output = torch.reshape(imgs,(1,1,1,-1))#要想使用线形层,我们需要变成为(1,1,1,?)这样格式的。
    # 即 batch_size=1,in_channels=1,图片是1*?的格式
    output1 = torch.flatten(imgs)
    # print(output.shape)#经过运行结果为torch.Size([1, 1, 1, 196608]),那么我们使用Linear的in_features=196608
    print(output1.shape)#torch.Size([196608])
    output1 = sza__(output1)
    print(output1.shape)#运行结果为torch.Size([1, 1, 1, 10])#output1.shape = torch.Size([10])
    #此时代码可以运行,但是到最后一次会报错

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-02-09 20:42:12  更:2022-02-09 20:43:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 19:55:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码