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

从 keras 模型转换为张量流精简版

慕容铭
2023-03-14

这里是一个初学者,你会看到:)我试图将我的keras (.h5)训练模型转换为TensorFlow Lite格式,但我有以下错误;

属性错误: 类型对象 “TFLite转换器” 没有属性 “from_keras_model”

    import os
    import sys
    import argparse
    import warnings
    
    def get_parent_dir(n=1):
        """returns the n-th parent dicrectory of the current
        working directory"""
        current_path = os.path.dirname(os.path.abspath(__file__))
        for _ in range(n):
            current_path = os.path.dirname(current_path)
        return current_path 

   src_path = os.path.join(get_parent_dir(0), "src")
   sys.path.append(src_path)

   utils_path = os.path.join(get_parent_dir(1), "Utils")
   sys.path.append(utils_path) 
   import numpy as np
   import keras.backend as K
   from keras.layers import Input, Lambda
   from keras.models import Model
   from keras.optimizers import Adam

   from keras.callbacks import (
     TensorBoard,
     ModelCheckpoint,
     ReduceLROnPlateau,
     EarlyStopping,
   )
   from keras_yolo3.yolo3.model import (
     preprocess_true_boxes,
     yolo_body,
     tiny_yolo_body,
     yolo_loss,
   )
   from keras_yolo3.yolo3.utils import get_random_data
   from PIL import Image
   from time import time
   import tensorflow.compat.v1 as tf
   import pickle

   from Train_Utils import (
     get_classes,
     get_anchors,
     create_model,
     create_tiny_model,
     data_generator,
     data_generator_wrapper,
     ChangeToOtherMachine,
   )
  
 gpu = tf.config.list_physical_devices("GPU")
       tf.config.experimental.set_memory_growth(gpu[0], True)

       keras_path = os.path.join(src_path, "keras_yolo3")
       Data_Folder = os.path.join(get_parent_dir(1), "Data")
       Image_Folder = os.path.join(Data_Folder, "Source_Images", "Training_Images")
       VoTT_Folder = os.path.join(Image_Folder, "vott-csv-export")
       YOLO_filename = os.path.join(VoTT_Folder, "data_train.txt")

       Model_Folder = os.path.join(Data_Folder, "Model_Weights")
       YOLO_classname = os.path.join(Model_Folder, "data_classes.txt")

       log_dir = Model_Folder
       anchors_path = os.path.join(keras_path, "model_data", "yolo_anchors.txt")
       weights_path = os.path.join(keras_path, "yolo.h5")
 # Convert the model.
    converter = tf.lite.TFLiteConverter.from_keras_model(model)
    tflite_model = converter.convert()

    # Save the model.
    with open('model.tflite', 'wb') as f:
        f.write(tflite_model)

model.save_weights(os.path.join(log_dir, "trained_weights_final.h5"))

共有1个答案

姚乐家
2023-03-14

既然你这样做:

import tensorflow.compat.v1 as tf

< code > TF . lite . tflite converter 解析为TF 1.x转换器API。

通常,我建议将所有内容迁移到TF2.x。

如果不可能,您可以尝试:

# Now `lite` is the V2 TFLite package, not `tf.compat.v1.lite`
from tensorflow import lite
converter = lite.TFLiteConverter.from_keras_model(model)
 类似资料:
  • 我有一个保存在.pb文件中的模型,它工作正常,但当我使用命令tflite_convert或python api将其转换为tflite模型时,结果是错误的。我发现权重在转换后发生了变化。.pb文件中第一个卷积层的权重如下: 和第一卷积层的权重。tflite文件如下: 似乎有一些关系。 张量流版本是1.12。 命令是 还有另一个类似的问题没有答案:tflite权重

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

  • Tensorflow 1.12发行说明指出:“Keras模型现在可以直接导出为SavedModel格式(tf.contrib.saved_model.save_Keras_mode()),并与Tensorflow服务一起使用。”。所以我试了一下- 我用一行代码导出了一个简单的模型。但是,Tensorflow服务不识别模型。我猜问题出在docker调用上,可能是模型定义中缺少了“signature_

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

  • 问题内容: 我有一个使用Keras和Tensorflow作为后端训练的模型,但是现在我需要将我的模型转换为特定应用程序的张量流图。我尝试执行此操作并进行了预测以确保其正常工作,但是与从model.predict()收集的结果进行比较时,我得到了非常不同的值。例如: 返回: keras预测的值是正确的,但tf图的结果却不正确。 如果它有助于了解最终的预期应用程序,那么我将使用tf.gradients

  • 我已经使用Keras来微调MobileNet v1。现在我有,我需要将其转换为TensorFlow Lite,以便在Android应用程序中使用。 我使用TFLite转换脚本。我可以在没有量化的情况下进行转换,但我需要更高的性能,所以我需要进行量化。 如果我运行此脚本: 它失败了: F tensorflow/contrib/lite/toco/tooling\u util。cc:1634]Arra