gpt4 book ai didi

python - Tensorflow:小批量中每个样本的不同过滤器的卷积

转载 作者:太空狗 更新时间:2023-10-29 22:21:10 24 4
gpt4 key购买 nike

我想要一个带有过滤器的二维卷积,该过滤器取决于 tensorflow 中小批量中的样本。任何想法如何做到这一点,特别是如果每​​个小批量的样本数量未知?

具体来说,我有 MB x H x W x Channels 形式的输入数据 inp,我有 F 形式的过滤器MB x fh x fw x Channels x OutChannels

假设

inp = tf.placeholder('float', [None, H, W, channels_img], name='img_input')

我想做 tf.nn.conv2d(inp, F, strides = [1,1,1,1]),但这是不允许的,因为 F 不能有小批量维度。知道如何解决这个问题吗?

最佳答案

我认为提议的技巧实际上是不正确的。 tf.conv3d() 层发生的事情是输入在深度(=实际批处理)维度上进行卷积,然后沿着生成的特征图求和。使用 padding='SAME',结果输出的数量恰好与批量大小相同,所以有人被愚弄了!

编辑:我认为用不同的过滤器对不同的小批量元素进行卷积的一种可能方法涉及“破解”深度卷积。假设批量大小 MB 已知:

inp = tf.placeholder(tf.float32, [MB, H, W, channels_img])

# F has shape (MB, fh, fw, channels, out_channels)
# REM: with the notation in the question, we need: channels_img==channels

F = tf.transpose(F, [1, 2, 0, 3, 4])
F = tf.reshape(F, [fh, fw, channels*MB, out_channels)

inp_r = tf.transpose(inp, [1, 2, 0, 3]) # shape (H, W, MB, channels_img)
inp_r = tf.reshape(inp, [1, H, W, MB*channels_img])

out = tf.nn.depthwise_conv2d(
inp_r,
filter=F,
strides=[1, 1, 1, 1],
padding='VALID') # here no requirement about padding being 'VALID', use whatever you want.
# Now out shape is (1, H, W, MB*channels*out_channels)

out = tf.reshape(out, [H, W, MB, channels, out_channels) # careful about the order of depthwise conv out_channels!
out = tf.transpose(out, [2, 0, 1, 3, 4])
out = tf.reduce_sum(out, axis=3)

# out shape is now (MB, H, W, out_channels)

如果 MB 未知,应该可以使用 tf.shape() 动态确定它(我认为)

关于python - Tensorflow:小批量中每个样本的不同过滤器的卷积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42068999/

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