在 tensorflow.js 中,重塑张量的推荐方法是什么?

In tensorflow.js, what is recommended way of reshaping a tensor?

我目前正在努力通过 tensorflow.js 让经过 keras 训练的模型在浏览器上运行。在传递到我的模型之前,我必须将图像的大小减小到 48x48,因为我训练的所有数据都是那个大小。我已经开始使用以下方法将网络摄像头快照的大小减小到 48x48:

let imgclone = tf.image.resizeBilinear(imgmod, [48,48], true).toFloat(); 

这使我能够正确地绘制到 canvas 并在较小的 canvas 中获取我的实时缩小网络摄像头流。然后我将快照传递给我的模型,我收到以下错误:

expected conv2d_1_input to have shape [null,48,48,1] but got array with shape [1,48,48,3].

所以我只是不确定在使用 tensorflow.js 时获取最终形状张量的正确方法。我确实尝试使用 tf.reshape(preprocedimg, [null, 48, 48, 1]) 但这当然只是修改了形状并提供了我的尺寸不匹配的错误。

打算继续搜索 Google,但我想我也会 post 这里。如果您能提供任何信息,我们将不胜感激!

由于要得到形状为48,48,1的张量,可以使用tf.slice

  tensor.slice([0,0,0], [48, 48,1])

我遇到了同样的问题。我只想分享我找到的解决方案。

tf.browser.fromPixels(像素,numChannels?) numChannels 默认为 3(RGB),将其更改为 1,如下所示。

let tensor = tf.fromPixels(image,1)

希望对你也有帮助。

TensorFlow 文档 (https://js.tensorflow.org/api/latest/#browser.fromPixels)