要实现特定功能,我需要在我的层中使用“ input_channels”个内核,每个内核只有一个通道深度,而不是depth =“ input_channels”。 我需要将一个内核与输入的一个通道进行卷积,因此该层的输出将具有“ input_channels”个内核。
哪个python / numpy / tensorflow卷积函数可以进行这样的卷积,其中内核中的通道数不能总是等于“ input_channels”,而可以是1?
在此先感谢您的帮助。
(如果有人想知道我曾经尝试过的一切,
在tensorflow的conv2d函数中,如果我指定内核数量= 1来执行此操作,则它将对所有input_channels求和,而output_channels的数量将为1,因为它将始终初始化内核深度=“ input_channels”。>
另一种选择是在conv2d函数中指定内核数量= input_channels,但这会创建深度为“ input_channels”的内核“ input_channels”数量,从而增加了我的图层的复杂性和错误实现。
我尝试的另一件事是初始化卷内核(kernel_height,kernel_width,input_channels),并在三维空间上循环以仅使单个输入通道与单个内核卷积。但是tensorflow conv2d函数需要4级内核才能工作,并给出以下错误-
ValueError: Shape must be rank 4 but is rank 3 for 'generic_act_func_4/Conv2D' (op: 'Conv2D') with input shapes: [?,28,28], [28,28]. )
答案 0 :(得分:0)
正如我所看到的,您正在尝试为输入中的每个维度学习一个单独的模型。因此,您将需要2个深度为1的2D卷积滤波器。
我相信应该有一种更简单的方法,但对我而言,最合乎逻辑的做法是创建一个模型,该模型由与输入深度相同的多个子模型组成(32)。因此,32个模型包含一个卷积滤波器,仅接收输入的一维。然后,将所有模型的输出堆叠起来即可得到所需的结果。
另一个有趣的解决方案(但是我不确定它是否会起作用,我自己还没有尝试过)将对输入进行可分离的卷积。
指向描述这些操作的文章的链接: https://towardsdatascience.com/a-basic-introduction-to-separable-convolutions-b99ec3102728
您基本上只想执行可分离卷积操作的第一部分,这正是keras / tensorflow中的DepthwiseConv2D层所要做的。所以如果我在你那里,我会看看。想知道这是否对您有用!