pytorch 网络初始化,用pytorch搭建三层神经网络
本文主要介绍Pytorch实现简单自定义网络层的相关信息。通过示例代码详细介绍,对您的学习或工作有一定的参考价值。有需要的朋友可以参考一下。
00-1010前言1、无参数层2、有参数层3、总结4、参考附件:pytorch获取网络层数和各层名称。
目录
很多深度学习框架,比如Pytorch和Tensoflow,集成了大量的常用网络层,为我们构建神经网络提供了很多便利。但是在实际工作中,因为项目要求、研究需要或者发论文的需要等等,大家一般都需要发明一个目前深度学习框架中不存在的层。在这些情况下,有必要构建一个自定义层。
博主们在学习了《动手深度学习沈木》这本书之后,收获颇丰。这里记录一下书中基于Pytorch实现简单自定义网络层的方法,仅供参考。
前言
首先,我们构建一个没有任何参数的自定义层。要构建它,只需要继承基本层类,实现正向传播功能即可。
进口火炬
导入torch.nn.functional as F
从火炬进口nn
类中心层(nn。模块):
def __init__(self):
超级()。__init__()
定义向前(自身,X):
返回X - X.mean()
输入一些数据以验证网络是否正常工作:
layer=CenteredLayer()
打印(图层(火炬。FloatTensor([1,2,3,4,5]))
输出结果如下:
张量([-2。 -1. 0. 1. 2.])
正常运行表示网络没有问题。
现在将我们自建的网络层作为一个组件合并到一个更复杂的模型中,输入数据进行验证:
net=nn。顺序(nn。线性(8,128),CenteredLayer())
Y=net(torch.rand(4,8))
Print(Y.mean()) #因为模型中有很多参数和输出,所以这里输出y的平均值来验证模型可以运行。
结果如下:
张量(-5.5879e-09,grad_fn=MeanBackward0)
一、不带参数的层
这里,内置函数用于创建参数。这些功能可以提供一些基本的管理功能,使用起来更加方便。
这里实现了一个简单的自定义全连接层,可以根据需要进行修改。
类MyLinear(nn。模块):
def __init__(self,in_units,units):
超级()。__init__()
自重=nn。参数(torch.randn(in_units,units))
self.bias=nn参数(torch.randn(单位,))
定义向前(自身,X):
linear=torch.matmul(X,self . weight . data)self . bias . data
返回F.relu(线性)
接下来实例化该类并访问其模型参数:
linear=MyLinear(5,3)
打印(线性.重量)
结果如下:
包含:的参数
张量([[-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)
然后输入一些数据,查看模型的输出结果:
打印(线性(torch.rand(2,5)))
#结果如下
张量([[1.2394,0.0000,0.0000],
[1.3514, 0.0968, 0.6667]])
我们也可以像内置全连接层一样,使用自定义层来构建模型。
net=nn。Sequential(MyLinear(64,8),MyLinear(8,1))
打印(net(torch.rand(2,64)))
#结果如下
张量([[4.1416],
[0.2567]])
二、带参数的层
我们可以通过基本图层类设计自定义图层。这允许我们定义灵活的新层,其行为不同于深度学习框架中的任何现有层。
自定义层定义好之后,我们可以在任何环境和网络架构下调用它。
层可以有局部参数,这些参数可以由内置函数创建。
三、总结
003010—动手深度学习2.0.0-beta0文档
https://zh-v2.d2l.ai/
四、参考
#创建自己的网络
导入模型
模特=模特。_ _ dict _ _[ resnet 50 ](pre trained=True)
对于索引,enumerate(model . named _ parameters())中的(name,param):
print(str(index) name)
结果如下:
0转换1 .重量
1 bn1 .重量
2 bn1 .偏差
3层1.0.conv1.weight
4层1.0.bn1 .重量
5层1.0.bn1 .偏差
6层1.0.conv2.weight
7层1.0.bn2 .重量
8层1.0.bn2 .偏差
9层1.0 .转换3 .重量
关于Pytorch实现简单自定义网络层的文章到此结束。有关Pytorch自定义网络层的更多信息,请搜索热门IT软件开发工作室之前的文章或继续浏览下面的相关文章。希望大家以后多多支持热门IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。