【问题标题】:Tensorflowjs : Uncaught (in promise) TypeError: Cannot read property 'length' of undefinedTensorflowjs:未捕获(承诺)类型错误:无法读取未定义的属性“长度”
【发布时间】:2019-11-30 21:56:46
【问题描述】:

这是我在页面加载后对从 DOM 抓取的图像进行预处理的最新问题。我们已经做到了用户可以加载图像的位置,当他们点击我们的按钮来识别图像时,它会通过预处理图像的过程来接受我们的模型,打印出 Tensor 对象值,然后当它点击model.predict 行,它因标题中的错误而中断; Uncaught (in promise) TypeError: Cannot read property 'length' of undefined 底部有这个; at HTMLDivElement.<anonymous> (main.js:39)

但是,它所讨论的 HTMLDivElement 是在我每次单击识别按钮时在控制台记录它以进行完整性检查时定义的; User Image: <img src="data:image/png;base64,..." class="user_pic">

这是以详细格式打印的张量对象:

Tensor
  dtype: float32
  rank: 4
  shape: [1,200,200,3]
  values:
    [[[[56 , 105, 11 ],
       [53 , 101, 9  ],
       [49 , 97 , 8  ],
       ...,
       [91 , 151, 99 ],
       [92 , 152, 101],
       [91 , 151, 99 ]],

      [[56 , 102, 12 ],
       [52 , 98 , 9  ],
       [48 , 93 , 8  ],
       ...,
       [94 , 154, 103],
       [95 , 155, 104],
       [94 , 154, 103]],

      [[53 , 99 , 11 ],
       [51 , 97 , 11 ],
       [44 , 90 , 7  ],
       ...,
       [92 , 151, 103],
       [93 , 152, 104],
       [94 , 153, 105]],

      ...
      [[21 , 61 , 8  ],
       [21 , 61 , 8  ],
       [21 , 61 , 8  ],
       ...,
       [28 , 88 , 1  ],
       [36 , 93 , 4  ],
       [44 , 99 , 9  ]],

      [[22 , 62 , 9  ],
       [22 , 62 , 9  ],
       [22 , 62 , 9  ],
       ...,
       [29 , 92 , 3  ],
       [29 , 89 , 1  ],
       [40 , 98 , 7  ]],

      [[22 , 62 , 10 ],
       [22 , 62 , 10 ],
       [22 , 62 , 10 ],
       ...,
       [32 , 97 , 7  ],
       [30 , 92 , 3  ],
       [34 , 94 , 4  ]]]]

另一个奇怪的部分,这是我在其他教程中注意到的并且有效的,是当我将张量图像处理为可接受的格式时,我将它分配给一个变量,但是当该变量后来被调用时上面是undefined

下面的完整错误:

Uncaught (in promise) TypeError: Cannot read property 'length' of undefined
    at Fm (tfjs@latest:2)
    at e.predict (tfjs@latest:2)
    at e.predict (tfjs@latest:2)
    at HTMLDivElement.<anonymous> (main.js:39)

下面是我的代码

let identify = document.querySelector('.identify')
if (identify) {
    identify.addEventListener('click', async function () {
        event.preventDefault()

        // Just a promise but is the model I need. Checked the layers and it matches up
        const model = await tf.loadLayersModel('model_json')
        console.log('This is your model: ', model)

        let user_pic = document.querySelector('.user_pic')
        console.log('User Image: ', user_pic)

        // Preprocessing is done here as it wasn't working when I saved it to a variable
        prediction = model.predict(
            tf.browser.fromPixels(user_pic).cast('float32').expandDims().print(true), { batchSize: 4 })

        console.log('This is your model: ', model, 'This is your prediction: ', prediction)
    })

我很好奇其他人是否遇到过这个问题并了解如何解决它。我对 Tensorflow.js 很陌生,但我能找到的并不是我所需要的。如果有人能帮忙,非常感谢

【问题讨论】:

    标签: javascript tensorflow tensor tensorflow.js


    【解决方案1】:

    您将传递给model.predict print 返回的内容,而不是张量本身

    prediction = model.predict(
        tf.browser.fromPixels(user_pic).cast('float32').expandDims())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2022-01-05
      • 2019-12-19
      • 1970-01-01
      • 2018-10-29
      相关资源
      最近更新 更多