pytorch 网络初始化,用pytorch搭建三层神经网络

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: