【动手学深度学习】pytorch-参数管理

这篇具有很好参考价值的文章主要介绍了【动手学深度学习】pytorch-参数管理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

pytorch-参数管理

概述

 我们的目标是找到使损失函数最小化的模型参数值。 经过训练后,我们将需要使用这些参数来做出未来的预测。 此外,有时我们希望提取参数,以便在其他环境中复用它们, 将模型保存下来,以便它可以在其他软件中执行, 或者为了获得科学的理解而进行检查。

# 创建一个单隐藏层的MLP
import torch
from torch import nn

net = nn.Sequential(nn.Linear(4,8),nn.ReLU(),nn.Linear(8,1))
X = torch.rand(size = (2,4))
net(X)



参数访问

# 参数访问  全连接层包含两个参数  分别是该层的权重和偏置  两者都为存储单精度浮点数
print(net[2].state_dict())

【动手学深度学习】pytorch-参数管理,人工智能,# 动手学深度学习,深度学习,pytorch,人工智能

print(type(net[2].bias))
print(net[2].bias)
print(net[2].bias.data)

【动手学深度学习】pytorch-参数管理,人工智能,# 动手学深度学习,深度学习,pytorch,人工智能

# 一次性访问所有参数
print(*[(name,param.shape) for name,param in net[0].named_parameters()])
print(*[(name,param.shape) for name,param in net.named_parameters()])

【动手学深度学习】pytorch-参数管理,人工智能,# 动手学深度学习,深度学习,pytorch,人工智能

嵌套块收集参数


def block1():
    return nn.Sequential(nn.Linear(4,8),nn.ReLU(),
                         nn.Linear(8,4),nn.ReLU())

def block2():
    net = nn.Sequential()
    for i in range(4):
        net.add_module(f'block{i}',block1())

    return net

#  块和层之间进行组合
rgnet = nn.Sequential(block2(),nn.Linear(4,1))
rgnet(X)

【动手学深度学习】pytorch-参数管理,人工智能,# 动手学深度学习,深度学习,pytorch,人工智能

访问第一个主要的块中第二个子块的第一层的偏置
【动手学深度学习】pytorch-参数管理,人工智能,# 动手学深度学习,深度学习,pytorch,人工智能

参数初始化

 pytorch根据一个范围均匀初始化权重和偏置矩阵 这个范围是根据输入和输出维度计算得到,Pytorch.init模块提供了多种预置初始化方法。

内置初始化

下面的代码将所有的权重参数初始化为标准差为0.01的高斯随机变量 并且将偏置参数设置为0

def init_normal(m):
    if type(m) == nn.Linear:
        nn.init.normal_(m.weight,mean = 0,std = 0.01)
        nn.init.zeros_(m.bias)

net.apply(init_normal)
net[0].weight.data[0],net[0].bias.data[0]

可以将所有的参数初始化为1


def init_constant(m):
    if type(m) == nn.Linear:
        nn.init.constant_(m.weight,1)
        nn.init.zeros_(m.bias)

net.apply(init_constant)
net[0].weight.data[0],net[0].bias.data[0]

针对不同的块进行初始化

def init_xavier(m):
    if type(m) == nn.Linear:
        nn.init.xavier_uniform_(m.weight)

def init_42(m):
    if type(m) == nn.Linear:
        nn.init.constant_(m.weight,42)

net[0].apply(init_xavier)
net[2].apply(init_42)
print(net[0].weight.data[0])
print(net[2].weight.data)

自定义初始化

def my_init(m):
    if type(m) == nn.Linear:
        print("Init", *[(name, param.shape)
                        for name, param in m.named_parameters()][0])
        nn.init.uniform_(m.weight, -10, 10)
        m.weight.data *= m.weight.data.abs() >= 5

net.apply(my_init)
net[0].weight[:2]

参数共享

第三层和第四层共享一个参数文章来源地址https://www.toymoban.com/news/detail-578760.html

shared = nn.Linear(8,8)
net = nn.Sequential(nn.Linear(4,8),nn.ReLU(),
                    
                    shared,nn.ReLU(),
                    shared,nn.ReLU(),
                    nn.Linear(8,1))


net(X)

print(net[2].weight.data[0] == net[4].weight.data[0])



到了这里,关于【动手学深度学习】pytorch-参数管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【人工智能与深度学习】当输入层维度为1024,输出层维度为100时,为什么全连接层参数量为1024*100+100

    在神经网络中,全连接层(也称为稠密层或线性层)的参数量计算通常包括权重(weights)和偏置(biases)。对于一个全连接层,如果输入层维度(即输入特征的数量)为1024,输出层维度(即输出特征的数量)为100,那么参数的计算方式如下: 权重 :每个输入特征都与每个输

    2024年01月17日
    浏览(78)
  • 《人工智能专栏》必读150篇 | 专栏介绍 & 专栏目录 & Python与PyTorch | 机器与深度学习 | 目标检测 | YOLOv5及改进 | YOLOv8及改进 | 关键知识点 | 工具

    各位读者们好,本专栏最近刚推出,限于个人能力有限,不免会有诸多错误,敬请私信反馈给我,接受善意的提示,后期我会改正,谢谢,感谢。 第一步 :[ 购买点击跳转 ] 第二步 : 代码函数调用关系图(全网最详尽-重要) 因文档特殊,不能在博客正确显示,请移步以下链接

    2024年02月02日
    浏览(71)
  • 《动手学深度学习(PyTorch版)》笔记2

    让计算机实现微分功能, 有以下四种方式: - 手工计算出微分, 然后编码进代码 - 数值微分 (numerical differentiation) - 符号微分 (symbolic differentiation) - 自动微分(automatic differentiation) 深度学习框架通过 自动微分 来加快求导。 实际中,根据设计好的模型,系统会构建一个 计算

    2024年01月24日
    浏览(44)
  • 《动手学深度学习(PyTorch版)》笔记1

    data 每个数据集由一个个样本(example, sample)组成,大多时候,它们遵循独立同分布(independently and identically distributed, i.i.d.)。 样本有时也叫做数据点(data point)或数据实例(data instance),通常每个样本由一组称为特征(features,或协变量(covariates))的属性组成。 机器学习

    2024年01月24日
    浏览(49)
  • AI写作革命:PyTorch如何助力人工智能走向深度创新

    身为专注于人工智能研究的学者,我十分热衷于分析\\\"AI写稿\\\"与\\\"PyTorch\\\"这两项领先技术。面对日益精进的人工智能科技,\\\"AI写作\\\"已不再是天方夜谭;而\\\"PyTorch\\\"如璀璨明珠般耀眼,作为深度学习领域的尖端工具,正有力地推进着人工智能化进程。于此篇文章中,我将详细解析\\\"

    2024年04月13日
    浏览(51)
  • 《动手学深度学习(PyTorch版)》笔记8.6

    注:书中对代码的讲解并不详细,本文对很多细节做了详细注释。另外,书上的源代码是在Jupyter Notebook上运行的,较为分散,本文将代码集中起来,并加以完善,全部用vscode在python 3.9.18下测试通过,同时对于书上部分章节也做了整合。 训练结果: 与上一节相比,由于pytorch的

    2024年02月20日
    浏览(54)
  • 《动手学深度学习(PyTorch版)》笔记8.7

    注:书中对代码的讲解并不详细,本文对很多细节做了详细注释。另外,书上的源代码是在Jupyter Notebook上运行的,较为分散,本文将代码集中起来,并加以完善,全部用vscode在python 3.9.18下测试通过,同时对于书上部分章节也做了整合。 通过时间反向传播 (backpropagation thro

    2024年02月20日
    浏览(48)
  • 《动手学深度学习(PyTorch版)》笔记3.1

    3.1.1 Basic Concepts 我们通常使用 n n n 来表示数据集中的样本数。对索引为 i i i 的样本,其输入表示为 x ( i ) = [ x 1 ( i ) , x 2 ( i ) , . . . , x n ( i ) ] ⊤ mathbf{x}^{(i)} = [x_1^{(i)}, x_2^{(i)},...,x_n^{(i)}]^top x ( i ) = [ x 1 ( i ) ​ , x 2 ( i ) ​ , ... , x n ( i ) ​ ] ⊤ ,其对应的标签是 y ( i ) y^{(

    2024年01月25日
    浏览(42)
  • 【深度学习】动手学深度学习(PyTorch版)李沐 2.4.3 梯度【公式推导】

      我们可以连接一个多元函数对其所有变量的偏导数,以得到该函数的 梯度 (gradient)向量。 具体而言,设函数 f : R n → R f:mathbb{R}^{n}tomathbb{R} f : R n → R 的输入是一个 n n n 维向量 x ⃗ = [ x 1 x 2 ⋅ ⋅ ⋅ x n ] vec x=begin{bmatrix} x_1\\\\x_2\\\\···\\\\x_nend{bmatrix} x = ​ x 1 ​ x 2 ​

    2024年01月17日
    浏览(52)
  • 《动手学深度学习 Pytorch版》 10.7 Transformer

    自注意力同时具有并行计算和最短的最大路径长度这两个优势。Transformer 模型完全基于注意力机制,没有任何卷积层或循环神经网络层。尽管 Transformer 最初是应用于在文本数据上的序列到序列学习,但现在已经推广到各种现代的深度学习中,例如语言、视觉、语音和强化学习

    2024年02月08日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包