为不同的卷积输出共享一个公共GlobalPooling层是否对梯度流有影响?

问题描述

我正在构建CNN,但不确定是否可以在先前GlobalPooling层的不同输出之间共享Convolutional层。猜测是,因为GlobalPooling层没有可训练的参数(它们只是固定的操作),但是我不确定它对反向传递中的梯度流是否有影响。

假设以下示例:

class MyLayer(tf.keras.layers.Layer):
    def __init__(self,filters=32,padding='same',activation='relu',name=None,**kwargs):
        super().__init__(name=name,**kwargs)
        self.c3 = Convolution3D(filters=filters,kernel_size=(3,3,3),padding=padding,activation=activation)
        self.c5 = Convolution3D(filters=filters,kernel_size=(5,5,5),activation=activation)
        self.c7 = Convolution3D(filters=filters,kernel_size=(7,7,7),activation=activation)
        self.gmp = GlobalMaxPooling()
    
    def call(self,inputs,training=False,**kwargs):
        x3 = self.c3(inputs)
        x5 = self.c5(inputs)
        x7 = self.c7(inputs)
        # Here I am using the same GlobalMaxPooling layer for the three tensors. This has sense?
        # or should I use a different (own) GlobalMaxPooling layer for each convolution output?
        mp3 = self.gmp(x3)
        mp5 = self.gmp(x5)
        mp7 = self.gmp(x7)
        ...

问题也可以扩展到类似层,例如Reshape,Concatenate,Add,Mult等,这些层没有可训练的参数并且是固定操作。我是否必须为每个卷积输出创建一个自己的图层?还是我可以毫无问题地使用它?

非常感谢您

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)