【问题标题】:mode.save() create only one filemode.save() 只创建一个文件
【发布时间】:2020-06-13 13:22:30
【问题描述】:

我阅读了 model.save() 的文档。它说它创建了文件夹,但是当我保存它时它只创建一个文件。当我使用此文件将代码从 keras 更改为 tensorflow-lite 时,它​​会出现此错误:

OSError: SavedModel file does not exist at: C:\Users\Munib\New folder\3_layer_model_try3/{saved_model.pbtxt|saved_model.pb}

我也在上传文件的图片及其位置。

【问题讨论】:

  • 你有什么理由在路径规范中从使用黑斜杠换成正斜杠? IE。你的路径应该是C:\Users\Munib\New folder\3_layer_model_try3\{saved_model.pbtxt|saved_model.pb}吗?
  • @jwalton 先生,这是我得到的文件名为 new_model 的错误,现在我错误地发布了先前文件的错误,文件的位置是:C:\Users\Munib\New folder 。我得到的错误是:OSError: SavedModel file does not exist at: C:\Users\Munib\New folder\my_model.pb/{saved_model.pbtxt|saved_model.pb}
  • 先生,你能告诉我为什么我的 model.save() 只创建一个文件,而在互联网上它说它创建包含文件的文件夹
  • 先生,代码是:import tensorflow as tf # Converting a SavedModel to a TensorFlow Lite model. saved_model_dir = r"C:\Users\Munib\New folder" converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir) tflite_model = converter.convert()

标签: python tensorflow keras model


【解决方案1】:

我认为您保存的模型是 keras model 而不是 'SavedModel. So, you need to usefrom_keras_model`,如下所示。

我尝试使用简单模型来模拟问题,并成功重现了您的问题。检查下面的代码。

!pip install tf-nightly
import tensorflow as tf
mnist = tf.keras.datasets.mnist

(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test)

训练模型后,我猜你保存如下

model.save('my_model.h5',save_format='h5')

然后尝试将模型转换为 tflite 模型(以下是您的代码)

# Converting a SavedModel to a TensorFlow Lite model. 
saved_model_dir = '/content/my_model.h5' #r"C:\Users\Munib\New folder" 
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir) 
tflite_model = converter.convert()

使用上面的代码,我得到了以下错误(看起来和你面临的错误一样)

---------------------------------------------------------------------------
OSError                                   Traceback (most recent call last)
<ipython-input-4-a9a46a590f90> in <module>()
      1 # Converting a SavedModel to a TensorFlow Lite model.
      2 saved_model_dir = '/content/my_model.h5' #r"C:\Users\Munib\New folder"
----> 3 converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
      4 tflite_model = converter.convert()

4 frames
/usr/local/lib/python3.6/dist-packages/tensorflow/python/saved_model/loader_impl.py in parse_saved_model(export_dir)
    111                   (export_dir,
    112                    constants.SAVED_MODEL_FILENAME_PBTXT,
--> 113                    constants.SAVED_MODEL_FILENAME_PB))
    114 
    115 

OSError: SavedModel file does not exist at: /content/my_model.h5/{saved_model.pbtxt|saved_model.pb}

这是更新后的代码

# Converting a SavedModel to a TensorFlow Lite model. 
saved_model_dir = '/content/my_model.h5' #r"C:\Users\Munib\New folder" 
loaded_model = tf.keras.models.load_model(saved_model_dir)
converter = tf.lite.TFLiteConverter.from_keras_model(loaded_model)# .from_saved_model(saved_model_dir) 
tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)

完整代码是here

【讨论】:

  • 非常感谢先生,它现在正在工作。你能帮我多一点吗我是机器学习的新手
  • 我会帮助你的。但是,请将您的问题发布到社区,以便如果我不能快速回答,那么社区的人会回答,您可以更快地学习。
  • 好的先生,这个模型现在处于冻结状态还是有什么方法可以检查模型?
  • 运行代码时,可以看到“converted_model.tflite”文件写入本地目录。您可以使用lutzroeder.github.io/netron 来可视化您的模型。
  • 谢谢先生,它的显示几乎相似,但我与 keras 模型有点不同。先生,我在我的答案中发布了图片,以便您帮助我理解它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-10
  • 2015-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-06
  • 2011-12-07
相关资源
最近更新 更多