首页 > 编程知识 正文

pytorch是啥,pytorch恒等激活函数

时间:2023-05-03 07:56:11 阅读:175060 作者:2616

4.1.2激活函数

PyTorch实现了常见的激活函数,其具体接口信息见官方文档1。 这些激活函数可以作为独立的层使用。 这里介绍最常见的激活函数ReLU。 公式如下。

代码:

relu=nn.relu(inplace=true ) input=t.randn ) 2,3 ) print ) input ) output=relu ) input ) prinput ) #未等于0

tensor ([ 1.2836,2.0970,-0.0456],

[ 1.5909,- 1.3795,0.5264 ] )

tensor ([ 1.2836,2.0970,0.0000 ],

[ 1.5909,0.0000,0.5264 ] )

ReLU函数具有inplace参数,如果设置为True,则输出将直接复盖输入,从而节省内存/图形内存。 这是因为在计算ReLU的反向传播时,可以根据输出估计反向传播的梯度。 但是,只有少数autograd操作支持inplace操作,如tensor.sigmoid_ ()。 通常不要使用inplace操作,除非您清楚知道自己在做什么。

以上例子中,基本上各层的输出原样作为下一层的输入,将这种网络称为前馈传播网络。 虽然每次为这样的网络编写复杂的forward函数有点麻烦,但是这里有两种简化方法: ModuleList和Sequential。 其中,Sequential是一个特殊的模型,包含几个子模型,向前传播时输入会一个接一个地传递。 ModuleList也是一种特殊的module,可以包含若干个子module,可以像使用list一样使用,但不能直接将输入传递到ModuleList。 让我举例说明一下。

代码:

# Sequential的三种写法net1=nn.Sequential () net1.add _ module (conv )、nn.conv2d ) 3、3、3 ) ) net1.add_module nn.ReLU ) ) net2=nn.sequential ) nn.conv2d nn.ReLU () ) fromcollectionsimportorderedddictnet3=nn.sequential (orded ) 3 nn.ReLU () ) ) )、net1: )、net1 ) print )、net2) print )、net3: )、net3)的输出:

net 1:序列(

(conv ) : conv 2d (3,3,Kernel_size=) 3,3 ),stride=(1,1 ) )

(batchnorm ) :batchnorm2d(3,eps=1e-05,momentum=0.1,affine=True,track_running_stats=True )

(activation_layer ) : ReLU ) ) ) ) )。

net2: Sequential (

(0) 3360conv2d ) 3,3,kernel _ size=(3,3 ),stride=(1,1 ) )

)1) :batchnorm2d(3,eps=1e-05,momentum=0.1,affine=True,track_running_stats=True ) ) ) ) )。

((2) : ReLU ) ) ) )。

net3: Sequential (

(conv1 ) : conv 2d (3,3,Kernel_size=) 3,3 ),stride=(1,1 ) )

(bn1 ) :batchnorm2d(3,eps=1e-05,momentum=0.1,affine=True,track_running_stats=True ) ) )。

(relu1) : ReLU ) )

可以从#名称或序列号中取出子模型,

代码:

可以通过名称或序列号检索#子modulenet1.conv、net2[0]、net3.conv1的输出。

(conv2d (3,3,Kernel_size=) 3,3 ),stride=(1,1 ) ),

conv 2d (3,3,Kernel_size=) 3,3 ),stride=(1,1 ) ),

conv 2d (3,3,kernel _ size=(3,3 ),stride=(1,1 ) )

代码:

input=t.rand (1,3,4, 4 ) output1=net1(input ) output2=net2) input ) output3=net3 ) input ) output4=net3.relu1) net1.batchnorm ) net

output1tensor ([ 0.4223,0.0000 ],

[ 0.0000,1.4133 ],

[ 0.0000,0.0343 ],

[ 0.8903,0.7163 ],

[ 0.9817,0.0000 ],

[ 0.7821,0.0000 ],grad_fn=ReluBackward0)

output2tensor ([ 0.0000,0.5348 ],

[ 1.0742,0.0000 ],

[ 1.2695,0.0000 ],

[ 0.0000,0.3837 ],

[ 0.0000,0.0000 ],

[ 1.6453,0.0000 ],grad_fn=ReluBackward0)

output3tensor ([ 0.1690,0.7540 ],

[ 0.0000,0.7581 ],

[ 1.6805,0.0000 ],

[ 0.0000,0.0000 ],

[ 0.2216,0.5082 ],

[ 0.9433,0.0000 ],grad_fn=ReluBackward0)

output4tensor ([ 0.4223,0.0000 ],

[ 0.0000,1.4133 ],

[ 0.0000,0.0343 ],

[ 0.8903,0.7163 ],

[ 0.9817,0.0000 ],

[ 0.7821,0.0000 ],grad_fn=ReluBackward0)

ModuleList是Module的子类,代码:

modellist=nn.module list ([ nn.linear (3,4 ),nn.ReLU ),nn.linear) ] ) input=t.randn ),1,3 )

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。