对tensorflow lite模式中稀疏参数的理解
我试图用tensorflow lite模式理解稀疏张量,但这对我来说很难做到 幸运的是,这个模式中只有一个json示例(对tensorflow lite模式中稀疏参数的理解,tensorflow,flatbuffers,tensorflow-lite,Tensorflow,Flatbuffers,Tensorflow Lite,我试图用tensorflow lite模式理解稀疏张量,但这对我来说很难做到 幸运的是,这个模式中只有一个json示例(tensorflow/lite/testdata/sparse\u tensor.json) “稀疏性”:{ “遍历顺序”:[0,1,2,3], “块映射”:[0,1], “dim_元数据”:[ { “格式”:“密集”, “密度大小”:2 }, { “格式”:“稀疏”, “数组\段\类型”:“Uint8Vector”, “数组_段”:{“值”:[0,2,3]},
tensorflow/lite/testdata/sparse\u tensor.json
)
“稀疏性”:{
“遍历顺序”:[0,1,2,3],
“块映射”:[0,1],
“dim_元数据”:[
{
“格式”:“密集”,
“密度大小”:2
},
{
“格式”:“稀疏”,
“数组\段\类型”:“Uint8Vector”,
“数组_段”:{“值”:[0,2,3]},
“数组索引类型”:“Uint8Vector”,
“数组_索引”:{“值”:[0,1,1]}
},
{
“格式”:“密集”,
“密度大小”:2
},
{
“格式”:“密集”,
“密度大小”:2
}
]
}
“缓冲区”:[
{
},
{
“数据”:[
1, 0, 0, 4,
2, 3, 0, 0,
5, 0, 0, 6
]
}
]
这就是我提到的模式(tensorflow/lite/schema/schema.fbs
)
好了,如果我想生成上面这样的稀疏张量,我必须编写下面这样的代码
st1=tf.compat.v1.sparse.SparseTensor(
索引=[[0,0],[0,3],[1,0],[1,1],[2,0],[2,2]],值=缓冲区,密集形状=[4,4])
但是,上面的json示例与我的理解完全不符
array\u index
应该是[0,3,0,1,0,3]而不是[0,1,1],而array\u segments
应该是[0,2,2,4,4,6]而不是[0,2,3]{
“格式”:“密集”,
“密度大小”:2
},
正如shcema的评论所说,它是一个存储维度大小的字段
但是,哪个维度的值为“2”?形状是[4,4]。我甚至不能推断数字2是从哪里来的
1 2 0
3 4 0
0 0 0
我会说,它有一个2x2街区
但上面的缓冲区中有六个1x1块
那么,我怎样才能把这些东西做成块地图呢
实际上,我也不知道遍历顺序,但是如果我知道上面的事情,我也会理解的
请有人帮帮我。目前TFLite使用了与Tensorflow不同的稀疏张量表示。它使用的格式称为TACO。有关更多详细信息,请参阅本文:第3节 由于tf.SparseTensor使用的是COO格式,因此它不适用于此
块是需要存储在一起的张量的内部子单元。它可以包含0值元素。示例flatbuffer显示了一个具有2-D 2x2内部块的2-D 4x4张量。TFLite使用阻塞稀疏张量来利用NEON SIMD指令。谢谢您的回答。我已经理解了你上面提到的论文的模式和格式。有没有办法制作一个包含备用张量的tflite文件,除了手工?我发现了
tensorflow/lite/tools/optimize/sparsity/format\u converter
,但它看起来像一个库,可以将密集转换为稀疏,或者将密集转换为稀疏,用于内部计算。
1 2 0
3 4 0
0 0 0