




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第Pytorch实现简单自定义网络层的方法目录前言一、不带参数的层二、带参数的层三、总结四、参考附:pytorch获取网络的层数和每层的名字
前言
Pytorch、Tensoflow等许多深度学习框架集成了大量常见的网络层,为我们搭建神经网络提供了诸多便利。但在实际工作中,因为项目要求、研究需要或者发论文需要等等,大家一般都会需要自己发明一个现在在深度学习框架中还不存在的层。在这些情况下,就必须构建自定义层。
博主在学习了沐神的动手学深度学习这本书之后,学到了许多东西。这里记录一下书中基于Pytorch实现简单自定义网络层的方法,仅供参考。
一、不带参数的层
首先,我们构造一个没有任何参数的自定义层,要构建它,只需继承基础层类并实现前向传播功能。
importtorch
importtorch.nn.functionalasF
fromtorchimportnn
classCenteredLayer(nn.Module):
def__init__(self):
super().__init__()
defforward(self,X):
returnX-X.mean()
输入一些数据,验证一下网络是否能正常工作:
layer=CenteredLayer()
print(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))
print(Y.mean())#因为模型参数较多,输出也较多,所以这里输出Y的均值,验证模型可运行即可
结果如下:
tensor(-5.5879e-09,grad_fn=MeanBackward0)
二、带参数的层
这里使用内置函数来创建参数,这些函数可以提供一些基本的管理功能,使用更加方便。
这里实现了一个简单的自定义的全连接层,大家可根据需要自行修改即可。
classMyLinear(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,))
defforward(self,X):
linear=torch.matmul(X,self.weight.data)+self.bias.data
returnF.relu(linear)
接下来实例化类并访问其模型参数:
linear=MyLinear(5,3)
print(linear.weight)
结果如下:
Parametercontaining:
tensor([[-0.3708,1.2196,1.3658],
[0.4914,-0.2487,-0.9602],
[1.8458,0.3016,-0.3956],
[0.0616,-0.3942,1.6172],
[0.7839,0.6693,-0.8890]],requires_grad=True)
而后输入一些数据,查看模型输出结果:
print(linear(torch.rand(2,5)))
#结果如下
tensor([[1.2394,0.0000,0.0000],
[1.3514,0.0968,0.6667]])
我们还可以使用自定义层构建模型,使用方法与使用内置的全连接层相同。
net=nn.Sequential(MyLinear(64,8),MyLinear(8,1))
print(net(torch.rand(2,64)))
#结果如下
tensor([[4.1416],
[0.2567]])
三、总结
我们可以通过基本层类设计自定义层。这允许我们定义灵活的新层,其行为与深度学习框架中的任何现有层不同。
在自定义层定义完成后,我们就可以在任意环境和网络架构中调用该自定义层。
层可以有局部参数,这些参数可以通过内置函数创建。
四、参考
《动手学深度学习》动手学深度学习2.0.0-beta0documentation
https://zh-v2.d2l.ai/
附:pytorch获取网络的层数和每层的名字
#创建自己的网络
importmodels
model=models.__dict__["resnet50"](pretrained=True)
forindex,(name,param)inenumerate(d_parameters()):
print(str(index)+""+name)
结果如下:
0conv1.weight
1bn1.weight
2bn1.bias
3layer1.0.conv1.weight
4layer1.0.bn1.we
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 合同代替就业协议书
- 苹果合同协议书
- 劳动雇佣合同协议书范本
- 专利授权合同协议书
- 租赁教会合同协议书
- 柑桔购销合同协议书范本
- 篮球互租合同协议书
- 林地承包合同终止协议书
- 活体合同协议书
- 股份合同协议书 三人
- 合同到期协议书(3篇)
- IPC-A-610国际标准中英文对照(doc 17)
- 山大《毛泽东思想和中国特色社会主义理论体系概论》教案第3章 社会主义改造理论
- 上海市高考语文备考之名著阅读《红楼梦》分章回练习:第六回(无答案)
- 最新中建CI报价单-2013.
- 部编版四年级下册语文全一册期末总复习—重点归纳整理
- (国开)2019年春电大本科水利水电工程造价管理形考3答案
- 指尖血糖监测
- 金普新区预防性体检人员审核表
- 矿山地质环境保护与治理恢复方案编制规范2011
- +770甩车场设计
评论
0/150
提交评论