当前位置: 首页 > 知识库问答 >
问题:

张量流精简版转换更改模型权重

夏俊杰
2023-03-14

我有一个保存在.pb文件中的模型,它工作正常,但当我使用命令tflite_convert或python api将其转换为tflite模型时,结果是错误的。我发现权重在转换后发生了变化。.pb文件中第一个卷积层的权重如下:

shape - 
(3, 3, 1, 8)
Value - 
[[[[-0.09953183  0.11656161  0.1101007  -0.02618909 -0.21355744
    -0.05877252  0.11881053 -0.17588891]]

  [[-0.16565287  0.16550814  0.02200373  0.0987333   0.0194475
    -0.12387082 -0.06090429 -0.19122925]]

  [[-0.19570269  0.11854213 -0.14988026 -0.01476914  0.12554781
    -0.1324673  -0.04035608 -0.05299769]]]


 [[[ 0.08548407 -0.09644134  0.24321978  0.15008359 -0.2591259
     0.2421266   0.02051029 -0.05138292]]

  [[ 0.04847065 -0.22357103 -0.00074622  0.19842042  0.00228794
     0.13352048 -0.24048899 -0.00679056]]

  [[-0.01857976 -0.09324262 -0.19632849  0.02247559  0.18489467
    -0.07365554 -0.39479995  0.0622104 ]]]


 [[[ 0.13633308  0.04041797  0.10581032 -0.13119537  0.01122213
     0.15191257  0.03097369  0.07342041]]

  [[ 0.16241515 -0.04534301 -0.06334146 -0.19276966 -0.03890191
     0.08520683 -0.0117504   0.14705475]]

  [[ 0.07332639 -0.00533756 -0.06285968 -0.12631118  0.09094885
    -0.09658462 -0.04983746  0.13325559]]]]

和第一卷积层的权重。tflite文件如下:

shape - 
(1, 3, 3, 8)
Value - 
[[[[ -31.412575     42.14294      36.269154     -8.724394
     -67.77634     -12.249788     43.18692     -76.762474  ]
   [ -52.280594     59.839592      7.248423     32.89111
       6.1720166   -25.818043    -22.138346    -83.4574    ]
   [ -61.764416     42.858997    -49.373257     -4.9200554
      39.844883    -27.609783    -14.669194    -23.129562  ]]

  [[  26.979053    -34.86844      80.12097      49.997475
     -82.23831      50.46576       7.4553676   -22.424837  ]
   [  15.297499    -80.832275     -0.24581672   66.09997
       0.7261198    27.829294    -87.41631      -2.963576  ]
   [  -5.8638325   -33.71194     -64.67414       7.487314
      58.679688    -15.351814   -143.50742      27.15023   ]]

  [[  43.02717      14.613146     34.855824    -43.705227
       3.561546     31.662704     11.25875      32.04257   ]
   [  51.258755    -16.393799    -20.865818    -64.21752
     -12.346229     17.759417     -4.2712016    64.1785    ]
   [  23.14205      -1.929798    -20.70711     -42.07815
      28.864273    -20.130857    -18.115618     58.15619   ]]]]

似乎有一些关系。

张量流版本是1.12。

命令是

tflite_convert --output_file=graph_net_half.tflite --graph_def_file=graph_net_half.pb  --input_arrays=input_image --output_arrays=output_landmark 

还有另一个类似的问题没有答案:tflite权重

共有1个答案

胡劲
2023-03-14

运行tflite_convert时会更改权重,原因如下:

  • TensorFlow Conv2D使用HWIO权重(filter_height、filter_weight、input_channels、output_channels)。出于优化原因,TensorFlow Lite Conv2D使用IHWO权重。权重轴必须重新排序
  • tflite_convert会进行常量折叠等优化,这也会改变权重。

看到权重不一样,不代表换算错了。

 类似资料:
  • 这里是一个初学者,你会看到:)我试图将我的keras (.h5)训练模型转换为TensorFlow Lite格式,但我有以下错误; 属性错误: 类型对象 “TFLite转换器” 没有属性 “from_keras_model”

  • 我下面的代码产生了常规的tensorflow模型,但当我试图将其转换为tensorflow lite时,它不起作用,我遵循了以下文档。 https://www.tensorflow.org/tutorials/estimator/linear1 https://www.tensorflow.org/lite/guide/get_started 错误信息 文档摘录 TensorFlow Lite转换

  • 我试图按照张量流量化中的说明来生成一个量化的张量流精简版模型。 首先,我使用tf。contrib。量化。创建_training_graph()和tf。contrib。量化。在我的训练过程中创建_eval_graph(),将伪量化节点插入到图形中,并最终生成一个冻结的pb文件(model.pb)。 其次,我使用以下命令将我的伪量化tensorflow模型转换为量化tensorflow lite模型。

  • 我正在开发一个需要ML模型集成的Android应用程序。为此,我使用TensorFlow lite进行部署。我使用基于自定义模型的暹罗网络进行输出,输出形状为[1 128]。当我在Google Colab上推断python中的tf lite模型时,输出[1 128]数字与我在Android设备上产生的数字不同。输入图像在两种推断以及输入和输出形状上都是相同的,但我在Android手机和Python

  • 我基本上是希望通过pyinstaller来准备我的模型。并且由于打包tensorflow导致最终的可执行文件大小约为500mbs。我求助于使用tensorflow lite。 现在的问题是,当我将模型转换为tflite(量化或非量化)时,它会为我输入的任何图像提供以下输出。 以下是我的模型转换代码 下面是测试tflite模型的代码。 keras模型的输出 数组([[0.9934516]],dtyp

  • 这是我当前抓取图像类型的代码。一旦它检测到了狗,我会试着让它看到检测的准确性。希望这有道理?