第三章第四节 自定义层

深度学习的一个魅力在于神经网络中各式各样的层,例如全连接层和后面章节中将要介绍的卷积层、池化层与循环层。虽然Gluon提供了大量常用的层,但有时候我们依然希望自定义层。本节将 介绍如何使用NDArray来自定义一个Gluon的层,从而可以被重复调用。

3.4.1 不含模型参数的自定义层

我们先介绍如何定义一个不含模型参数的自定义层。事实上,这和“模型构造”一节中介绍的使用Block类构造模型类似。下面的CenteredLayer类通过继承Block类自定义了一个将输入减掉均值后输出的层,并将层的计算定义在了forward函数里。这个层里不含模型参数。

我们可以实例化这个层,然后做前向计算。

我们也可以用它来构造更复杂的模型。

下面打印自定义层各个输出的均值。因为均值是浮点数,所以它的值是一个很接近0的数。

3.4.2 含模型参数的自定义层

我们还可以自定义含模型参数的自定义层。其中的模型参数可以通过训练学出。

“模型参数的访问、初始化和共享”一节分别介绍了Parmeter类和ParameterDict类。在自定义含模型参数的层时,我们可以利用Block类自带的ParameterDict类型的成员变量params。他是一个有字符串类型的参数名字映射到Parameter类型的模型参数的字典。我们可以通过get函数从ParameterDict创建Parameter实例。

现在我们尝试实现一个含权重参数和偏差参数的全连接层。它使用ReLU函数作为激活函数。其中in_units和units分别代表输入个数和输出个数。

下面,我们实例化MyDense类并访问它的模型参数。

我们可以直接使用自定义层做前向计算。

我么也可以使用自定义层构造模型。它和Gluon的其他层在使用上很类似。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值