#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
в качестве параметра к этой функции.