tensorflow 模型请求大小为[null,100,100,3]的Tensor,但我不知道如何正确转换图像

lsmd5eda  于 2023-08-06  发布在  其他
关注(0)|答案(2)|浏览(87)

我相信解决办法就在某个地方,但我一直找不到。我最初在普通的tensorflow中训练模型,但它在转换后正在tensorflowjs中使用。我现在的错误是
Uncatch(promise)错误:大小(30000)必须与形状100,100,3的乘积匹配
虽然我有很多人通过我的尝试。
我现在的准则是

function preprocess(imageData) {
    //const img_arr = cv.imread(imageData);
    let inputTensor = tf.browser.fromPixels(imageData);
    const offset = tf.scalar(255.0);
    const normalized = tf.scalar(1.0).sub(inputTensor.div(offset));
    const batchInputShape = [100, 100, 3];
    const flattenedInput = tf.reshape(normalized, [batchInputShape]);
    console.log(flattenedInput.shape);
    return flattenedInput;

字符串
这个函数的结果然后被输入到我的模型中,这产生了误差。我相信解决办法是显而易见的,但我一直找不到。
我也试过

const batchInputShape = [null, 100, 100, 3];
const flattenedInput = tf.reshape(normalized, [batchInputShape, -1]);


虽然这也不公平。

7cwmlq89

7cwmlq891#

如果有大量图像要处理,

batchInputShape = np.stack(list_of_image_arrays, axis=0)

字符串
输出形状:(batch_size,100,100,3)

z9smfwbn

z9smfwbn2#

首先,你可能想去掉batchInputShape周围的括号,因为tf.reform期望的是一个一维的数字数组,而你给它输入的是一个二维数组:null,100,100,3.
第二,我实际上不熟悉Tensorflow,但我猜在这种情况下null意味着任何数值都可以工作,因为你总是会得到一个可以乘以模型中的输入层Tensor的形状,无论该维度沿着的大小是多少。这是批量大小的情况,所以对您来说,它将是图像的数量。

相关问题