在 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)
我目前正在努力通过 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)