正在寻找一种干净的方法,向批量大小未知的NXC张量添加额外的零通道?

2024-10-03 02:46:24 发布

您现在位置:Python中文网/ 问答频道 /正文

现在我有一段代码,它将把BxNxNxC张量填充到BxNxNx(C+P)张量,其中B是批量大小,C是通道数,p是我要添加的填充通道数:

A = <some BxNxNxC tensor>

P = <some calculation>
padding_tensor = keras.layers.UpSampling3D(size=[1, 1, P])(tf.zeros_like(A)[:, :, :, 0:1])

# This is the BxNxNx(C+P) tensor
concat = keras.layers.Concatenate(axis=3)([A, padding_tensor])

我这样做的原因是因为我无法直接创建正确大小的padding_tensor,因为似乎不可能获得批大小来指定形状

我想要一个干净的方法来实现这一点,因为我正在查看我的模型的计算图,这增加了很多膨胀。如果有可能将所有这些操作隐藏到一个计算节点中,我会很高兴,但不必对像填充这样简单的操作使用3个操作

我也怀疑这会有点慢,但我对tensorflow的了解还不足以真正了解


Tags: 代码sizelayerstfzerossome批量like
1条回答
网友
1楼 · 发布于 2024-10-03 02:46:24

这是我的建议。。。我用零初始化一个伪conv2d层,使其不可训练,这将产生0输出

batch, H, W, F, C, P = 32, 28, 28, 3, 5, 6

X = np.random.uniform(0,1, (batch,H,W,F))

inp = Input((H,W,F))

x_c = Conv2D(C,3, padding='same')(inp) # BxNxNxC
x_p = Conv2D(P,3, padding='same', kernel_initializer='zeros', name='zeros')(inp) # BxNxNxP
concat = Concatenate()([x_c,x_p]) # BxNxNx(C+P)

model = Model(inp, concat)
model.get_layer('zeros').trainable = False # important
model.summary()

# check if zeros
model.predict(X)[:,:,:,-P:].sum() # 0

相关问题 更多 >