gpt4 book ai didi

tensorflow - 有没有办法在不使用 tensorflow 中的转置函数的情况下转置张量?

转载 作者:行者123 更新时间:2023-12-04 14:54:43 35 4
gpt4 key购买 nike

我有一个模型想移植到 tflite micro。但是,当我运行代码时,出现以下错误:

Didn't find op for builtin opcode 'TRANSPOSE' version '2'
Failed to get registration from op code d

我假设 tflite micro 不支持转置函数。我也尝试用 PERMUTE 层替换它,但它似乎在底层使用了 tf.transpose。这是我尝试转置的模型部分:

output = tf.reshape(output, (img_width // B, B, img_height // B, B), name="reshape_in")
output = Permute((2, 1, 3), name="transpose_in")(output)

有没有其他方法可以在不调用 tf.transpose 的情况下执行此转置?也许使用 reshape ?

最佳答案

我在尝试使用不支持转置操作的 TFLite GPU 委托(delegate)运行模型时遇到了类似的问题。

一种可能性是使用跨步切片、tf.reshapeconcat 操作的组合:

shape = (3,4,5)
a = tf.random.uniform(shape)
a_t = tf.transpose(a,(1,0,2)) # permuting first and second axis
a_concat = tf.concat([tf.reshape(a[i:i+1,:,:],(shape[1],1,shape[2])) for i in range(shape[0])],axis=1)
tf.debugging.assert_equal(a_t,a_concat)

注意事项:

  • 张量的形状需要事先知道。
  • 它使用 tf.concat 因为 PACK/tf.stack 在 GPU delegate 上不可用
  • 它使用 a[i:i+1,:] 而不是 a[i] 因为 GPU 代理不支持删除轴的跨步切片
  • 性能可能会很差,特别是如果循环的维度很大:这个技巧的作用实质上是在一个维度上展开操作,在图中创建与维度大小一样多的 reshape 节点。

关于tensorflow - 有没有办法在不使用 tensorflow 中的转置函数的情况下转置张量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68295424/

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