问题描述
我正在构建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 (将#修改为@)