如何从形状 (100,24,24,6) 的输入指向要处理的最后一个通道维度,即 (6,)?

How to point from the inputs of shape (100,24,24,6) the last channel dimension i.e (6,) to be worked on?

我正在尝试使用 tf.map_fn() ,其中我的元素应该指向我输入的通道维度(形状 = 100,24,24,6),所以我的元素应该是list/tuple 个张量,指向或访问输入的通道维度 (6) 的值。我试图通过以这种方式制作 for 循环来做到这一点:

@tf.function def call(self, inputs, training=True):

    elems = []

    for b in inputs:
        for h in b:
            for w in h:
                for c in w:
                    elems.append(c)

    changed_inputs = tf.map_fn(self.do_mapping, elems)
    return changed_inputs

我试图在 self.do_mapping 中实现的是,它正在使用键和 return 值进行字典查找字典 (vmap) 的值。字典 vmap 是通过访问层的输出并仅附加层输出的通道维度的相似值来制作的,因此字典中的键是 6 的元组(作为通道维度的大小)tf.tensorobjects 和字典的值是我保留的计数。字典是这样编的:

value = list(self.get_values())
vmap = {}
cnt = 0
for v0 in value:
    for v1 in v0:
        for v2 in v1:
            for v3 in v2:
                v = tuple(v3)
                if v not in vmap:
                    vmap[v]=cnt
                    cnt+=1

do_mapping 函数是:

@tf.function
def do_mapping(self,pixel):
    if self._compression :
        pixel = tuple(pixel)
        enumerated_value=self._vmap.get(pixel)
        print(enumerated_value)
        print(tf.shape(pixel))
        exit()
        return enumerated_value

如果我现在尝试使用 tf.map_fn 尝试将元素指向通道维度,那么我会收到以下错误:(ValueError: elems 中的元素必须是 1+ 维张量,而不是标量).请帮助我了解如何为我的案例使用 tf.map_fn ?提前谢谢你

首先,不用 for 循环(为了效率尽量避免),你可以这样重塑:

elems = tf.reshape(inputs,-1)

其次,你到底想做什么? “它不起作用”是什么意思?错误信息是什么?什么是 self.do_mapping

最佳,

凯文