当前位置: 首页 > news >正文

pytorch网络模型构建中的注意点

记录使用pytorch构建网络模型过程遇到的点

1. 网络模型构建中的问题

1.1 输入变量是Tensor张量

各个模块和网络模型的输入, 一定要是tensor 张量;

可以用一个列表存放多个张量。
如果是张量维度不够,需要升维度,
可以先使用 torch.unsqueeze(dim = expected)
然后再使用torch.cat(dim ) 进行拼接;

  • 需要传递梯度的数据,禁止使用numpy, 也禁止先使用numpy,然后再转换成张量的这种情况出现;

这是因为pytorch的机制是只有是 Tensor 张量的类型,才会有梯度等属性值,如果是numpy这些类别,这些变量并会丢失其梯度值。

1.2 __init__() 方法使用

class ex:def __init__(self):pass

__init__方法必须接受至少一个参数即self,

Python中,self是指向该对象本身的一个引用

通过在类的内部使用self变量,

类中的方法可以访问自己的成员变量,简单来说,self.varname的意义为”访问该对象的varname属性“

当然,__init__()中可以封装任意的程序逻辑,这是允许的,init()方法还接受任意多个其他参数,允许在初始化时提供一些数据,例如,对于刚刚的worker类,可以这样写:

class worker:def __init__(self,name,pay):self.name=nameself.pay=pay

这样,在创建worker类的对象时,必须提供name和pay两个参数:

b=worker('Jim',5000)

Python会自动调用worker.init()方法,并传递参数。

细节参考这里init方法

1.3 内置函数 setattr()

此时,可以使用python自带的内置函数 setattr(), 和对应的getattr()

setattr(object, name, value)

object – 对象。
name – 字符串,对象属性。
value – 属性值。

对已存在的属性进行赋值:
>>>class A(object):
...     bar = 1
... 
>>> a = A()
>>> getattr(a, 'bar')          # 获取属性 bar 值
1
>>> setattr(a, 'bar', 5)       # 设置属性 bar 值
>>> a.bar
5如果属性不存在会创建一个新的对象属性,并对属性赋值:>>>class A():
...     name = "runoob"
... 
>>> a = A()
>>> setattr(a, "age", 28)
>>> print(a.age)
28
>>>

setattr() 语法

setattr(object, name, value)

object – 对象。
name – 字符串,对象属性。
value – 属性值。

1.4 网络模型的构建

注意到, 在python的 __init__() 函数中, self 本身就是该类的对象的一个引用,即self是指向该对象本身的一个引用

利用上述这一点,当在神经网络中,

  • 需要给多个属性进行实例化时,
  • 且这多个属性使用的是同一个类进行实例化.

1.4.1 使用 setattr(self, string, object1) 添加属性;

注意到,下面这种方式,由于
Basic_slide_conv() 只经过了一次实例化, 
所以在内存空间中,只会分配一个地址空间给该对象;

虽然后面使用 35 group,  
但这35组本质上使用的同一个对象,即conv_block 该对象;

class Temporal_GroupTrans(nn.Module):def __init__(self,   num_classes=10,num_groups=35, drop_prob=0.5, pretrained= True):super(Temporal_GroupTrans, self).__init__()conv_block = Basic_slide_conv()for i in range( num_groups):setattr(self, "group" + str(i), conv_block)# 自定义transformer模型的初始化, CustomTransformerModel() 在该类中传入初始化模型的参数,# nip:512 输入序列中,每个列向量的编码维度, 16: 注意力头的个数# 600: 中间mlp 隐藏层的维数,  6: 堆叠transforEncode 编码模块的个数;self.trans_model = CustomTransformerModel(512,16,600, 6,droupout=0.5,nclass=4)

如果想要分配35个不同的对象, 即需要分配出35个不同的地址空间用来存储,
那么需要将 Basic_slide_conv() 经过了35次实例化, 
所以需要将 类Basic_slide_conv()  实例化的过程放在循环当中实现;

class Temporal_GroupTrans(nn.Module):def __init__(self,   num_classes=10,num_groups=35, drop_prob=0.5, pretrained= True):super(Temporal_GroupTrans, self).__init__()# conv_block = Basic_slide_conv()for i in range( num_groups):setattr(self, "group" + str(i), Basil_slide_conv() )# 自定义transformer模型的初始化, CustomTransformerModel() 在该类中传入初始化模型的参数,# nip:512 输入序列中,每个列向量的编码维度, 16: 注意力头的个数# 600: 中间mlp 隐藏层的维数,  6: 堆叠transforEncode 编码模块的个数;self.trans_model = CustomTransformerModel(512,16,600, 6,droupout=0.5,nclass=4)

1.4.2 使用 getattr(self, string, object1) 获取属性;

        trans_input_sequence = []for i in range(0, num_groups, ):#   每组语谱图的大小是一个 (bt, ch,96,12)的矩阵,组与组之间没有重叠;cur_group = x[:, :, :, 12 * i:12 * (i + 1)]# VARIABLE_fun = "self.group"   # 每一组,与之对应的卷积模块;# cur_fun = eval(VARIABLE_fun + str(i ))cur_fun = getattr(self, 'group'+str(i))cur_group_out = cur_fun(cur_group).unsqueeze(dim=1)  # [bt,1, 512]trans_input_sequence.append(cur_group_out)

相关文章:

pytorch网络模型构建中的注意点

记录使用pytorch构建网络模型过程遇到的点 1. 网络模型构建中的问题 1.1 输入变量是Tensor张量 各个模块和网络模型的输入, 一定要是tensor 张量; 可以用一个列表存放多个张量。 如果是张量维度不够,需要升维度, 可以先使用 …...

面试时候这样介绍redis,redis经典面试题

为什么要用redis做缓存 使用Redis缓存有以下几个优点: 1. 提高系统性能:缓存可以将数据存储在内存中,加快数据的访问速度,减少对数据库的读写次数,从而提高系统的性能。 2. 减轻后端压力:使用缓存可以减…...

机械学习 - scikit-learn - 数据预处理 - 2

目录关于 scikit-learn 实现规范化的方法详解一、fit_transform 方法1. 最大最小归一化手动化与自动化代码对比演示 1:2. 均值归一化手动化代码演示:3. 小数定标归一化手动化代码演示:4. 零-均值标准化(均值移除)手动与自动化代码演示&#x…...

华为OD机试题 - 最长连续交替方波信号(JavaScript)| 机考必刷

更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 华为OD机试题 最近更新的博客使用说明本篇题解:最长连续交替方波信号题目输入输出示例一输入输出Code解题思路版…...

executor行为相关Spark sql参数源码分析

0、前言 参数名和默认值spark.default.parallelismDefault number of partitions in RDDsspark.executor.cores1 in YARN mode 一般默认值spark.files.maxPartitionBytes134217728(128M)spark.files.openCostInBytes4194304 (4 MiB)spark.hadoop.mapreduce.fileoutputcommitte…...

双通道5.2GSPS(或单通道10.4GSPS)射频采样FMC+模块

概述 FMC140是一款具有缓冲模拟输入的低功耗、12位、双通道(5.2GSPS/通道)、单通道10.4GSPS、射频采样ADC模块,该板卡为FMC标准,符合VITA57.1规范,该模块可以作为一个理想的IO单元耦合至FPGA前端,8通道的JE…...

理解java反射

是什么Java反射是Java编程语言的一个功能,它允许程序在运行时(而不是编译时)检查、访问和修改类、对象和方法的属性和行为。使用反射创建对象相比直接创建对象有什么优点使用反射创建对象相比直接创建对象的主要优点是灵活性和可扩展性。当我…...

EasyRcovery16免费的电脑照片数据恢复软件

电脑作为一种重要的数据储存设备,其中保存着大量的文档,邮件,视频,音频和照片。那么,如果电脑照片被删除了怎么办?今天小编给大家介绍,误删除的照片从哪里可以找回来,误删除的照片如…...

若依微服务版在定时任务里面跨模块调用服务

第一步 在被调用的模块中添加代理 RemoteTaskFallbackFactory.java: package com.ruoyi.rpa.api.factory;import com.ruoyi.common.core.domain.R; import com.ruoyi.rpa.api.RemoteTaskService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springf…...

SpringMVC简单配置

1、pom.xml配置 <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.1.12.RELEASE</version></dependency></dependencies><build><…...

xcat快速入门工作流程指南

目录一、快速入门指南一、先决条件二、准备管理节点xcatmn.mydomain.com三、第1阶段&#xff1a;添加你的第一个节点并且用带外BMC接口控制它四、第 2 阶段 预配节点并使用并行 shell 对其进行管理二&#xff1a;工作流程指南1. 查找 xCAT 管理节点的服务器2. 在所选服务器上安…...

C++回顾(十九)—— 容器string

19.1 string概述 1、string是STL的字符串类型&#xff0c;通常用来表示字符串。而在使用string之前&#xff0c;字符串通常是 用char * 表示的。string 与char * 都可以用来表示字符串&#xff0c;那么二者有什么区别呢。 2、string和 char * 的比较 &#xff08;1&#xff09…...

Hadoop入门

数据分析与企业数据分析方向 数据是什么 数据是指对可观事件进行记录并可以鉴别的符号&#xff0c;是对客观事物的性质、状态以及相互关系等进行记载的物理符号或这些物理符号的组合&#xff0c;它是可以识别的、抽象的符号。 他不仅指狭义上的数字&#xff0c;还可以是具有一…...

高校如何通过校企合作/实验室建设来提高大数据人工智能学生就业质量

高校人才培养应该如何结合市场需求进行相关专业设置和就业引导&#xff0c;一直是高校就业工作的讨论热点。亘古不变的原则是&#xff0c;高校设置不能脱离市场需求太远&#xff0c;最佳的结合方式是&#xff0c;高校具有前瞻性&#xff0c;能领先市场一步&#xff0c;培养未来…...

提升学习 Prompt 总结

NLP现有的四个阶段&#xff1a; 完全有监督机器学习完全有监督深度学习预训练&#xff1a;预训练 -> 微调 -> 预测提示学习&#xff1a;预训练 -> 提示 -> 预测 阶段1&#xff0c;word的本质是特征&#xff0c;即特征的选取、衍生、侧重上的针对性工程。 阶段2&…...

JavaScript学习笔记(2.0)

BOM--&#xff08;browser object model&#xff09; 获取浏览器窗口尺寸 获取可视窗口高度&#xff1a;window.innerWidth 获取可视窗口高度:window.innerHeight 浏览器弹出层 提示框&#xff1a;window.alert(提示信息) 询问框&#xff1a;window.confirm(提示信息) 输…...

直击2023云南移动生态合作伙伴大会,聚焦云南移动的“价值裂变”

作者 | 曾响铃 文 | 响铃说 2023年3月2日下午&#xff0c;云南移动生态合作伙伴大会在昆明召开。云南移动党委书记&#xff0c;总经理葛松海在大会上提到“2023年&#xff0c;云南移动将重点在‘做大平台及生态级新产品&#xff0c;做优渠道转型新动能&#xff0c;做强合作新…...

STM32F1开发实例-振动传感器(机械)

振动(敲击)传感器 振动无处不在&#xff0c;有声音就有振动&#xff0c;哒哒的脚步是匆匆的过客&#xff0c;沙沙的夜雨是暗夜的忧伤。那你知道理科工程男是如何理解振动的吗&#xff1f;今天我们就来讲一讲本节的主角&#xff1a;最简单的机械式振动传感器。 下图即为振动传…...

2023最新ELK日志平台(elasticsearch+logstash+kibana)搭建

去年公司由于不断发展&#xff0c;内部自研系统越来越多&#xff0c;所以后来搭建了一个日志收集平台&#xff0c;并将日志收集功能以二方包形式引入自研系统&#xff0c;避免每个自研系统都要建立一套自己的日志模块&#xff0c;节约了开发时间&#xff0c;管理起来也更加容易…...

2023-3-10 刷题情况

打家劫舍 IV 题目描述 沿街有一排连续的房屋。每间房屋内都藏有一定的现金。现在有一位小偷计划从这些房屋中窃取现金。 由于相邻的房屋装有相互连通的防盗系统&#xff0c;所以小偷 不会窃取相邻的房屋 。 小偷的 窃取能力 定义为他在窃取过程中能从单间房屋中窃取的 最大…...

如何建立一个成功的MES?

制造执行系统&#xff08;MES&#xff09;是一种为制造业企业提供实时生产过程控制、管理和监视的信息系统。一个成功的MES系统可以帮助企业提高生产效率&#xff0c;降低成本&#xff0c;提高产品质量&#xff0c;提高客户满意度等。下面是一些关键步骤来建立一个成功的MES系统…...

Kafka生产者幂等性/事务

Kafka生产者幂等性/事务幂等性事务Kafka 消息交付可靠性保障&#xff1a; Kafka 默认是&#xff1a;至少一次最多一次 (at most once) : 消息可能会丢失&#xff0c;但绝不会被重复发送至少一次 (at least once) : 消息不会丢失&#xff0c;但有可能被重复发送精确一次 (exact…...

JavaWeb--案例(Axios+JSON)

JavaWeb--案例&#xff08;AxiosJSON&#xff09;1 需求2 查询所有功能2.1 环境准备2.2 后端实现2.3 前端实现2.4 测试3 添加品牌功能3.1 后端实现3.2 前端实现3.3 测试1 需求 使用Axios JSON 完成品牌列表数据查询和添加。页面效果还是下图所示&#xff1a; 2 查询所有功能 …...

css制作动画(动效的序列帧图)

相信 animation 大家都用过很多&#xff0c;知道是 CSS3做动画用的。而我自己就只会在 X/Y轴 上做位移旋转&#xff0c;使用 animation-timing-function 规定动画的速度曲线&#xff0c;常用到的 贝塞尔曲线。但是这些动画效果都是连续性的。 今天发现个新功能 animation-timi…...

【设计模式】装饰器模式

装饰器模式 以生活中的场景来举例&#xff0c;一个蛋糕胚&#xff0c;给它涂上奶油就变成了奶油蛋糕&#xff0c;再加上巧克力和草莓&#xff0c;它就变成了巧克力草莓蛋糕。 像这样在不改变原有对象的基础之上&#xff0c;将功能附加到原始对象上的设计模式就称为装饰模式(D…...

Nginx配置实例-反向代理案例一

实现效果&#xff1a;使用nginx反向代理&#xff0c;访问 www.suke.com 直接跳转到本机地址127.0.0.1:8080 一、准备工作 Centos7 安装 Nginxhttps://liush.blog.csdn.net/article/details/125027693 1. 启动一个 tomcat Centos7安装JDK1.8https://liush.blog.csdn.net/arti…...

Java中IO流中字节流(FileInputStream(read、close)、FileOutputStream(write、close、换行写、续写))

IO流&#xff1a;存储和读取数据的解决方案 纯文本文件&#xff1a;Windows自带的记事本打开能读懂 IO流体系&#xff1a; FileInputStream&#xff1a;操作本地文件的字节输入流&#xff0c;可以把本地文件中的数据读取到程序中来 书写步骤&#xff1a;①创建字节输入流对象 …...

C#完全掌握控件之-combbox

无论是QT还是VC&#xff0c;这些可视化编程的工具&#xff0c;掌握好控件的用法是第一步&#xff0c;C#的控件也不例外&#xff0c;尤其这些常用的控件。常见控件中较难的往往是这些与数据源打交道的&#xff0c;比如CombBox、ListBox、ListView、TreeView、DataGridView. 文章…...

STL的空间配置器(allocator)

简答&#xff1a; 在CSTL中&#xff0c;空间配置器便是用来实现内存空间(一般是内存&#xff0c;也可以是硬盘等空间)分配的工具&#xff0c;他与容器联系紧密&#xff0c;每一种容器的空间分配都是通过空间分配器alloctor实现的。 解析: 1.两种C类对象实例化方式的异同在c中&a…...

linux系统莫名其妙的环境变量问题

今天使用Ubuntu20.04系统&#xff0c;使用less命令查看日志&#xff0c;发现日志中的“中文”显示为乱码&#xff1b; 使用vim命令查看该日志文件也显示为乱码&#xff1b; 使用more命令查看该日志文件则显示正常。 首先查询系统的字符集编码&#xff0c;发现编码正常支持中…...

phpstudy做网站/广州网站推广软件

摘要&#xff1a;本报告主要介绍卡尔曼滤波器的基本概念和其在时间序列和金融交易中的应用&#xff0c;同时也总结了它在R中实现的相关程序包。 1 概念介绍 由R.E. Kalman在1960年提出的卡尔曼滤波器(Kalman filter)最早是用来解决工程学中的系统控制问题。随时间变化的系统被…...

建筑人才网 中高端招聘网站/全网整合营销公司

基于SSH的长途汽车票务售票系统的设计(Struts2,MySQL)(含录像)(毕业论文说明书14000字,程序代码,MySQL数据库)摘 要随着科学技术的不断提高&#xff0c;计算机科学日渐成熟&#xff0c;其强大的功能已为人们深刻认识&#xff0c;它已进入人类社会的各个领域并发挥着越来越重要…...

上海网站制作策/四种营销模式

测试的缘由很早就接触了script标签中的defer和async这两个属性&#xff0c;当时也仅限知道他们的作用是起到延迟脚本而达到避免阻塞脚本的作用。当时并未对这两个属性进行深入的研究&#xff0c;直到我学习seajs和RequireJS这两个模块加载器中或多或少涉及了这两标签的使用。se…...

企业门户网站的主要论点及写作体会怎么写/全网推广的方式有哪些

本文翻译自&#xff1a;What is the (function() { } )() construct in JavaScript?I used to know what this meant, but Im struggling now... 我曾经知道这意味着什么&#xff0c;但是现在我正在努力... Is this basically saying document.onload ? 这基本上是在说docum…...

商城网站建设目标/广告代发平台

不要去想回溯的过程&#xff0c;你只需要知道&#xff0c;[1,2,3,4],k2为例子&#xff0c;当前数字为1时&#xff0c;访问完[1,2]后&#xff0c;此时的长度k,需要把2去掉&#xff0c;然后再访问[1,3]&#xff0c;凡事类似这种情况&#xff0c;那就是回溯。直接套模板就行。什么…...

网站上图怎么用ps做/管理人员需要培训哪些课程

每个大于等于16的偶数都是2个奇素数之和崔 坤E-mail: cuikun126ck126.com摘要&#xff1a;[1]可解析的最简真值公式&#xff1a;r2(N)C(N)2π(N)-N/2[2]素数定理&#xff1a;limπ(N)/N0N→∞[3]奇合数对个数密度定理&#xff1a;limC(N)/N1/2N→∞[4]r2(N^x)是增函数&#xff…...