Tensorflow-如何共享CNN';不同输入通道的s滤波器权重?

Tensorflow-如何共享CNN';不同输入通道的s滤波器权重?,tensorflow,machine-learning,conv-neural-network,Tensorflow,Machine Learning,Conv Neural Network,我的1层CNN神经元网络的输入数据集有10个通道。如果我将过滤器通道设置为16,那么将有10*16=160个过滤器 我想为每个输入通道使用相同的16个滤波器通道的权重。表示仅对我的输入数据集使用16个过滤器。表示10个输入通道共享相同的卷积滤波器权重 有人知道如何在tensorflow中做到这一点吗?非常感谢。您可以使用较低级别的tf.nn.conv1d和通过平铺相同的单通道过滤器构建的过滤器 f0 = tf.get_variable('filters', shape=(kernel_width

我的1层CNN神经元网络的输入数据集有10个通道。如果我将过滤器通道设置为16,那么将有10*16=160个过滤器

我想为每个输入通道使用相同的16个滤波器通道的权重。表示仅对我的输入数据集使用16个过滤器。表示10个输入通道共享相同的卷积滤波器权重


有人知道如何在tensorflow中做到这一点吗?非常感谢。

您可以使用较低级别的
tf.nn.conv1d
和通过平铺相同的单通道过滤器构建的
过滤器

f0 = tf.get_variable('filters', shape=(kernel_width, 1, filters_out), initializer=...)
f_tiled = tf.tile(f0, (1, filters_in, 1))
output = tf.nn.conv1d(input, f_tiled, ...)
但是,只需将所有输入通道添加到一起,形成一个单通道输入,然后使用更高级别的
API,就可以获得相同的效果(而且效率更高,更不容易出错)

conv_input = tf.reduce_sum(input, axis=-1, keepdis=True))
output = tf.layers.conv1d(conv_input, filters=...)
请注意,除非您的所有频道几乎相同,否则这可能是个坏主意。如果你想减少自由参数的数量,考虑多个卷积-1x1,以减少滤波器的数量,其他具有宽内核和非线性的卷积,然后1x1卷积,以返回到大量的过滤器。上述实现中的
reduce_sum
实际上是固定权重为
tf.ones
的1x1卷积,除非数据集很小,否则通过学习权重和一些非线性,几乎肯定会得到更好的结果