【发布时间】:2020-10-05 09:25:19
【问题描述】:
我有这个模型:
这是一个假设检测面部情绪的卷积层, 我尝试在我的 TensorFlowJS 上实现它,所以我转换了它,当我尝试输入输入时,它需要一个 4d 张量,第一个输入为 null, 但 tensor4d 不允许:
形状应该只是一个数字,但是当我尝试将它添加到我的模型时它要求为空,我该怎么办? 这是我将 jpg 转换为张量的函数:
const imageToTensor = (rawData: ArrayBuffer) => {
const { width, height, data } = jpeg.decode(rawData, true);
const buffer = new Uint8Array(width * height * 3);
let offset = 0;
for (let i = 0; i < buffer.length; i += 3) {
buffer[i] = data[offset]; //red
buffer[i + 1] = data[offset + 1]; //green
buffer[i + 2] = data[offset + 2]; //blue
offset += 4; //skips Alpha value
}
//instead of 1 I need null, but wont let me -----
return tf.tensor4d(buffer, [1, height, width, 3]);
};
编辑:这是我的预测功能:
const trypredict = async () => {
try {
let image = require("../assets/smile.jpg");
image = tf.browser
.fromPixels(image)
.mean(2)
.toFloat()
.expandDims(0)
.expandDims(-1);
const imageAssetPath = Image.resolveAssetSource(image);
const response = await fetch(imageAssetPath.uri, {}, { isBinary: true });
const imageData = await response.arrayBuffer();
let imageTensor = imageToTensor(imageData);
imageTensor = imageTensor.resizeBilinear([48, 48]);
if (model) {
const prediction = await model.predict(imageTensor);
}
} catch (error) {
console.log(error);
}
};
【问题讨论】:
-
从上面的函数中,你能打印出张量的形状吗?您还在 React Native 应用程序中使用它吗?
-
我认为你完全误解了我对你其他问题的回答,这里没有这意味着它可以是任何值,而不是它必须为空。在您的情况下,使用 1 完全没问题,它是预期的正确值!
-
@Dr.Snoopy 这就是我这样做时发生的情况:检查时出错:预期 conv2d_8_input 的形状为 [null,48,48,1] 但得到的数组的形状为 [1,560,617,3]。
-
@yuRa 错误有点显示形状,它在本机反应:检查时出错:预期 conv2d_8_input 的形状为 [null,48,48,1] 但得到的数组形状为 [1,560,617,3] .你怎么看?
-
图片必须是48x48,一个通道,而你的图像是560x617,三个通道,你需要调整图像大小并转换为灰度。该错误与第一个维度无关。
标签: tensorflow keras tensorflow.js