我使用的是Keras
,实际上tensorflow.keras
是具体的,我想知道是否有可能创建可重用的内置Keras层块。例如,我想在模型中的不同时间重复使用下面的块。
conv1a = Conv3D(filters=32, strides=(1, 1, 1), kernel_size=(3, 3, 3), padding='same')(inputs)
bn1a = BatchNormalization()(conv1a)
relu1a = ReLU()(bn1a)
conv1b = Conv3D(filters=32, strides=(1, 1, 1), kernel_size=(3, 3, 3), padding='same')(relu1a)
bn1b = BatchNormalization()(conv1b)
relu1b = ReLU()(bn1b)
我读过关于creating custom layers in Keras的文章,但我发现文档不够清晰。
任何帮助都将不胜感激。
最佳答案
你可以简单地把它放在一个函数中,然后使用如下命令:
relu1a = my_block(inputs)
relu1b = my_block(relu1a)
还可以考虑在函数的开头添加一些内容,比如
with K.name_scope('MyBlock'):
,这样就可以在图中包装内容。所以你会得到这样的东西:
def my_block(inputs, block_name='MyBlock'):
with K.name_scope(block_name):
conv = Conv3D(filters=32, strides=(1, 1, 1), kernel_size=(3, 3, 3), padding='same')(inputs)
bn = BatchNormalization()(conv)
relu = ReLU()(bn)
return relu
如果指定块名:
relu1a = my_block(inputs, 'Block1')
relu1b = my_block(relu1a, 'Block2')