首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用tf.browser.fromPixels(图像)对TensorFlow.js训练的基本示例进行真/假输出?

如何使用tf.browser.fromPixels(图像)对TensorFlow.js训练的基本示例进行真/假输出?
EN

Stack Overflow用户
提问于 2019-03-29 01:46:50
回答 1查看 315关注 0票数 1

我已经用谷歌搜索了我能想到的问题的每一个版本,但在我的生活中,我找不到一个基本的tensorflow.js训练tf.browser.fromPixels(图像)来得到是或否的例子。我能找到的所有例子都是从预先训练好的网络开始的。

我已经建立了一个25x25像素图像的数据库,并将它们都存储为一个变量中的画布,如下所示:

代码语言:javascript
复制
let data = {
    t: [canvas1, canvas2, canvas3, ... canvas3000 ....],
    f: [canvas1, canvas2, ... and so on ...]
}

我认为这样做应该是微不足道的:

代码语言:javascript
复制
data.t.forEach(canvas => {
    const xs = tf.browser.fromPixels(canvas);
    const ys = tf.tensor([1]); // output 1, since this canvas is from the `t` (true) dataset
    model.fit(xs, ys, {
      batchSize: 1,
      epochs: 1000
    });
});

data.f.forEach(canvas => {
    const xs = tf.browser.fromPixels(canvas);
    const ys = tf.tensor([0]); // output 0, since this canvas is from the `f` (false) dataset
    model.fit(xs, ys, {
      batchSize: 1,
      epochs: 1000
    });
});

model.predict(tf.browser.fromPixels(data.t[0])).print(); // -> [1]
model.predict(tf.browser.fromPixels(data.t[1])).print(); // -> [1]
model.predict(tf.browser.fromPixels(data.t[2])).print(); // -> [1]

model.predict(tf.browser.fromPixels(data.f[0])).print(); // -> [0]
model.predict(tf.browser.fromPixels(data.f[1])).print(); // -> [0]
model.predict(tf.browser.fromPixels(data.f[2])).print(); // -> [0]

但是,像inputShape和各种小细节这样的细节,对于TF来说是新的,这使得在不能找到基本示例的情况下尝试完成这一任务是一条痛苦的学习曲线。这个训练函数的有效表示是什么样子的?以下是到目前为止的代码:

代码语言:javascript
复制
// Just imagine DataSet builds a large data set like described in my 
// question and calls a callpack function with the data variable as 
// its only argument, full of pre-categorized images. Since my database 
// of images is locally stored, I cant really produce an example here 
// that works fully, but this gets the idea across at least.
new DataSet(
  data => {
    
    const model = tf.sequential();
    
    model.add(
    
      // And yes, I realize I would want a convolutional layer, 
      // some max pooling, filtering, etc, but I'm trying to start simple
      
      tf.layers.dense({
        units: [1],
        inputShape: [25, 25, 3],
        dataFormat: "channelsLast",
        activation: "tanh"
      })
    );
    
    model.compile({optimizer: "sgd", loss: "binaryCrossentropy", lr: 0.1});
    
    data.t.forEach(canvas => {
        const xs = tf.browser.fromPixels(canvas);
        const ys = tf.tensor([1]); // output 1, since this canvas is 
        // from the `t` (true) dataset
        model.fit(xs, ys, {
          batchSize: 1,
          epochs: 1000
        });
    });
    
    data.f.forEach(canvas => {
        const xs = tf.browser.fromPixels(canvas);
        const ys = tf.tensor([0]); // output 0, since this canvas is 
        // from the `f` (false) dataset
        model.fit(xs, ys, {
          batchSize: 1,
          epochs: 1000
        });
    });
    
    model.predict(tf.browser.fromPixels(data.t[0])).print(); // -> [1]
    model.predict(tf.browser.fromPixels(data.t[1])).print(); // -> [1]
    model.predict(tf.browser.fromPixels(data.t[2])).print(); // -> [1]
    
    model.predict(tf.browser.fromPixels(data.f[0])).print(); // -> [0]
    model.predict(tf.browser.fromPixels(data.f[1])).print(); // -> [0]
    model.predict(tf.browser.fromPixels(data.f[2])).print(); // -> [0]
    
  },
  {canvas: true}
);
代码语言:javascript
复制
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@1.0.0/dist/tf.min.js"></script>

EN

回答 1

Stack Overflow用户

发布于 2019-03-29 16:39:10

您的模型只有一个层。你需要更多的层次。有许多教程可以帮助您构建分类器来区分两类或更多类图像。Here是使用CNN的tensorflow官方网站上的本教程。

此外,您还可以看到如何使用完全连接的神经网络使用this snippet构建分类器,尽管准确性可能不如CNN模型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55403939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档