我正在使用saved_model.Builder
导出模型builder = tf.compat.v1.saved_model.Builder(output_dir)
inputs = graph.get_tensor_by_name('input_x:0')
outputs = graph.get_tensor_by_name('output_y:0')
model_input = tf.saved_model.utils.build_tensor_info(inputs)
model_output = tf.saved_model.utils.build_tensor_info(outputs)
signature_definition = tf.saved_model.signature_def_utils.build_signature_def(
inputs={'inputs': model_input},
outputs={'outputs': model_output},
method_name= tf.saved_model.signature_constants.PREDICT_METHOD_NAME)
builder.add_meta_graph_and_variables(
sess, [tf.saved_model.SERVING],
signature_def_map={tf.saved_model.DEFAULT_SERVING_SIGNATURE_DEF_KEY: signature_definition},
clear_devices=True)
builder.save()
我可以在tensorflow.js中导入并使用此模型。但是,它仅适用于具有input_x
张量的特定输入大小的图像。
有没有一种方法可以以input_x张量可以具有可变大小的方式导出模型?
答案 0 :(得分:0)
如果未导出模型并在python中使用该模型,即在图像上加载权重并进行推理,则输入图像的大小可能与训练期间使用的大小不同,并且预测仍将正常工作
如果该模型至少没有用于Python培训,为什么要用Python编写呢?优点可能是转换器提供的开箱即用的量化功能。但这也可以通过将js模型转换为js量化模型来实现。
要回答一个主要问题:模型始终期望有某种输入形状。 inputShape不能为变量。无论是用Python还是Js编写的模型,都是如此。由于模型本身无法在不修复inputShape的情况下编写,因此转换器也不能在没有模型的情况下工作。
最简单的解决方案是重新采样/调整新输入图像的大小,但是
这是要走的路。在给定输入形状后训练模型,唯一适用的方法是调整图像大小或裁剪图像。
答案 1 :(得分:0)
这个npm包可以重新采样/调整大小到给定的尺寸,并且可以在运行推理之前嵌入js逻辑中。 itk-image-pad-resample