PaddlePaddle网络参数如何固定初始化
收藏
搭建和训练神经网络时,一般会随机初始化网络中各层的参数,然后再在训练数据中学习更新。
但是,在如小样本学习等任务中,一些方法规定了网络参数不能随机初始化。那么如何使用特征数据去初始化网络中的参数呢?
答案是在初始化参数时候,将paddle.nn.initializer.Assign()赋值给default_initializer参数,具体如下:
# -*- coding: utf-8 -*- # @Time : 2021/12/5 12:58 # @Author : He Ruizhi # @File : case.py # @Software: PyCharm import paddle import numpy as np class MyNet(paddle.nn.Layer): def __init__(self): super(MyNet, self).__init__() parameter_matrix = np.array([[1, 2], [3, 4], [5, 6]], dtype='float32') w = self.create_parameter(shape=list(parameter_matrix.shape), default_initializer=paddle.nn.initializer.Assign(parameter_matrix)) b = self.create_parameter(shape=[parameter_matrix.shape[-1]], is_bias=True) self.add_parameter('w', w) self.add_parameter('b', b) def forward(self, x): return paddle.matmul(x, self.w) + self.b if __name__ == "__main__": model = MyNet() paddle.summary(model, input_size=(None, 3)) # 网络中参数的值 for parameter in model.parameters(): print(parameter.numpy())
通过打印输出可以看到,网络中的参数已经被指定初始化为特定的参数,而不是随机初始化的:
--------------------------------------------------------------------------- Layer (type) Input Shape Output Shape Param # =========================================================================== MyNet-1 [[1, 3]] [1, 2] 8 =========================================================================== Total params: 8 Trainable params: 8 Non-trainable params: 0 --------------------------------------------------------------------------- Input size (MB): 0.00 Forward/backward pass size (MB): 0.00 Params size (MB): 0.00 Estimated Total Size (MB): 0.00 --------------------------------------------------------------------------- [[1. 2.] [3. 4.] [5. 6.]] [0. 0.]
DeepGeGe
已解决
2#
回复于2021-12
除了上述方法,也可以使用另一个低级别的API:paddle.static.create_parameter(shape, dtype, name=None, attr=None, is_bias=False, default_initializer=None)
0
收藏
请登录后评论
除了上述方法,也可以使用另一个低级别的API:paddle.static.create_parameter(shape, dtype, name=None, attr=None, is_bias=False, default_initializer=None)
那么如何使用特征数据去初始化网络中的参数呢?
这句话中的【特征数据】为【特定数据】,打错了。