tensorflow.js如何在cnn预测中获取内层输出

时间:2018-06-20 07:32:16

标签: javascript tensorflow machine-learning deep-learning tensorflow.js

我正在看tfjs中的tensorflow.js CNN示例。

可以在这里找到测试仓库:testing repo

有什么方法可以获取每一层的输出吗?

 async showPredictions() {
    const testExamples = 1;
    // const testExamples = 100;
    const batch = this.data.nextTestBatch(testExamples);

    tf.tidy(() => {
        const output: any = this.model.predict(batch.xs.reshape([-1, 28, 28, 1]));

        output.print();
        const axis = 1;
        const labels = Array.from(batch.labels.argMax(axis).dataSync());
        const predictions = Array.from(output.argMax(axis).dataSync());

        // ui.showTestResults(batch, predictions, labels);
    });
}

以上是tfjs示例中的预测方法,但仅打印了最后一层。如何在预测中从每个层(包括转换层,最大池层和完全连接层)获得输出?

3 个答案:

答案 0 :(得分:1)

要获取所有内部层,可以使用模型的属性layers。一旦获得了图层,就可以使用每个图层的属性inputoutput来定义新模型或使用apply方法。

herethere提出了类似的问题

答案 1 :(得分:0)

此可观察笔记本提供了如何在TensorFlow.js中获取tf.Model实例的内部激活的详细示例: https://beta.observablehq.com/@nsthorat/visualizing-activations-of-mobilenet-with-tensorflow-js

其背后的基本思想是使用与原始模型相同的输入但不同的输出构造新的tf.Model实例。这些输出是原始tf.Model实例的各个层的输出。像

const newModel = tf.model({inputs: oldModel.inputs, outputs: oldModel.layers[n].output); 
const layerActivation = newModel.predict(inputValue);

答案 2 :(得分:0)

感谢您的回答。

我发现了另一种获取输入和输出数据的方法。我已经修改了节点模块中的tfjs文件,并将最后的输入数据和输出数据附加到每一层。因此,在每次预测之后,我可以直接访问每一层的输入和输出。

此方法仅在tfjs 0.11.6之前有效,要更改的文件为:

/node_modules/@tensorflow/tfjs-layers/dist-es6/engine/executor.js

添加以下两行:

fetch.sourceLayer.outputData = output[0].dataSync(); 
fetch.sourceLayer.inputData = inputValues[0].dataSync();