Conv2D是如何传递参数的?
收藏
文档 https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/nn/Conv2D_cn.html#shuxing中代码示例:
import paddle
import paddle.nn as nn
x_var = paddle.uniform((2, 4, 8, 8), dtype='float32', min=-1., max=1.)
conv = nn.Conv2D(4, 6, (3, 3))
y_var = conv(x_var)
y_np = y_var.numpy()
print(y_np.shape)
# (2, 6, 6, 6)
然而,Conv2D并没有规定输入参数(x_var),请问输入张量是如何传入Conv2D的?
0
收藏
请登录后评论
这个是通过 python 的 __call__ 实现的,给一个类添加了 __call__ 方法后,可以使实例能够像函数一样被调用,详情请参考python官方说明: https://docs.python.org/3/reference/datamodel.html ;在 paddle 框架中,nn.Conv2D 继承了 nn.Layer, nn.Layer 的 __call__ 实现可以参考: https://github.com/PaddlePaddle/Paddle/blob/release/2.1/python/paddle/fluid/dygraph/layers.py#L875 因此可以这样使用~
conv = nn.Conv2D(4, 6, (3, 3)),这是定义Layer的过程
y_var = conv(x_var),这是使用Layer的过程
这是paddle框架搭建网络的风格,其它的如BatchNorm等各种归一化层,各种激活层也是这样用的,看看组网的例程就好了