预期第一层具有 x 尺寸,但得到形状为 y 的数组

2023-12-05

(我刚刚在节点上启动tensorflow.js)
我一直在网上上下搜索答案。
混乱
我有来自的图像数据image1 = tf.fromPixels(img)我尝试将其与其他图像数据一起输入xs = tf.tensor([image1, image2])。困惑在于无论我如何将一堆图像输入到xs for model.fit,程序输出如下所述的错误。

我已经尝试过的
当我运行程序时出现错误Error: Error when checking input: expected conv2d_Conv2D1_input to have 4 dimension(s). but got array with shape 4,1
我知道我没有正确输入 xs。我在线阅读了一些有关如何以类似方式输入数组的文章tf.tensor([[0.2, 0.1], [0.2, 0.4]]);以及某种图像的批处理。我查看了一些文章,显示对于图像,您需要另一组图层:

model.add(tf.layers.conv2d({
    inputShape: [scaleHeight, scaleWidth, 3],
    kernelSize: 5,
    filters: 8,
    strides: 1,
    activation: 'relu',
    kernelInitializer: 'VarianceScaling'
}));
model.add(tf.layers.maxPooling2d({
    poolSize: [2, 2],
    strides: [2, 2]
}));

model.add(tf.layers.conv2d({
    kernelSize: 5,
    filters: 16,
    strides: 1,
    activation: 'relu',
    kernelInitializer: 'VarianceScaling'
}));

model.add(tf.layers.maxPooling2d({
    poolSize: [2, 2],
    strides: [2, 2]
}));

model.add(tf.layers.dense({ // Output
    units: 2,
    kernelInitializer: 'VarianceScaling',
    activation: 'softmax'
}));
model.compile({loss: 'categoricalCrossentropy', optimizer: tf.train.sgd(0.1), metrics: ['accuracy']});

好吧,我尝试输入它,尝试将它们转换为 typedarray 格式,尝试了很多东西。对于将多个图像转换为张量的正确 xs 变量,我非常迷失tf.fromPixels(canvas) for model.fit(xs, ys, {epochs: 100, options....});

Code:

var tf = require('@tensorflow/tfjs');
var cv = require('canvas');
var {Image, createCanvas, ImageData} = cv;
tf.disableDeprecationWarnings();

var scaleWidth = 16;
var scaleHeight = 16;

function getImage(path){
    var img = new Image();
    return new Promise(function(resolve, reject){
        img.onload = function(){
            var element = createCanvas(scaleWidth, scaleHeight);
            var ctx = element.getContext('2d');
            ctx.drawImage(img, 0, 0);
            ctx.scale(scaleWidth/img.width, scaleHeight/img.height);
            //resolve(Array.from(tf.fromPixels(element).flatten().dataSync()));

            resolve(tf.fromPixels(element));
        };
        img.src = path;
    });
}

var log = function(input){console.log(input)};

const model = tf.sequential();
model.add(tf.layers.conv2d({
    inputShape: [scaleHeight, scaleWidth, 3],
    kernelSize: 5,
    filters: 8,
    strides: 1,
    activation: 'relu',
    kernelInitializer: 'VarianceScaling'
}));
model.add(tf.layers.maxPooling2d({
    poolSize: [2, 2],
    strides: [2, 2]
}));

model.add(tf.layers.conv2d({
    kernelSize: 5,
    filters: 16,
    strides: 1,
    activation: 'relu',
    kernelInitializer: 'VarianceScaling'
}));

model.add(tf.layers.maxPooling2d({
    poolSize: [2, 2],
    strides: [2, 2]
}));

model.add(tf.layers.dense({ // Output
    units: 2,
    kernelInitializer: 'VarianceScaling',
    activation: 'softmax'
}));
model.compile({loss: 'categoricalCrossentropy', optimizer: tf.train.sgd(0.1), metrics: ['accuracy']});

(async function(){
    var cats = [], bland = [];

    cats[0] = await getImage('cats/0.jpeg');
    cats[1] = await getImage('cats/1.jpeg');
    bland[0] = await getImage('bland/0.png');
    bland[1] = await getImage('bland/1.png');

    var testCats = await getImage('c.jpeg');
    var testBland = await getImage('b.jpeg');

    var xs = tf.tensor([cats[0], cats[1], bland[0], bland[1]]); // confusion occurs here

    for(var c = 0; c < 10; c++){
        var result = await model.fit(xs, tf.tensor([[0, 1], [0, 1], [1, 0], [1, 0]]), {epochs: 100});
        console.log(result.history.loss[0]);
    }
})();

在我运行它之后,我期望至少记录模型的损失,但它抛出了这个错误:
Error: Error when checking input: expected conv2d_Conv2D1_input to have 4 dimension(s). but got array with shape 4,1


查看您的代码,传递到模型的数据与模型第一层 inputShape 的形状不同。

如何着手解决问题?

  • 检查数据形状。
console.log(xs.shape) // it will return (4,1)
  • 与 inputShape 进行比较

    数据形状应比 inputShape 高一维(batchsize 多一维)

    // Does `xs.inputShape.slice(1) ===[Scaleheight, scaleWidth,3]` ? 

    shape1 = xs.inputShape.slice(1)
    shape2 = [Scaleheight, scaleWidth,3]
    const same = (shape1.length == shape2.length) && shape1.every(function(e, i) {
    return e === shape2[i]; 
});

如果不相等,有两种方法可以解决问题

  • 如果可能的话,重塑数据,使用tf.reshape, tf.slice, tf.expandDims(), ...

  • 或者简单地将 inputShape 更改为等于我们的数据形状


在您的例子中,输入形状和数据形状之间存在明显的不匹配。

首先,您创建 xs 的方式是错误的。实际上,xs 的形状为 (4, 1),且值为 NaN。就好像你创建了一个tf.tensor带有张量数组。您可以这样创建 xs:

xs = tf.concat([...cats, ...blands], 0)

但不确定这是否能完全解决问题。您需要迭代上面概述的步骤,即检查 xs 的形状,与 inputShape 进行比较等等......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

预期第一层具有 x 尺寸,但得到形状为 y 的数组 的相关文章

  • 在优化器期间保持变量不变

    我有一个损失张量 L 的 TensorFlow 计算图 它取决于 2 个 tf Variables A 和 B 我想在保持 B 固定的同时在变量 A 上运行梯度上升 A L 与 A 的梯度 反之亦然 在 B 上运行梯度上升 B L 与 B
  • PHP清晰度卷积矩阵

    我正在使用一个卷积矩阵 http www php net manual en function imageconvolution php为了锐度PHP GD我想改变清晰度 level 我会去哪里做出改变如果我想做到的话或多或少尖锐 imag
  • “你好,TensorFlow!”使用 C API

    出于学习目的 如何使用 TensorFlow C API 编写此 Python 示例 import tensorflow as tf hello tf constant hello TensorFlow sess tf Session pr
  • python:将base64编码的png图像转换为jpg

    我想使用 python 将一些 base64 编码的 png 图像转换为 jpg 我知道如何从 Base64 解码回原始 import base64 pngraw base64 decodestring png b64text 但现在我怎样
  • Django:ImageField 需要文件路径还是实际的图像对象?

    Running Windows 7 Python 3 3 Django 1 6 我对如何将图像存储为 Django 数据库中表的一部分感到困惑 有一个领域叫做ImageField 这是Docs https docs djangoprojec
  • JFrame 图标在 Ubuntu 12.04 中不显示

    我使用一些图像图标开发了一个 Swing 应用程序 应用程序 jar 文件在 Windows 中按预期工作 但相同的 jar 文件在 Ubuntu 12 04 操作系统上不显示框架的图像图标 我的示例代码 ImageIcon ImageIc
  • TensorFlow:使用不同的输入张量重新运行网络?

    假设我在 TensorFlow 中有一个典型的 CNN 模型 def inference images images 4D tensor of batch size IMAGE SIZE IMAGE SIZE 3 size conv 1 c
  • 超大图像缩小后变得模糊

    这是我第一次尝试响应式设计 所以如果这是一个愚蠢的简单问题 请原谅 我创建了一个图像并将其最大宽度设置为不大于图像的实际宽度 因为我知道放大图像会导致模糊不清 我有点困惑的是 当我缩小窗口并且图像开始缩小时 它也变得模糊 这是正确的行为吗
  • 控制 HTML 中的图像加载顺序

    有没有办法控制网页上图像的加载顺序 我正在考虑尝试通过首先加载轻量级 加载 图形来模拟预加载器 有任何想法吗 Thanks 使用 Javascript 并填充图像src属性稍后 这 告诉浏览器链接到页面上的 URL 因此不会向服务器发送请求
  • 帮助将二进制图像数据从 SQL Server 读取到 PHP 中

    我似乎无法找到将二进制数据从 SQL 服务器读取到 PHP 的方法 我正在开发一个项目 需要能够将图像直接存储在 SQL 表中 而不是文件系统上 目前 我一直在使用这样的查询 插入 myTable 文档 选择 从 OPENROWSET BU
  • 图像映射区域周围不需要的边框

    我正在使用带有圆形区域的图像贴图 问题是我在 IE7 中的区域周围出现了不需要的边框 此边框不会出现在 FF 和 Chrome 中 也不会出现在 IE8 IE9 中 我尝试向图像添加 border 0 锚点的 css 属性 即 a bord
  • 将base64字符串转换为图像c#时出错

    我想在我的网页上显示图像 并单击应该下载的链接按钮 存储的图像文件以二进制格式存储在db中 将 base64 字符串转换为图像时显示错误 详细信息如下 帮助我找到合适的解决方案 谢谢 Error Code protected void Pa
  • C# 中直接从 URL 获取图像尺寸

    我正在尝试使用以下代码直接从网络上获取图片的尺寸 string image http www hephaestusproject com csharp3 png byte imageData new WebClient DownloadDa
  • 如何通过不规则索引获取子张量?

    我想通过不规则索引获得子张量 这是我的问题 Input tensor 2x8x10x1 Batch x Height x Width x Channel index Height 0 1 4 5 index Width 0 1 4 5 8
  • Keras 中批量大小可变的batch_dot

    我正在尝试编写一个层来合并 2 个张量formula https i stack imgur com I49aj png x 0 和x 1 的形状都是 1 500 M是500 500的矩阵 我希望输出为 500 500 我认为这在理论上是可
  • Tensorflow:无法在 gradle 中解析

    今天早上我打开 Android Studio 时 Gradle 尝试同步时出现以下错误 Error 103 13 Failed to resolve org tensorflow tensorflow android 按照他们的说明Gith
  • Tensorflow 数据集的数据预处理是针对整个数据集还是针对每次调用 iterator.next() 进行一次?

    您好 我现在正在研究tensorflow中的数据集API 我有一个关于执行数据预处理的dataset map 函数的问题 file name image1 jpg image2 jpg im dataset tf data Dataset
  • Tensorflow - 获取队列中的样本数量?

    对于性能监控 我想关注当前排队的示例 我正在平衡用于填充队列的线程数量和队列的最佳最大大小 我如何获得这些信息 我正在使用一个tf train batch 但我猜这些信息可能在下面的某个地方FIFOQueue 我本以为这是一个局部变量 但我
  • mac安装Tensorflow出错

    我正在尝试使用以下说明在 mac 中安装 Tensorflow https www tensorflow org install https www tensorflow org install 但是当我想导入tensorflow时 我总是
  • 如何使用 tf.nn.top_k 返回的索引对多维张量进行排序?

    我有两个多维张量a and b 我想按以下值对它们进行排序a I found tf nn top k https www tensorflow org versions r1 0 api docs python nn evaluation

随机推荐