簡體   English   中英

轉換后 TFLite model 中缺少層

[英]Missing layer in TFLite model after conversion

因此,我使用 tensorflow 和 python 訓練了 model,現在我正在嘗試在 ZF6F87C9FDCF18B3C3FC9Z77F3 程序中使用它。 我使用此代碼將我的 model 轉換為 tflite(我在轉換過程中沒有任何錯誤):

model.load_weights('training_weights.h5', by_name=True)
model.save('saved_model/model')

converter = tf.lite.TFLiteConverter.from_saved_model("saved_model/model")
tflite_model = converter.convert()
with tf.io.gfile.GFile('model.tflite', 'wb') as f:
    f.write(tflite_model)

然后我將 model 加載到 C++ 中並嘗試使用它,但是 output 與 myDB31 的 Z78E6221F639ZF41 網絡不匹配。 網絡的最后一層,在 python 中,是:

X = Lambda(lambda x: K.expand_dims(x, axis=2), name='deconv_expand_dim')(input_tensor)
X = Conv2DTranspose(filters, (kernel_size, 1), strides=(strides, 1), padding=padding, 
                    activation=activation, kernel_initializer=kernel_initializer,
                    bias_initializer=bias_initializer, name='deconv')(X)
X = Lambda(lambda x: K.squeeze(x, axis=2), name='deconv_reduce_dim')(X)

在 C++ 中加載的 model 的最后一層是:

1227 model/deconv_expand_dim/ExpandDims;StatefulPartitionedCall/model/deconv_expand_dim/ExpandDims
1228 model/deconv/Shape;StatefulPartitionedCall/model/deconv/Shape
1229 model/deconv/strided_slice;StatefulPartitionedCall/model/deconv/strided_slice1
1230 model/deconv/strided_slice_1;StatefulPartitionedCall/model/deconv/strided_slice_1
1231 model/deconv/strided_slice_2;StatefulPartitionedCall/model/deconv/strided_slice_22
1232 model/deconv/stack;StatefulPartitionedCall/model/deconv/stack
1233 model/deconv/conv2d_transpose;StatefulPartitionedCall/model/deconv/conv2d_transpose1
1234 model/deconv/BiasAdd;StatefulPartitionedCall/model/deconv/BiasAdd
1235 Identity

我剛剛做了一個 for 循環解釋器->tensors_size()來列出圖層。 問題:

  • interpreter->tensors_size()返回一個更大的數字,該數字因一個測試而異於另一個測試(大約 1300)。
  • interpreter->outputs()[0]返回 Identity 的索引 (1235)。
  • 我在 C++ 中有deconv_expand_dimdeconv層,但我沒有deconv_reduce_dim層。
  • interpreter->tensor(outputIndex)->dims->size等於 0,這是有問題的,因為這是網絡的 output。 我是否在轉換過程中錯過了一個步驟? 如何獲得有效的 output?

非常感謝任何幫助,謝謝。

我想我找到了它不起作用的原因。 正如您在最后一層中看到的那樣,我使用了運算符:

K.squeeze(x, axis=2)

似乎尚不支持指定的軸(“tf.squeeze - 只要未提供軸。”,上次訪問時間:2020 年 7 月 28 日, 鏈接)。

That is why I don't have the same output in C++ as in Python, Tensorflow Lite doesn't support my network for the moment.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM