升级Tensorflow模型或为SavedModel重新训练

时间:2019-08-12 08:38:41

标签: tensorflow tensorflow-serving imagenet tensorflow-hub

我在2017年遵循“诗人的Tensorflow”并重新训练了自己的图像集,并创建了“ retrained_graph.pb”和“ retrained_labels.txt”
今天,我需要在Tensorflow Serving上运行此模型。 有两种方法可以完成此任务:

  1. 升级旧模型以将其保存为“ saved_model”格式,并在Tensorflow Serving上使用它-我发现一些SO帖子可以完成它(thisthat

  2. 与Keras(https://www.tensorflow.org/tutorials/images/hub_with_keras)一起使用最新的tensorflow Hub

我正在寻找其中的最佳选择,或者是一个新的选择。

1 个答案:

答案 0 :(得分:0)

我认为,使用 Tensorflow Hub 中的 Pre-Trained Models 或使用 tf.keras.applications 最好是这样,因为在这两种情况下,保存模型都不需要进行很多代码更改,以使其与Tensorflow Serving兼容。

MobileNet 内部提供的用于重用预训练模型的代码 tf.keras.applications 如下所示:

#Import MobileNet V2 with pre-trained weights AND exclude fully connected layers
IMG_SIZE = 224

from tensorflow.keras.layers import Dense, GlobalAveragePooling2D
from tensorflow.keras import Model


IMG_SHAPE = (IMG_SIZE, IMG_SIZE, 3)

# Create the base model from the pre-trained model MobileNet V2
base_model = tf.keras.applications.MobileNetV2(input_shape=IMG_SHAPE,
                                               include_top=False,
                                               weights='imagenet')

# Add Global Average Pooling Layer
x = base_model.output
x = GlobalAveragePooling2D()(x)

# Add a Output Layer
my_mobilenetv2_output = Dense(5, activation='softmax')(x)

# Combine whole Neural Network
my_mobilenetv2_model = Model(inputs=base_model.input, outputs=my_mobilenetv2_output)

您可以使用以下代码保存模型:

version = 1
MODEL_DIR = 'Image_Classification_Model'
export_path = os.path.join(MODEL_DIR, str(version))

tf.keras.models.save_model(model = model, filepath = export_path)