我正在尝试将现有的冻结Tensorflow模型转换为tensorflow_hub模块以供图像分类传输学习使用,转换通过时没有错误,但新模块的推理精度非常低,只有40%〜50%,我在这里想念什么?
我正在使用Tensorflow-hub git存储库中的图像分类传输倾斜示例代码“ retrain.py”。 “ retrain.py”脚本使用Tensorflow-hub模块作为输入,因此我从“ http://download.tensorflow.org/models/mobilenet_v1_2018_02_22/mobilenet_v1_1.0_224.tgz”下载了冻结的预训练模型,并将其转换为集线器模块,然后将该新模块用作重新训练脚本的输入。我的设置是ubuntu14.04,python2.7,Tensorflow-1.12和Tensorflow-hub-0.4.0。
import tensorflow as tf
import tensorflow_hub as hub
import numpy as np
MODEL="mobilenet_v1_1.0_224/mobilenet_v1_1.0_224_frozen.pb"
MODULE_PATH="output_hub"
def module_fn():
input_name="input:0"
output_name="MobilenetV1/Predictions/Reshape_1:0"
with tf.gfile.GFile(MODEL, 'rb') as f:
graph_def=tf.GraphDef()
graph_def.ParseFromString(f.read())
input_tensor = tf.placeholder(tf.float32, [None, 224,224, 3])
output_tensor, = tf.import_graph_def(graph_def, input_map = {input_name: input_tensor}, return_elements=[output_name])
hub.add_signature(inputs = {"images": input_tensor}, outputs = output_tensor)
spec = hub.create_module_spec(module_fn)
with tf.Graph().as_default():
module = hub.Module(spec)
input = np.random.normal(0, 1, (1, 224, 224, 3))
output = module(input)
with tf.Session() as session:
session.run(output)
module.export(MODULE_PATH, session=session)
spec = hub.load_module_spec(MODULE_PATH)
height, width = hub.get_expected_image_size(spec)
with tf.Graph().as_default() as graph:
module = hub.Module(spec)
input_tensor = tf.placeholder(tf.float32, [None, height, width, 3])
output_tensor = module(input_tensor)
with tf.Session() as session:
for node in graph.as_graph_def().node:
print(node.name)
答案 0 :(得分:0)
您可以将retrain.py直接与https://tfhub.dev/google/imagenet/mobilenet_v1_100_224/feature_vector/3一起使用,并保存手动转换。 retrain.py将在出路时为您冻结生成的模型。
也就是说,还有一种新的tf2_image_retraining colab甚至可以进行微调,但是它使用TensorFlow 2,并且两者都仍处于预览状态。