Как объединить две операции для создания новой операции в Tensorflow?

#python #tensorflow

#python #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 operations, который объединяет две операции в одну операцию с именем Conv3D_bnorm, чтобы его можно было использовать как:

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

BatchNormalization не обязательно иметь пользовательские параметры.
Как мне это сделать?

Ответ №1:

Просто определите функцию, например:

 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:

 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)
  

Комментарии:

1. Разве в первом примере «x» не определено?

2. @zendevil зависит от использования. В любом случае вы можете добавить x в качестве параметра к этой функции.