我在Tensorflow中有一个可以在Python上正常工作的模型。现在,它已保存为模型,并尝试转换为TensorflowJS。
转换后的模型似乎无法正常工作。尽管输入为[1,96,192,3],但TensorMap的平均值似乎为0,形状为[0]。
转换过程如下。...
tensorflowjs_converter --input_format=tf_saved_model ~/Projects/models/model_0 ~/Projects/modelsjs/model_0
这正常工作,并且似乎也可以加载。但是,在进行预测时,会抛出错误,我们将不胜感激。
<script>
async function handleButtonClick(){
for(var i=0; i<1;i++)
{
var t0 = performance.now();
console.log("Loading - model_"+i);
var inputTensor = tf.tensor4d(input);
var model = await tf.loadGraphModel('/modelsjs/model_'+i+'/model.json');
var poutput = model.predict(inputTensor);
}
</script>
错误显示如下。
graph_model.ts:213 Uncaught (in promise) Error: The model contains control flow or dynamic shape ops, please use executeAsync method
at t.execute_ (graph_model.ts:213)
at t.predict (graph_model.ts:169)
at (index):157
at engine.ts:156
at t.scopedRun (engine.ts:167)
at t.tidy (engine.ts:153)
at Object.t.tidy (environment.ts:186)
at handleButtonClick ((index):156)
根据上述错误,尝试使用executeAsync进行预测,但会产生与此问题相关的错误。
<script>
async function handleButtonClick(){
for(var i=0; i<1;i++)
{
var t0 = performance.now();
console.log("Loading - model_"+i);
var inputTensor = tf.tensor4d(input);
var model = await tf.loadGraphModel('/modelsjs/model_'+i+'/model.json');
console.log("Load model_" + i + "took " + (t1 - t0) + " milliseconds.");
const res = await model.executeAsync(inputTensor);
}
</script>
错误显示如下。并且似乎与Tensormap中的$ mean值相关。该值为[0]
broadcast_util.ts:81 Uncaught (in promise) Error: Operands could not be broadcast together with shapes 1,12,24,64 and 0.
at un (broadcast_util.ts:81)
at new kn (batchnorm_packed_gpu.ts:32)
at t.batchNormalization (backend_webgl.ts:869)
at Bt.engine.runKernel.$x (batchnorm.ts:344)
at engine.ts:206
at t.scopedRun (engine.ts:167)
at t.runKernel (engine.ts:202)
at $a (batchnorm.ts:343)
at batchNorm (operation.ts:46)
at xy (normalization_executor.ts:31)
在开发人员工具中进行了一些挖掘之后,错误似乎从这里开始.....
将“ strict”设置为true,该模型仍会加载且不会引发错误。
var model = await
tf.loadGraphModel('/modelsjs/model_0/model.json', {onProgress:onProgressCallback, strict:true});
遗憾的是,我无法共享该模型,因为它是专有的。
答案 0 :(得分:0)
模型错误。
最初是Keras模型,已转换为Tensorflow SavedModel。将此模型转换为Tensorflowjs无效。
但是,将原始模型从Keras转换为Tensorflowjs是可行的。
经验教训,不要过多地混合模型!