gpt4 book ai didi

python - 如何在 tensorflow 的二维卷积中连接两个不同形状的张量?

转载 作者:行者123 更新时间:2023-12-04 08:59:59 24 4
gpt4 key购买 nike

在我的计算管道中,我使用了将创建自定义 keras block 的自定义函数,并且我多次使用此 block 与 Conv2D .最后,我得到了两个不同的张量,它们是具有不同张量形状的特征图:TensorShape([None, 21, 21, 64])TensorShape([None, 10, 10, 192]) .在这种情况下,使用 tf.keras.layers.concatenate进行连接对我不起作用。谁能指出我如何将这两个张量连接成一个?有什么想法可以实现吗?
如果我能够连接形状为 TensorShape([None, 21, 21, 64]) 的张量和 TensorShape([None, 10, 10, 192]) ,我想在连接后执行以下操作。

x = Conv2D(32, (2, 2), strides=(1,1), padding='same')(merged_tensors)
x = BatchNormalization(axis=-1)(x)
x = Activation('relu')(x)
x = MaxPooling2D(pool_size=(2,2))(x)
x = Flatten()(x)
x = Dense(256)(x)
x = BatchNormalization()(x)
x = Activation('relu')(x)
x = Dropout(0.25)(x)
x = Dropout(0.25)(x)
x = Dense(10)(x)
x = Activation('softmax')(x)
outputs = x

model = tf.keras.Model(inputs=inputs, outputs=outputs)
我试图用 TensorShape([None, 21, 21, 64]) 的形状 reshape 张量和 TensorShape([None, 10, 10, 192])在一维卷积中进行合并,然后将输出重新整形为二维卷积。我的方法行不通。任何人都可以建议这样做的可能方式吗?有什么想法吗?
更新
我仍然不确定获得连接输出形状的方式将是 TensorShape([None, 21+10, 21+10, 192+64])或者不是因为我不确定它在数学角度是否有意义。如何轻松正确地进行这种连接?连接的正确形状是什么?任何的想法?

最佳答案

要操作连接,您应该提供具有相同形状的图层,除了连接轴...对于图像,如果您想在特征维度(轴 -1)上连接它们,图层必须具有相同的 batch_dim、宽度和高度。
如果要强制操作你需要做一些与维度相等的事情。一种可能性是填充。下面是我在最后一维上连接两层的示例

batch_dim = 32
x1 = np.random.uniform(0,1, (batch_dim, 10,10,192)).astype('float32')
x2 = np.random.uniform(0,1, (batch_dim, 21,21,64)).astype('float32')

merged_tensors = Concatenate()([ZeroPadding2D(((6,5),(6,5)))(x1), x2]) # (batch_dim, 21, 21, 192+64)
使用池化而不是填充:
batch_dim = 32
x1 = np.random.uniform(0,1, (batch_dim, 10,10,192)).astype('float32')
x2 = np.random.uniform(0,1, (batch_dim, 21,21,64)).astype('float32')

merged_tensors = Concatenate()([MaxPool2D(2)(x2), x1]) # (batch_dim, 10, 10, 192+64)

关于python - 如何在 tensorflow 的二维卷积中连接两个不同形状的张量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63605446/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com