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

时间:2019-01-15 10:52:43

标签: python tensorflow keras

我正在使用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的信息,但是我发现文档不够清晰。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

您可以简单地将其放在函数中,然后使用,例如:

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')

答案 1 :(得分:1)

定义一个方法,该方法接收模型并返回带有添加图层的模型。这是一个示例:

def get_modified_model(model):
    model.add(Dense(512, activation='relu', input_shape=(NUM_ROWS * NUM_COLS,)))
    model.add(Dropout(0.5))
    model.add(Dense(256, activation='relu'))
    model.add(Dropout(0.25))
    model.add(Dense(10, activation='softmax'))
    return model

使得从model获得传递给get_model的参数keras.models.Sequential()