从tensorflow js模型获取原始输出

时间:2020-05-04 20:38:42

标签: javascript tensorflow

我正在通过一个简单的卷积网络来处理MNIST数据集。我想手动告诉程序完成流程的每个步骤,即不使用model.fit遍历每个Epoch和批处理(我想更好地了解tensorflow的内部工作原理。)

目前,我有:

let EPOCHS = 10;    
let batches = Math.floor(TRAIN_DATA_SIZE/BATCH_SIZE);

      for (let i = 0; i < EPOCHS; i++){
        for (let j = 0; i < batches; i++){
          let inputs = await getNextTrain(BATCH_SIZE,TRAIN_DATA_SIZE, data);

          let inputXs = inputs[0];
          let inputYs = inputs[1];

          let output = await model.evaluate(inputXs,inputYs);

遍历每个纪元和每个批次以进行traian。但是,model.evalutate()不会从网络返回输出值,而仅返回定义的损耗/度量。您可以为此添加一个特定的指标,以从网络返回输出

我想要的是10个元素的数组(或张量),表示网络认为每个输入的输出(使用MNIST,因此希望网络认为每个输出为0-9的概率)

1 个答案:

答案 0 :(得分:1)

您可以在内部循环中调用model.fit并设置以下参数 epoch=1 initial_epoch=i \\ So that it trains only the current epoch and batch. 'i' being outer loop variable. x=inputXs y=inputYs

这将相应地更新模型中的所有权重。然后,您可以调用model.evaluate或model.predict或model.get_layer来获取要查看的信息。由于现在有了每个图层的信息,您可以通过仅根据需要评估特定的图层来独立检查其输出值(请参阅您提到的行以查看所有概率..etc)

更新后的更改:

let EPOCHS = 10;
let batches = Math.floor(TRAIN_DATA_SIZE/BATCH_SIZE);

  for (let i = 0; i < EPOCHS; i++){
    for (let j = 0; i < batches; i++){
      let inputs = await getNextTrain(BATCH_SIZE,TRAIN_DATA_SIZE, data);

      let inputXs = inputs[0];
      let inputYs = inputs[1];
      model.fit(..on above mentioned params..);

      model.evaluate() // To get loss and metric values.
      model.predict()  // To the final output of the model for input samples given.
      model.get_layer() //To get info about a particular layer and then retrieve the required info. Refer https://keras.io/layers/about-keras-layers/

      // For example to know the 1st layer's output : model.layers[0].output;

`