我目前正在通过tensorflow.js在浏览器上运行经过keras训练的模型。由于传入的所有数据都是该尺寸,因此在进入模型之前,我必须将图像尺寸减小到48x48。我打算使用以下方法将网络摄像头快照的大小减小到48x48:
let imgclone = tf.image.resizeBilinear(imgmod, [48,48], true).toFloat();
这使我可以正确地绘制到画布上,并在较小的画布上获取实时缩小尺寸的网络摄像头流。然后,我将快照传递给我的模型,并且出现以下错误:
期望conv2d_1_input具有形状[null,48,48,1]但得到数组 形状为[1,48,48,3]。
所以我不确定在使用tensorflow.js时获得最终成形张量的正确方法。我确实尝试使用 tf.reshape(preprocedimg,[null,48,48,1]),但是当然这只会修改形状并提供我的尺寸不匹配的错误。
打算继续搜寻Google,但我也想在这里发布。您将能够提供的任何信息将不胜感激!
答案 0 :(得分:1)
由于要获得形状为48、48、1的张量,因此可以使用tf.slice
tensor.slice([0,0,0], [48, 48,1])
答案 1 :(得分:0)
我有同样的问题。我只想分享我找到的解决方案。
tf.browser.fromPixels(像素,numChannels?) numChannels默认为3(RGB),将其更改为1,如下所示。
let tensor = tf.fromPixels(image,1)
希望对您也有帮助。
TensorFlow文档(https://js.tensorflow.org/api/latest/#browser.fromPixels)