我是机器新手,还是Tensorflow新手。作为一种学习方法,我一直与Coding Train的Dan Shiffman一起学习,他展示了如何创建颜色分类器。
但是,我想做些不同的事情,所以我收集了手绘形状的数据。每个形状都有一个标签(正方形,圆形或三角形),还具有400个像素的阵列(每个图片均以20x20的网格绘制)。数据存储在一个对象中,该对象包含在JSON文件中。
使用p5.js的“ loadJSON”功能,我可以访问JSON文件,迭代条目并创建两个数组:“形状”(是像素数组的数组)和“标签”(是相应标签的数组。
下面是使用p5的“ preload”和“ setup”功能的代码。
let data;
let model;
// list of labels from which you can get the oneHot index
let labelList = [
"square",
"circle",
"triangle"
];
// function that is ran before setup
function preload() {
data = loadJSON('shapeData.json'); // loads the json file
}
// called after preload
function setup() {
let shapes = []; // an array of the pixels of hand-drawn shapes
let labels = []; // the corresponding label of each hand-drawn shape
// iterates over all of the entries in data
for (let record of data.entries) {
let pixels = record.pixels;
shapes.push(pixels);
labels.push(labelList.indexOf(record.label));
}
// ---------------- ERROR ------------------------
let xs = tf.tensor2d(shapes);
// these tensors work great
let labelsTensor = tf.tensor1d(labels, 'int32');
let ys = tf.oneHot(labelsTensor, 3);
}
当我尝试将'xs'创建为张量2d时出现问题。
我得到了错误:
Error: Constructing tensor of shape (120800) should match the length of values (121881)
at assert (tfjs@0.11.7:2)
at new e (tfjs@0.11.7:2)
at Function.e.make (tfjs@0.11.7:2)
at Function.e.tensor (tfjs@0.11.7:2)
at Object.e.tensor2d (tfjs@0.11.7:2)
at setup (sketch.js:27)
at p5.<anonymous> (p5.js:46551)
at _runIfPreloadsAreDone (p5.js:46499)
at p5._decrementPreload (p5.js:46509)
at p5.js:59586
我总共有302个数据点,每个数据点都是400个二进制数的数组。因此,张量的形状应为[302,400],并且当我将形状更改为错误的东西(例如[303,401])时,会出现错误,指出应为[302,400]。>
我是整个过程的新手,因此将不胜感激。
谢谢
答案 0 :(得分:0)
我找到了解决方法!下载数据的单独脚本出错。这样创建了不同长度的数据...
例如,一种形状具有400像素,另一种形状具有410像素。这种差异在张量流中产生了一个问题。删除没有400像素的数据点后,程序运行正常!