首页 > 解决方案 > 如何在 Tensorflow 中加入两个操作以创建新操作?

问题描述

我有以下两个重复多次的操作:


  x = Conv3D(2*feature_size, 3, activation="relu", padding="same", strides=2)(x)
  x = BatchNormalization()(x)
  


  x = Conv3D(2*feature_size, 3, activation="relu", padding="same", strides=2)(x)
  x = BatchNormalization()(x)
  x = Conv3D(2*feature_size, 3, activation="relu", padding="same", strides=2)(x)
  x = BatchNormalization()(x)
  x = Conv3D(2*feature_size, 3, activation="relu", padding="same", strides=2)(x)
  x = BatchNormalization()(x)
  x = Conv3D(2*feature_size, 3, activation="relu", padding="same", strides=2)(x)
  x = BatchNormalization()(x)
  x = Conv3D(2*feature_size, 3, activation="relu", padding="same", strides=2)(x)
  x = BatchNormalization()(x)

我想创建一个新的 Tensorflow 操作,将这两个操作合并为一个操作,名称为 Conv3D_bnorm,这样它就可以像这样使用:

x = Conv3D_bnorm(2*feature_size, 3, activation="relu", padding="same", strides=2)(x)

BatchNormalization 不需要自定义参数。我怎么做?

标签: pythontensorflow

解决方案


只需定义一个函数,例如:

def Conv3D_bnorm(x, feature_size):
    conv = Conv3D(2*feature_size, 3, activation="relu", padding="same", strides=2)
    bn = BatchNormalization()
    
    return bn(conv(x))

但更合乎逻辑的是使用 keras 的Sequential模块:

import tensorflow as tf

x = ...

Conv3D_bnorm = tf.keras.Sequential()
Conv3D_bnorm.add(Conv3D(2*feature_size, 3, activation="relu", padding="same", strides=2))
Conv3D_bnorm.add(BatchNormalization())

x = Conv3D_bnorm(x)

推荐阅读