Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何正确保存keras模型以便能够使用hub.Module()加载?_Python 3.x_Tf.keras_Tensorflow Hub - Fatal编程技术网

Python 3.x 如何正确保存keras模型以便能够使用hub.Module()加载?

Python 3.x 如何正确保存keras模型以便能够使用hub.Module()加载?,python-3.x,tf.keras,tensorflow-hub,Python 3.x,Tf.keras,Tensorflow Hub,我正在尝试在一个新的图像集上重新训练inception v3 当我试图保存模型时,我收到一个错误 我试过: tf.keras.models.save_model(model, filename) 及 及 所有这些都给了我一个类似的错误,模块没有'名称'/strong>' 我已附上与问题相关的代码 from __future__ import absolute_import from __future__ import division from __future__ import pr

我正在尝试在一个新的图像集上重新训练inception v3

当我试图保存模型时,我收到一个错误

我试过:

    tf.keras.models.save_model(model, filename)

所有这些都给了我一个类似的错误,模块没有'名称'/strong>'

我已附上与问题相关的代码

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import argparse
import os
import sys

import numpy as np
import tensorflow as tf
import tensorflow_hub as hub
import matplotlib.pyplot as plt

FLAGS = None
这将保存一个“.h5”模型文件,但我收到一个命名错误:

Traceback (most recent call last):
  File "/home/raphy/projects/vmi/tf_cpu/retrain.py", line 305, in <module>
    tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)
  File "/home/raphy/.local/lib/python3.6/site-packages/tensorflow/python/platform/app.py", line 125, in run
    _sys.exit(main(argv))
  File "/home/raphy/projects/vmi/tf_cpu/retrain.py", line 205, in main
    model.save(file)
  File "/home/raphy/.local/lib/python3.6/site-packages/tensorflow/python/keras/engine/sequential.py", line 319, in save
    save_model(self, filepath, overwrite, include_optimizer)
  File "/home/raphy/.local/lib/python3.6/site-packages/tensorflow/python/keras/engine/saving.py", line 105, in save_model
    'config': model.get_config()
  File "/home/raphy/.local/lib/python3.6/site-packages/tensorflow/python/keras/engine/sequential.py", line 326, in get_config
    'config': layer.get_config()
  File "/home/raphy/.local/lib/python3.6/site-packages/tensorflow/python/keras/layers/core.py", line 756, in get_config
    function = self.function.__name__
AttributeError: 'Module' object has no attribute '__name__'
回溯(最近一次呼叫最后一次):
文件“/home/graphic/projects/vmi/tf_cpu/retain.py”,第305行,在
tf.app.run(main=main,argv=[sys.argv[0]]]+未解析)
文件“/home/graphic/.local/lib/python3.6/site packages/tensorflow/python/platform/app.py”,第125行,运行中
_系统出口(主(argv))
文件“/home/graphic/projects/vmi/tf_cpu/retain.py”,第205行,主目录
model.save(文件)
文件“/home/graphic/.local/lib/python3.6/site packages/tensorflow/python/keras/engine/sequential.py”,第319行,保存
保存模型(self、filepath、overwrite、include\u优化器)
文件“/home/graphic/.local/lib/python3.6/site packages/tensorflow/python/keras/engine/saving.py”,第105行,在save_模型中
“config”:model.get_config()
文件“/home/graphic/.local/lib/python3.6/site packages/tensorflow/python/keras/engine/sequential.py”,第326行,在get_config中
“config”:layer.get_config()
文件“/home/graphic/.local/lib/python3.6/site packages/tensorflow/python/keras/layers/core.py”,第756行,在get_config中
函数=self.function.\u\u名称__
AttributeError:“模块”对象没有属性“\u_name\u_”
我想以tf_hub模型的格式保存模型。

如中所述

如果您对托管自己的模型库感兴趣 可通过您的HTTP分发版tensorflow_hub库加载 服务应遵循以下协议

换句话说,您不能使用TF Hub加载任何模型,但只能加载中存在的模块

如果要加载保存的模型,可以使用
tf.Saved\u Model.Load

但如果您想使用TF Hub进行此操作,请参阅

此外,请提及以下说明,以防链接无法正常工作:

托管您自己的模型

TensorFlow Hub提供了一个开放式的存储库,其中存储了大量经过培训的模型。
tensorflow\u hub
库可以从该存储库和其他基于HTTP的机器学习模型存储库加载模型。特别是,该协议允许使用标识模型的URL来记录模型和端点来获取模型

如果您有兴趣托管自己的模型存储库,这些模型可以通过
tensorflow\u hub
库加载,那么您的HTTP分发服务应该遵循以下协议

协议:

当URL(如
https://example.com/model
用于识别要加载或实例化的模型,模型解析器将在附加查询参数后尝试从URL下载压缩tarball?
tf hub format=compressed

查询参数将被解释为客户机感兴趣的模型格式的逗号分隔列表。目前只定义了“压缩”格式

压缩的格式表示客户机需要一个带有模型内容的
tar.gz
存档。存档的根目录是模型目录的根目录,应该包含一个SavedModel,如本例所示:

# Create a compressed model from a SavedModel directory.
$ tar -cz -f model.tar.gz --owner=0 --group=0 -C /tmp/export-model/ .

# Inspect files inside a compressed model
$ tar -tf model.tar.gz
./
./variables/
./variables/variables.data-00000-of-00001
./variables/variables.index
./assets/
./saved_model.pb
用于TF1中不推荐使用的API的tarball还将包含一个./tfhub\u module.pb文件。TF2 SavedModels的hub.load()API会忽略此类文件

tensorflow_hub库要求对模型URL进行版本控制,并且给定版本的模型内容是不可变的,因此可以无限期地缓存它。

如中所述

如果您对托管自己的模型库感兴趣 可通过您的HTTP分发版tensorflow_hub库加载 服务应遵循以下协议

换句话说,您不能使用TF Hub加载任何模型,但只能加载中存在的模块

如果要加载保存的模型,可以使用
tf.Saved\u Model.Load

但如果您想使用TF Hub进行此操作,请参阅

此外,请提及以下说明,以防链接无法正常工作:

托管您自己的模型

TensorFlow Hub提供了一个开放式的存储库,其中存储了大量经过培训的模型。
tensorflow\u hub
库可以从该存储库和其他基于HTTP的机器学习模型存储库加载模型。特别是,该协议允许使用标识模型的URL来记录模型和端点来获取模型

如果您有兴趣托管自己的模型存储库,这些模型可以通过
tensorflow\u hub
库加载,那么您的HTTP分发服务应该遵循以下协议

协议:

当URL(如
https://example.com/model
用于识别要加载或实例化的模型,模型解析器将在附加查询参数后尝试从URL下载压缩tarball?
tf hub format=compressed

查询参数将被解释为客户机感兴趣的模型格式的逗号分隔列表。目前只定义了“压缩”格式

压缩的格式表示客户机需要一个带有模型内容的
tar.gz
存档。存档的根目录是模型目录的根目录,应该包含一个SavedModel,如本例所示:

# Create a compressed model from a SavedModel directory.
$ tar -cz -f model.tar.gz --owner=0 --group=0 -C /tmp/export-model/ .

# Inspect files inside a compressed model
$ tar -tf model.tar.gz
./
./variables/
./variables/variables.data-00000-of-00001
./variables/variables.index
./assets/
./saved_model.pb
用于TF1中不推荐使用的API的tarball还将包含一个./tfhub\u module.pb文件。TF2 SavedModels的hub.load()API会忽略此类文件

张量
def get_and_gen_images(module):
    """
    get images from image directory or url

    :param module: module (to get required image size info
    :return: batched image data
    """
    data_name = os.path.splitext(os.path.basename(FLAGS.image_dir_or_url))[0]
    print("data: ", data_name)

    # download images to cache if not already
    if FLAGS.image_dir_or_url.startswith('https://'):
        data_root = tf.keras.utils.get_file(data_name,
                                            FLAGS.image_dir_or_url,
                                            untar=True,
                                            cache_dir=os.getcwd())
    else:   # specify directory with images
        data_root = tf.keras.utils.get_file(data_name,
                                            FLAGS.image_dir_or_url)

    # get image size for specific module
    image_size = hub.get_expected_image_size(module)


    # TODO: this is where to add noise, rotations, shifts, etc.
    image_generator = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1. / 255, validation_split=0.2)

    # create image stream
    train_image_data = image_generator.flow_from_directory(str(data_root),
                                                           target_size=image_size,
                                                           batch_size=FLAGS.batch_size,
                                                           subset='training')

    validation_image_data = image_generator.flow_from_directory(str(data_root),
                                                                target_size=image_size,
                                                                batch_size=FLAGS.batch_size,
                                                                subset='validation')

    return train_image_data, validation_image_data
# load module (will download from url or directory_
module = hub.Module(FLAGS.tfhub_module)

# generate image stream
train_image_data, validation_image_data = get_and_gen_images(module)

model = create_model(module, train_image_data)
model.summary()

file = FLAGS.saved_model_dir + "/modelname.h5"

model.save(file)
Traceback (most recent call last):
  File "/home/raphy/projects/vmi/tf_cpu/retrain.py", line 305, in <module>
    tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)
  File "/home/raphy/.local/lib/python3.6/site-packages/tensorflow/python/platform/app.py", line 125, in run
    _sys.exit(main(argv))
  File "/home/raphy/projects/vmi/tf_cpu/retrain.py", line 205, in main
    model.save(file)
  File "/home/raphy/.local/lib/python3.6/site-packages/tensorflow/python/keras/engine/sequential.py", line 319, in save
    save_model(self, filepath, overwrite, include_optimizer)
  File "/home/raphy/.local/lib/python3.6/site-packages/tensorflow/python/keras/engine/saving.py", line 105, in save_model
    'config': model.get_config()
  File "/home/raphy/.local/lib/python3.6/site-packages/tensorflow/python/keras/engine/sequential.py", line 326, in get_config
    'config': layer.get_config()
  File "/home/raphy/.local/lib/python3.6/site-packages/tensorflow/python/keras/layers/core.py", line 756, in get_config
    function = self.function.__name__
AttributeError: 'Module' object has no attribute '__name__'
# Create a compressed model from a SavedModel directory.
$ tar -cz -f model.tar.gz --owner=0 --group=0 -C /tmp/export-model/ .

# Inspect files inside a compressed model
$ tar -tf model.tar.gz
./
./variables/
./variables/variables.data-00000-of-00001
./variables/variables.index
./assets/
./saved_model.pb