如何解决为不同的卷积输出共享一个公共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 举报,一经查实,本站将立刻删除。