CNN怎么自定义卷积核初始值?
收藏
快速回复
AI Studio平台使用 问答算力相关 3809 17
CNN怎么自定义卷积核初始值?
收藏
快速回复
AI Studio平台使用 问答算力相关 3809 17

paddle的卷积神经网络把卷积核的初始值封装了,我想自定义卷积核的初始值怎么办?

0
收藏
回复
全部评论(17)
时间顺序
水水水的老师
#2 回复于2020-03

normal

0
回复
水水水的老师
#3 回复于2020-03

只能定义随机方式  不能指定值

0
回复
AIStudio810258
#4 回复于2020-03

可以试试给层得w权值赋值。

0
回复
AIStudio810258
#5 回复于2020-03

可以看看这个项目

https://aistudio.baidu.com/aistudio/projectdetail/109057

0
回复
l
li_gyh
#6 回复于2020-03

估计是可以....

先遍历程序的block取出所有变量

用assign赋值,不过如果输入的ndarray太大会报错,可以用fluid.data先占位然后run的时候feed进去就行

赋值部分只在开始的时候进行一次,可以通过fluid.cond配合一个bool的fluid.data或者global_var来当作初始化的标志位,初始化完之后feed或者assign个false就行

-----------

不过paddle并不会往前推计算图哪些部分是不需要计算的,所以可能出现:计算图上只在初始化阶段需要feed预设参数,但是实际上可能在整个训练周期都需要feed预设参数..那这样估计会有挺大的效率问题...

0
回复
l
li_gyh
#7 回复于2020-03
li_gyh #6
估计是可以.... 先遍历程序的block取出所有变量 用assign赋值,不过如果输入的ndarray太大会报错,可以用fluid.data先占位然后run的时候feed进去就行 赋值部分只在开始的时候进行一次,可以通过fluid.cond配合一个bool的fluid.data或者global_var来当作初始化的标志位,初始化完之后feed或者assign个false就行 ----------- 不过paddle并不会往前推计算图哪些部分是不需要计算的,所以可能出现:计算图上只在初始化阶段需要feed预设参数,但是实际上可能在整个训练周期都需要feed预设参数..那这样估计会有挺大的效率问题...
展开

或许还可以考虑自行创建一份同名变量,然后赋值存下来,初始化完之后load进去..

不太清楚pd的变量具体是怎么存的.....可以考虑这样:

先获取参数变量的name: paramName

a = fluid.data()
b = create_global_var(name=paramName)
c = assign(a, b)
exe.run(feed={a: datayouwant})
save_vars()

然后看看存出来的的变量文件能否直接load进去

0
回复
l
li_gyh
#8 回复于2020-03
li_gyh #7
或许还可以考虑自行创建一份同名变量,然后赋值存下来,初始化完之后load进去.. 不太清楚pd的变量具体是怎么存的.....可以考虑这样: 先获取参数变量的name: paramName [代码] 然后看看存出来的的变量文件能否直接load进去
展开

看到自己的项目想起来了...是可以的,我之前就这样做的 忽略我前面的回答,直接这样:

import paddle.fluid as fluid
x = fluid.layers.data(name="x", shape=[5], dtype='float32')
fc = fluid.layers.fc(input=x, size=10,
    param_attr=fluid.initializer.NumpyArrayInitializer(numpy.array([1,2])))
2
回复
水水水的老师
#9 回复于2020-03
li_gyh #8
看到自己的项目想起来了...是可以的,我之前就这样做的 忽略我前面的回答,直接这样: [代码]

学到了

0
回复
AIStudio810258
#10 回复于2020-03

读:model.fc.weight.numpy()

写:model.fc.weight.set_value(weight)

0
回复
AIStudio810258
#11 回复于2020-03
读:model.fc.weight.numpy() 写:model.fc.weight.set_value(weight)

写偏置b是这个:model.fc.bias.set_value(np.array([bias]).astype('float32'))

0
回复
阿康
#12 回复于2020-03
读:model.fc.weight.numpy() 写:model.fc.weight.set_value(weight)

请问这方法在哪里呢?文档里面没有找到。

0
回复
AIStudio810258
#13 回复于2020-03
阿康 #12
请问这方法在哪里呢?文档里面没有找到。

我记得当时就是查的文档。

0
回复
AIStudio810258
#14 回复于2020-03
阿康 #12
请问这方法在哪里呢?文档里面没有找到。

我又搜了下,也没搜到。忘了当时搜索的关键字了。但这个用法肯定是官方的。

0
回复
AIStudio810258
#15 回复于2020-03

你可以看看我公开的这个项目,代码能正常运行。

https://aistudio.baidu.com/aistudio/projectdetail/109057

0
回复
AIStudio810258
#16 回复于2020-03
阿康 #12
请问这方法在哪里呢?文档里面没有找到。

好像版本升级了,看看这个。

https://www.paddlepaddle.org.cn/documentation/docs/zh/api_cn/dygraph_cn/Linear_cn.html#cn-api-fluid-dygraph-linear

0
回复
阿康
#17 回复于2020-03

朋友谢谢你,不过你的项目好像和我的问题没关系。

如果你也对卷积核初始值感兴趣我们可以交流!

0
回复
AIStudio810258
#18 回复于2020-03
阿康 #17
朋友谢谢你,不过你的项目好像和我的问题没关系。 如果你也对卷积核初始值感兴趣我们可以交流!

诶呦,光热心了。问题没理解清楚。是卷积核初始化。不是网络初始化。卷积核初始化我也没做过。文档是这样写的。

 

ParamAttr¶
class paddle.fluid.ParamAttr(name=None, initializer=None, learning_rate=1.0, regularizer=None, trainable=True, gradient_clip=None, do_model_average=False)[源代码]¶

创建一个参数属性对象,用户可设置参数的名称、初始化方式、学习率、正则化规则、是否需要训练、梯度裁剪方式、是否做模型平均等属性。

参数:
name (str,可选) - 参数的名称。默认值为None,表示框架自动创建参数的名称。
initializer (Initializer,可选) - 参数的初始化方式。默认值为None,表示权重参数采用Xavier初始化方式,偏置参数采用全0初始化方式。
learning_rate (float) - 参数的学习率。实际参数的学习率等于全局学习率乘以参数的学习率,再乘以learning rate schedule的系数。
regularizer (WeightDecayRegularizer,可选) - 正则化因子。默认值为None,表示没有正则化因子。
trainable (bool) - 参数是否需要训练。默认值为True,表示需要训练。
gradient_clip (BaseGradientClipAttr,可选) - 梯度裁剪方式。默认值为None,表示不需要梯度裁剪。
do_model_average (bool) - 是否做模型平均。默认值为False,表示不做模型平均。
返回: 表示参数属性的对象。

返回类型: ParamAttr

代码示例

import paddle.fluid as fluid

w_param_attrs = fluid.ParamAttr(name="fc_weight",
learning_rate=0.5,
regularizer=fluid.regularizer.L2Decay(1.0),
trainable=True)
print(w_param_attrs.name) # "fc_weight"
x = fluid.layers.data(name='X', shape=[1], dtype='float32')
y_predict = fluid.layers.fc(input=x, size=10, param_attr=w_param_attrs)

0
回复
在@后输入用户全名并按空格结束,可艾特全站任一用户