设置卷积层的过滤器权重

时间:2020-09-04 09:56:00

标签: tensorflow keras deep-learning

我正在从事一个涉及动态过滤器的语义分割项目,以学习多尺度表示。

要创建这些过滤器,我使用Unet主干并从瓶颈层提取特征图。 特征图的大小为H xW X 512,其中H是特征图的高度,W是宽度,而512是通道(图)的数量。

这些特征被传递给1x1卷积以减少到HXWX 128的过滤器数量,特征也被传递给自适应池化层以将HXWX 512减小到kxkx 512,其中k是过滤器的大小(i。例如5)。 然后,还通过1 x 1卷积对滤镜进行馈送,以将其减少到128。

这给了我一个特征图f = H xW x 128和一个大小为k x k x 128的滤波器内核g。

现在我想将f与g进行卷积并在keras中尝试以下操作:

conv = Conv2D(128, kernel_size = 5, kernel_initializer = g, trainable = False)(f)

不幸的是,这不起作用,我只是收到一条错误消息:

“无法解释初始化程序标识符:Tensor(“ strided_slice:0”,shape =(5,5,128),dtype = float32)“

现在Iam想知道Iam做错了什么吗?

此外,我不得不提到平均合并/ 1x1 conv后输出tnesor的形状是(?,5,5,128),其中?是批量大小。 得到的内核我尝试过类似的东西:

g = g[0,:,:,:]

谢谢您的建议,

欢呼

迈克尔

1 个答案:

答案 0 :(得分:0)

Conv2D的构造函数的kernel_initializer自变量不期望使用内核,而需要初始化内核的函数。您可以在documentation

中阅读更多内容

如果您只想在没有可训练权重的情况下进行卷积,那么最好使用tensorflow本机函数tf.nn.conv2d

conv = tf.nn.conv2d(f,g,strides=[1,1,1,1],padding='VALID')