Tensorflowjs 操作数无法与形状一起广播
Tensorflowjs Operands could not be broadcast together with shapes
我在 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});
遗憾的是,我无法分享该模型,因为它是专有的。
型号有误
最初是一个 Keras 模型,后来转换为 Tensorflow SavedModel。将此模型转换为 Tensorflowjs 无效。
但是,将原始模型从 Keras 转换为 Tensorflowjs 是可行的。
吸取教训,不要混合太多模型!
我在 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});
遗憾的是,我无法分享该模型,因为它是专有的。
型号有误
最初是一个 Keras 模型,后来转换为 Tensorflow SavedModel。将此模型转换为 Tensorflowjs 无效。
但是,将原始模型从 Keras 转换为 Tensorflowjs 是可行的。
吸取教训,不要混合太多模型!