如何从形状(100,24,24,6)的输入中指出要处理的最后一个通道尺寸,即(6,)



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

@tf.函数def调用(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中实现的是,它使用键和返回值来查找字典(vmap(的值。字典vmap是通过访问层的输出并仅附加层的输出的通道维度的相似值来制作的,因此字典中的键是6的元组(作为通道维度的大小(tf.传感器对象和字典的值是我保留的计数。这就是词典的制作方法:

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,尝试将elems指向通道维度,那么我会得到以下错误:(ValueError:elems中的元素必须是1+维度张量,而不是标量(。请帮助我了解如何将tf.map_fn用于我的案例?提前感谢

首先,您可以用这种方式重塑:

elems = tf.reshape(inputs,-1)

第二,你到底想做什么?你说的";它不起作用"?错误消息是什么?什么是self.do_mapping

最佳,

Keivan

最新更新