首页 > 其他分享 >《动手学深度学习 Pytorch版》 5.4 自定义层

《动手学深度学习 Pytorch版》 5.4 自定义层

时间:2023-09-13 19:55:32浏览次数:42  
标签:__ 5.4 nn 自定义 self torch 0.0000 Pytorch units

5.4.1 不带参数的层

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

class CenteredLayer(nn.Module):
    def __init__(self):
        super().__init__()

    def forward(self, X):
        return X - X.mean()  # 仅作减去均值的操作
    
layer = CenteredLayer()
layer(torch.FloatTensor([1, 2, 3, 4, 5]))  # 可以正常运行
tensor([-2., -1.,  0.,  1.,  2.])
net = nn.Sequential(nn.Linear(8, 128), CenteredLayer())  # 可以将其组合进更复杂的模型中

Y = net(torch.rand(4, 8))
Y.mean()  # 均值为0,可以说明正常(由于浮点数特性,无法严格为0)
tensor(2.3283e-09, grad_fn=<MeanBackward0>)

5.4.2 带参数的层

class MyLinear(nn.Module):  # 手动实现一波线性层
    def __init__(self, in_units, units):  # 输入数  输出数
        super().__init__()
        # 初始化权重和偏置
        self.weight = nn.Parameter(torch.randn(in_units, units))
        self.bias = nn.Parameter(torch.randn(units,))
    def forward(self, X):
        linear = torch.matmul(X, self.weight.data) + self.bias.data  # 进行矩阵运算
        return F.relu(linear)
    
linear = MyLinear(5, 3)
linear.weight, linear(torch.rand(2, 5))  # 测试正常
(Parameter containing:
 tensor([[ 0.1349, -1.0820, -0.8273],
         [-0.2127, -1.0748, -0.5577],
         [-0.9080,  0.5133, -0.4401],
         [-0.4881, -0.8850, -0.0289],
         [-0.0330, -1.4289, -0.6820]], requires_grad=True),
 tensor([[2.6406, 0.0000, 0.0000],
         [1.7090, 0.0000, 0.0000]]))
net = nn.Sequential(MyLinear(64, 8), MyLinear(8, 1))  # 可正常组合使用
net(torch.rand(2, 64))
tensor([[0.0000],
        [2.0065]])

练习

(1)设计一个接收输入并计算张量降维的层,它返回 \(y_k=\sum_{i,j}W_{ijk}x_ix_j\)。

class DimensionalityReductionTensors(nn.Module):
    def __init__(self, in_units):
        super().__init__()
        self.weight = nn.Parameter(torch.randn(in_units, in_units, in_units))  # 初始化权重
    def forward(self, X):
        y = torch.zeros_like(X)
        for k in range(0, X.shape[0]):
            for i in range(0, X.shape[0]):
                for j in range(0, X.shape[0]):
                    y[k] += self.weight[i][j][k] * X[i] * X[j]
        return y
    
layer = DimensionalityReductionTensors(3)
layer.weight, layer(torch.rand(3, 1))  # 测试正常
(Parameter containing:
 tensor([[[-0.3133,  0.6214,  0.6835],
          [-0.0720,  0.8630,  1.1317],
          [-0.5848, -0.9351, -0.5103]],
 
         [[ 0.2724,  0.3710, -0.6909],
          [ 1.1569,  0.8924, -0.2694],
          [-0.2803, -1.0708,  0.5445]],
 
         [[-0.4135,  1.2961, -0.2054],
          [-0.5572,  1.0026,  0.7997],
          [ 0.3076,  0.4108,  0.4654]]], requires_grad=True),
 tensor([[0.3252],
         [0.6745],
         [0.1474]], grad_fn=<CopySlices>))

(2)设计一个返回输入数据的傅里叶系数前半部分的层。

class FirstHalfFouriercoefficient(nn.Module):
    def __init__(self):
        super().__init__()
    def forward(self, X):
        FFT = torch.fft.fft(X)
        return FFT[:, :round(X.shape[1]/2)]
    
layer = FirstHalfFouriercoefficient()
layer(torch.rand(3, 7))  # 测试正常
tensor([[ 3.9421+0.0000j, -0.2037+0.1165j, -0.6413-1.0152j, -0.4512-0.3608j],
        [ 3.5853+0.0000j, -0.4951-0.8863j, -0.0675+0.4883j,  0.6614+0.0268j],
        [ 4.0120+0.0000j,  0.9124+0.1392j, -0.5101+0.0387j,  0.9813+0.3515j]])

标签:__,5.4,nn,自定义,self,torch,0.0000,Pytorch,units
From: https://www.cnblogs.com/AncilunKiang/p/17700585.html

相关文章

  • ODPS/MaxComputer 自定义UDF、UDTF函数
    ODPS/MaxComputer自定义UDF、UDTF函数前置条件:创建Maven工程导入jar包和打包工具:<dependency><groupId>com.aliyun.odps</groupId><artifactId>odps-sdk-udf</artifactId><version>0.29.10-public</ver......
  • 自定义镜像-镜像结构
       ......
  • Eclipse自定义右键New菜单
    定制new菜单,点Window–>CustomizePerspective:选择new菜单所显示的快捷菜单......
  • 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(3)--自定义用
    在我们创建界面元素的时候,不管在Vue3+ElementPlus的前端上,还是Winform桌面端上,都是会利用自定义用户控件来快速重用一些自定义的界面内容,对自定义用户控件的封装处理,也是我们开发WPF应用需要熟悉的一环。本篇随笔继续深入介绍介绍基于CommunityToolkit.Mvvm和HandyControl的WPF应......
  • TensorFlow PyTorch Transformer --GPT
    你是机器学习专家,请为我解答如下疑问:tensorflow,pytorch分别是什么?他们跟numpy的区别是什么?什么是深度学习,深度学习框架中的框架指的是什么?什么是机器学习,什么是transformer?transformer和tensorflow,pytorch的关系是什么?ChatGPTTensorFlow和PyTorchTensorFlow:这是一个由......
  • 基于自定义表编写认证类、django-jwt源码分析、权限介绍、simpleui的使用
    基于自定义表编写认证类补充:翻译函数只要做了国际化,就会显示当前国家的语言fromdjango.utils.translationimportgettext_lazyas_msg=_('Signaturehasexpired.')#_是个函数的别名,这个函数是翻译函数,只要做了国际化,它就是中文认证类fromrest_framework_jwt......
  • 基于自定义表编写认证类、django-jwt源码分析、权限介绍
    一、基于自定义表编写认证类认证类:auth.py:#写一个类继承BaseAuthentication,重写authenticate方法fromrest_framework.authenticationimportBaseAuthenticationfromrest_framework_jwt.authenticationimportJSONWebTokenAuthenticationfromrest_framework.exception......
  • 04 自定义注解
    packageannotate;importjava.lang.annotation.*;importstaticjava.lang.annotation.ElementType.*;importstaticjava.lang.annotation.RetentionPolicy.RUNTIME;@myAnnotate(age=18)publicclassTest03{@myAnnotate1(20)//当参数只有一个时,value可以不......
  • PytorchGPU版本环境配置。Anconda + Pycharm。
    2023年9月12日深度学习课程是基于Pytorch框架有的没的因为之前瞎搞,环境乱七八糟,这次DL课程最好装上GPU版本,那么就通过这次一次性弄个好吧!绝对不是因为,我之前不会弄。(是这样的)课程需要配置好环境。最后经过一段时间的瞎搞乱搞的调整,Pytorch-GPU版本成功安装好了。我是根据B......
  • 使用EasyExcel实现无模板、全自定义Excel导出
    1需求背景最近公司需要做一个动态字段的Excel导出,大致的样式如下:实体类如下://部门实体类publicclassDepartment{privateStringcompanyName;privateStringname;privateStringfullName;privateStringleaderName;privateStringbusiness;......