我们如何在 Keras 中创建一个块(可重用的函数集)?

Jas*_*hah 2 python keras tensorflow

我正在使用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)
Run Code Online (Sandbox Code Playgroud)

我已阅读有关在 Keras 中创建自定义层的信息,但我发现文档不够清晰。

任何帮助,将不胜感激。

gro*_*ina 8

你可以简单地把它放在一个函数中,然后像这样使用:

relu1a = my_block(inputs)
relu1b = my_block(relu1a)
Run Code Online (Sandbox Code Playgroud)

还可以考虑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
Run Code Online (Sandbox Code Playgroud)

如果您指定块名称:

relu1a = my_block(inputs, 'Block1')
relu1b = my_block(relu1a, 'Block2')
Run Code Online (Sandbox Code Playgroud)