torch.autograd.Function
torch.autograd.Function用于自定义网络层,自定义前向传播和反向传播
使用到torch.autograd.Function是因为在无线通信中需要把网络输出的float32量化成bit或者星座点,pytorch没有提供任何函数满足要求,因此需要自定义该层。
Function和Module的差异 Function和Module都可以对Pytorch进行自定义拓展,使其满足网络的需求,但这两者还是有区别的:
Function一般只定义一个操作,因为其无法保存参数,因此适用于激活函数等操作,Module是保存了参数,因此适用于定义一层,如线性层,卷积层,也适用于定义一个网络;
Function需要定义三个方法:__init__,forward,backward(需要自己写求导公式)
Module只需定义__init__和forward,而backward的计算由自动求导机制构成
可以不严谨的认为,Module是由一系列Function组成,因此其在forward的过程中,Function和Variable组成了计算图,在backward时,只需调用Funct ...
Python的@staticmethod
Python中的@staticmethod方法总结一句话:不实例化类的情况下直接使用该方法
不需要约定的默认参数self。
静态方法就是类对外部函数的封装,有助于优化代码结构和提高程序的可读性。
class Person: def __init__(self,name): self.name=name print('调用者') def _name(self): print(self.name) @staticmethod def static_method(): print('调用静态方法!')if __name__ == '__main__': person = Person("buji") print("------这是name方法------") person._name() print("------这里调用静态方法------") pers ...
SEU2024年1月研究生英语考试
Academic Communication EnglishSemester contents TC(technical communication project)+IC(international conference)+Mooc
Final exam contents 50%+50%
Module 1: Technical Communication 单选、判断、改写
Module 2: International Conference 单选、判断、配对、翻译
User Manual(TC)
definition of Technical Communication
basic qualities of TC
user dont read, dont scroll, are easily lost, frustrated, strangely persistent, different
The best instruction is no instruction(intuitive and invisible)
A definition clarifies a d ...
路由器和猫
用户的手机、ipad、电脑使用蜂窝4G/5G无线移动网络,压根不需要什么路由器(Router)可以直接上无线接入网络,从而连接上互联网。电脑可能需要安装一个USB适配器(嵌入SIM卡)。这个USB适配器,其实就是一个4G/5G蜂窝网络的调制解调器(MODEM),MODEM是MOdulation(调制)DEModulation(解调制)的英文缩写,发音与猫近似,故调制解调器(Modem) = 猫。
为何电脑需要Modem?
Modem这个硬件适配器,集成了4G/5G网络的物理层(L1)/链路层(L2)的功能。可以与电脑上的TCP/IP(L3/L4)无缝对接,TCP/IP与安全加密TLS(L5)无缝对接,TLS与应用层http(L7)无缝对接,就形成了一个L7-L6-L5-L4-L3-L2-L1的数据包发送流水线(Send Packet),L1-L2-L3-L4-L5-L6-L7的数据包接收流水线(Receive Packet)。
没有这个硬件适配器,无法在物理层/链路层这两个 ...
极简模式
我们真正需要的东西并不多,而那些并不需要的东西不断侵占我们的空间和思想,反而会成为前进的负累。
方法极简工具极简「开学必备好物」「高效学习APP」「上岸文具分享」……打开小红书,搜索「学习好物」,一篇篇封面精美,标题醒目的攻略层出不穷。
把「考研上岸」「国奖第一」与万千精致的学习用品挂钩,为这些学习用品披上了光鲜亮丽的外衣,于是学生们争相购买,争相使用。
然而,对学习而言最重要的,应该是一个主动思考的大脑。为了向老师呈现掌握水平,所需要的也只是能将脑中所想转为可见内容的一支笔、一张纸。为了提高应试能力,最多再摆上一个控制时间的闹钟。
虽然goodnotes、notability、X mind功能强大、工具齐全,但仔细思考,很多纷繁复杂的功能是否自己真的需要?
虽然番茄时钟、forest等软件美观可爱、活泼有趣,但自己需要的究竟是「专注25分钟,休息5分钟」这样普通闹钟也能实现的科学规律,还是花里胡哨的软件以及可以借口拿到的手机。
太多的精致学习好物,不仅需要花费时间学习如何使用,还容易模糊了学习时的主要视线。
资料极简你有没有囤积学习资料的习惯?
辛辛苦苦到手了一套邻班老师发的秘密 ...
GNU&GCC编译器知识总结
很多时候,出现一些类似GNU、GCC、CLANG、LLVM等与编译器有关的名词的时候,我们都不太清楚它到底是干嘛的。但理解这些东西后,对于xcode中很多配置型的需求修改起来都会得心应手。因此,我们有必要了解透彻它们直接的关系与区别。
GNU 先来看看wiki百科上的官方说明:
“GNU,名称来自Gnu’s Not Unix”的缩写,一个类UNIX的操作系统,由GNU计划推动,目标在于创建一个完全兼容于UNIX的自由软件环境。”
由于当时UNIX系统是商业软件,是收费的,而且有一部分源码是没有开放的,所以在1983年,理查德·斯托曼提出GNU计划,希望发展出一套完整的开放源代码操作系统来取代Unix,计划中的操作系统,名为GNU。因此,GNU的出现的目的就是为了取代UNIX系统。但是操作系统是包括很多软件的,除了操作系统内核之外,还要有编辑器,编译器,shell等等一些软件来支持。
1989年,GNU项目中的其他部份,如编辑器、编译器、shell等都已经完成,独缺操作系统核心。1990年,自由软件基金会开始正式发展Hurd,作为GNU项目中的操作系统。注意:li ...
下载卡在99%?
下载最怕什么,那绝对是进度条:99%。这是一个充满魔力的数字,曾让我狂躁、焦虑,甚至激动得想砸键盘锤电脑扔手机。比如下载学习资料或看动作大片,苦苦等待2小时,好不容易下到99%,以为2秒后就能享受大片的美妙,步入极乐世界。结果半小时过去了,进度条死死卡在99%,任你千兆光纤,专线宽带,愣是一丝不动,稳如泰山。再去检查路由器,狂按重启键,发现网络一切正常,网页秒开,唯独进度条上的99%永恒不变。即使你重启电脑,重新打开下载软件,重新开始那99%的下载任务,它依旧还是99%,不增不减。你不禁开始疑惑:为什么进度条总要卡在99%?为什么最后1%永远加载不动?
技术原理导致 关于进度条99%的问题,得从它的诞生说起。
1896年,波兰经济学家Karol Adamiecki制作了一种名叫时间表的图,提出了早期的进度条概念,但是当时没有具体的应用。等到1979年,这哥们Mitchell Model在他的博士论文中提出了进度条。论文里他表示:进度条能在复杂的计算机环境中监视系统行为。说白了就是:进度条能直观展现电脑在做什么,做到哪种程度。
正因为进度条能用最简单的图案和数字,表 ...
无线AP
什么是无线AP 无线AP(Access Point)即无线接入点,它是用于无线网络的无线交换机,也是无线网络的核心。无线AP是移动计算机用户进入有线网络的接入点,主要用于宽带家庭、大楼内部以及园区内部,典型距离覆盖几十米至上百米,目前主要技术为802.11系列。大多数无线AP还带有接入点客户端模式(AP client),可以和其它AP进行无线连接,延展网络的覆盖范围。它不仅包含单纯性无线接入点(无线AP),也同样是无线路由器(含无线网关、无线网桥)等类设备的统称。它主要是提供无线工作站对有线局域网和从有线局域网对无线工作站的访问,在访问接入点覆盖范围内的无线工作站可以通过它进行相互通信。
无线AP的组成 无线AP的组成通常包括以下部分:
无线网卡:这是无线AP的重要组成部分,它可以通过无线方式连接到网络。
处理器:用于处理数据传输和处理其他任务。
内存:用于存储数据和运行程序。
天线:用于接收和发送无线信号。
网络接口:通常包括以太网接口或光纤接口,用于连接有线网络。
电源:用于提供电力。
有哪些不同的无线AP组成方式 无线AP的组成方式有多种,包括以下几种:
单一 ...
深度学习可复现相关设置
确定性设置随机种子设置 随机函数是最大的不确定性来源,包含了模型参数的随机初始化,样本的shuffle。
PyTorch 随机种子
python 随机种子
numpy 随机种子
# PyTorchimport torchtorch.manual_seed(0)# pythonimport randomrandom.seed(0)# Third part librariesimport numpy as npnp.random.seed(0)
CPU版本下,上述随机种子设置完成之后,基本就可实现实验的可复现了。
对于GPU版本,存在大量算法实现为不确定结果的算法,这种算法实现效率很高,但是每次返回的值会不完全一样。主要是由于浮点精度舍弃,不同浮点数以不同顺序相加,值可能会有很小的差异(小数点最末位)。
GPU算法确定性实现 GPU算法的不确定来源有两个
CUDA convolution benchmarking
nondeterministic algorithms
CUDA convolution benchmarking 是为了提升运行效率,对模型 ...
matplotlib局部放大
在数据可视化中,很多时候需要对某一区间的数据进行局部放大,以获得对比度更高的可视化效果。下面利用Python语言的Matplotlib库实现一个简单的局部放大图效果。
依赖:matplotlib和numpy
导入依赖库import numpy as npimport matplotlib.pyplot as pltfrom mpl_toolkits.axes_grid1.inset_locator import mark_insetfrom mpl_toolkits.axes_grid1.inset_locator import inset_axes
准备数据x = np.linspace(-0.1*np.pi, 2*np.pi, 30)y_1 = np.sinc(x)+0.7y_2 = np.tanh(x)y_3 = np.exp(-np.sinc(x))
绘图fig, ax = plt.subplots(1, 1, figsize=(6, 4))ax.plot(x, y_1, color='k', linestyle=':', lin ...