【问题标题】:model.fit() never ends or shows me the lossmodel.fit() 永远不会结束或向我展示损失
【发布时间】:2019-07-09 02:21:48
【问题描述】:

我正在尝试训练模型,但从未通过 fit()

在控制台不显示丢失结果,卡在那里。

已经把 async 改成了 promise,但是还是一样。

要查看完整代码,请点击here

function train() {
  trainModel().then(result => {
    console.log(result.history.loss[0]);
    setTimeout(train, 100);
  });
}

// entrena modelo~ params = train_xs(input) y train_ys(output)

async function trainModel() {

  //Create the input data

     for (let i = 0; i < 5; i++) {
        train_xs = tf.tensor2d(ins.pixels[i], [28, 28], 'int32');
        train_ys = tf.tensor2d(outs.coords[i], [3, 2], 'int32');

        const h = await model.fit(train_xs, train_ys, {
         epochs: 1

        });
        console.log("Loss after Epoch " + i + " : " + h.history.loss[0]);
      }
      console.log('end fitness model');
    }

//从不显示最终适应度模型

没有错误消息,控制台保持干净

【问题讨论】:

    标签: p5.js tensorflow.js


    【解决方案1】:

    有几个问题(控制台很干净,因为它没有注销错误):

    • xs和ys的形状与model.ins.pixels[i]的输入输出不匹配

    • xs 和 ys 应该具有相同的批量大小。由于在for循环的所有迭代中,只使用了一个特征和一个标签,因此batchsize为1。

    这是模型的修复

    let model;
    
    let xs;
    let train_xs;
    let train_ys; 
    let inAndOut;
    
    let resolution = 20;
    let cols;
    let rows;
    
    var ins;
    var outs;
    
    
    function setup() {
      createCanvas(400, 400);
      /// visualization
    
      ins = new Inputs13(); // ins.pixels;
      outs = new Outputs13(); // outs.coords;
      inAndOut = new InputsAndOutputsToTest();
    
    
    
      ///crear modelo
      model = tf.sequential();
    
      let hidden = tf.layers.dense({
        inputShape: [784],
        units: 28,
        activation: 'sigmoid'
      });
    
      let output = tf.layers.dense({
        units: 6,
        activation: 'sigmoid'
      });
    
      model.add(hidden);
      model.add(output);
    
      const optimizer = tf.train.adam(0.1);
      model.compile({
        optimizer: optimizer,
        loss: 'meanSquaredError'
      })
    
      xs = tf.tensor2d(inAndOut.pixelsToTest[0],[28,28]);
      //console.log('xs');
      //console.log(xs);
      //xs.print();
      //entrena modelo
      setTimeout(train, 10);
    }
    
    
    //promesa, llama a entrenar modelo y muestra de losss
    function train() {
      console.log("im in train!");
      trainModel().then(result => {
        console.log(result.history.loss[0]);
        setTimeout(train, 100);
      });
    
    }
    
    // entrena modelo~ params = train_xs(input) y train_ys(output)
    async function trainModel() {
      let h;
        //Create the input data
      for (let i = 0; i < 5; i++) {
       train_xs = tf.tensor(ins.pixels[i], [1, 784]); //[tens], [shape]
       console.log('xs.shape', train_xs.shape)
       train_ys = tf.tensor(outs.coords[i]).reshape([1, 6]);
       console.log('ys.shape', train_ys.shape)
     /* console.log('train_xs');
       train_xs.print();
      console.log("train_ys");
      train_ys.print();*/
    
       h = await model.fit(train_xs, train_ys, {
       // shuffle: true,
        epochs: 1
    
      });
       console.log("Loss after Epoch " + i + " : " + h.history.loss[0]);
     }
      console.log('end fitness model');
      return h;
    }
    
    
    //muestra visual!
    function draw() {
      background(220);
    
      //Get the predictions params xs = inputs para pruebas
      tf.tidy(() => {
        let ys = model.predict(xs);
        //console.log("ys");
        //console.log(ys);
    
        let y_values = ys.dataSync();
       //  console.log("y_values");
       // console.log(y_values);
    
      });
    
    }
    

    但是,可以同时使用所有 13 个功能和 13 个标签。 for 循环将不再有用。

       train_xs = tf.tensor(ins.pixels, [13, 784]);
       console.log('xs.shape', train_xs.shape)
       train_ys = tf.tensor(outs.coords).reshape([13, 6]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-21
      • 2021-05-17
      • 2013-04-09
      • 2010-12-27
      • 1970-01-01
      • 2021-08-05
      • 2015-08-28
      • 2011-01-20
      相关资源
      最近更新 更多