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 操作,将这两个操作合并为一个操作,名称为 Conv3D_bnorm,这样它就可以像这样使用:
x = Conv3D_bnorm(2*feature_size, 3, activation="relu", padding="same", strides=2)(x)
BatchNormalization 不需要自定义参数。我怎么做?
解决方案
只需定义一个函数,例如:
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)
推荐阅读
- regex - 正则表达式在具有反应形式的 Angular 2+ 管道内失败
- google-sheets - 如何使用 Google 表格自定义功能来检测是否添加了行?
- r - 是否在 r 中启动包,使用第一个返回(结果)作为观察数据来计算置信区间
- php - 对组感到困惑,并在 php 中有子句
- android - 毕加索图书馆错误未解决参考
- php - 尝试运行新的单元测试时出现“ParsePI:PI php never end”
- powershell - 运行方法异步
- c++ - OpenCV折线过多的CPU使用率
- powerbi-embedded - Power BI 嵌入式隐藏滚动条
- docker - Docker Swarm:重启单个节点管理器会删除我所有的服务吗?