首页 > 其他分享 >动手学深度学习——深度学习计算

动手学深度学习——深度学习计算

时间:2023-10-11 20:11:45浏览次数:32  
标签:__ 20 nn self 学习 动手 init 深度 def

image

from pixiv

层和块

为了实现这些复杂的网络,我们引入了神经网络块的概念。 块(block)可以描述单个层、由多个层组成的组件或整个模型本身。

从编程的角度来看,块由类(class)表示。 它的任何子类都必须定义一个将其输入转换为输出的前向传播函数, 并且必须存储任何必需的参数。

于是我们有下面的类定义:

import torch
from torch import nn
from torch.nn import functional as F

class MySequential(nn.Module):
    def __init__(self, *args):
        super().__init__()
        for idx, module in enumerate(args):
            # 这里,module是Module子类的一个实例。我们把它保存在'Module'类的成员
            # 变量_modules中。_module的类型是OrderedDict
            self._modules[str(idx)] = module

    def forward(self, X):
        # OrderedDict保证了按照成员添加的顺序遍历它们
        for block in self._modules.values():
            X = block(X)
        return X

nn.Module是父类
_modules的主要优点是: 在模块的参数初始化过程中, 系统知道在_modules字典中查找需要初始化参数的子块。

如上我们就定义了一个块,这个块中包含对参数的组织和初始化__init__函数,以及进行计算的前向传播函数forward函数


我们可以用nn.Sequential与自定义的块进行结果

class FixedHiddenMLP(nn.Module):
    def __init__(self):
        super().__init__()
        # 不计算梯度的随机权重参数。因此其在训练期间保持不变
        self.rand_weight = torch.rand((20, 20), requires_grad=False)
        self.linear = nn.Linear(20, 20)

    def forward(self, X):
        X = self.linear(X)
        # 使用创建的常量参数以及relu和mm函数
        X = F.relu(torch.mm(X, self.rand_weight) + 1)
        # 复用全连接层。这相当于两个全连接层共享参数
        X = self.linear(X)
        # 控制流
        while X.abs().sum() > 1:
            X /= 2
        return X.sum()

class NestMLP(nn.Module):
    def __init__(self):
        super().__init__()
        self.net = nn.Sequential(nn.Linear(20, 64), nn.ReLU(),
                                 nn.Linear(64, 32), nn.ReLU())
        self.linear = nn.Linear(32, 16)

    def forward(self, X):
        return self.linear(self.net(X))

chimera = nn.Sequential(NestMLP(), nn.Linear(16, 20), FixedHiddenMLP())
chimera(X)

标签:__,20,nn,self,学习,动手,init,深度,def
From: https://www.cnblogs.com/cilinmengye/p/17758056.html

相关文章

  • 《动手学深度学习 Pytorch版》 8.5 循环神经网络的从零开始实现
    %matplotlibinlineimportmathimporttorchfromtorchimportnnfromtorch.nnimportfunctionalasFfromd2limporttorchasd2lbatch_size,num_steps=32,35train_iter,vocab=d2l.load_data_time_machine(batch_size,num_steps)#仍然使用时间机器数据集......
  • 《算法学习专栏》—— DP问题之背包模型
    2023年10月11日更新于2023年10月11日一、前言本栏,为背包模型,题目主要来源日常,目前主要来源于Acwing的提高课。希望以后做到背包的题目,也能加进来,不断完善。使用的分析方法均为闫式DP分析法。字臭。。。希望能用手写板慢慢写的好看。二、背包模型2.1目前的模型01背包模型......
  • 莫比乌斯函数及反演学习笔记
    前置知识\(1.\)艾佛森括号:\([P]=\begin{cases}1&\mathtt{(if\P\is\true)}\\0&\mathtt{(otherwise)}\end{cases}\)\(2.\)\(a\midb\)表示\(a\)是\(b\)的因子\(3.\)整除分块:\(\displaystyle\sum_{i=1}^n\lfloor\dfrac{N}{i}\rfloor\......
  • 我汤姆回来了(树和图的深度优先遍历(树的重心))(10/11)
    #include<iostream>#include<cstring>usingnamespacestd;constintN=100010;constintM=N*2;//可能多次节点重复,所以开大intn;inte[M],ne[M],h[N],idx=0;boolst[N];intans=N;//记录最后最小值答案//单链表的连接,不同点就是头结点有多个voidadd(i......
  • 019 数据库学习笔记--代码生成工具(满满的成产力)
    -------------------------------生成实体类-------------------------------declare@TableNamesysname='ViewQualityInfo'declare@TableNameLsysname='viewQualityInfo'declare@Resultvarchar(max)='///<summary>///'......
  • 图论——树上问题 学习笔记
    图论——树上问题学习笔记目录树的直径树的重心树的中心经典问题1:最小化最大距离树的直径定义树上任意两节点之间最长的简单路径即为树的直径。显然,一棵树可以有多条直径,他们的长度相等。性质若树上所有边边权均为正,则树的所有直径有交,且中点重合;有树的直径\((p,q......
  • C#学习笔记--复杂数据类型、函数和结构体
    C#基础复杂数据类型特点:多个数据变量地一个集合体,可以自己命名种类:枚举、数组和结构体枚举:整型常量的集合数组:任意变量类型的顺序存储的数据集合结构体:任意变量类型的数据组合成的数据块枚举:枚举可以方便表示对象的各种状态,本质还是一种变量。例如我们可以用枚举来表示......
  • 智慧教育:引领未来学习的创新
    ​随着科技的不断发展,教育领域也迎来了一场革命。传统的教育方式逐渐不再适应当今社会的需求,学校、教育机构和政府纷纷寻求创新的方法来提高教育质量、提升学生的学习体验以及提供更广泛的教育机会。 一、项目背景(1)政策背景"智慧教育"的理念是为了适应时代变革和社会需求、提......
  • 达梦空间数据学习(二)
    示例演示--点(POINT)droptableifexistsdmpoint;createtabledmpoint(namevarchar(100),geomST_Point);insertintodmpointVALUES('p1',dmgeo2.ST_PointFromText('point(11)',4326));insertintodmpointVALUES('p2',dmgeo2.ST_Po......
  • 深度学习中的样本不平衡问题
    1.什么是样本不平衡问题?所谓的类别不平衡问题指的是数据集中各个类别的样本数量极不均衡。以二分类问题为例,假设正类的样本数量远大于负类的样本数量,通常情况下把样本类别比例超过4:1(也有说3:1)的数据就可以称为不平衡数据。样本不平衡实际上是一种非常常见的现象。比如:在欺诈交易......