我正在看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示例中的预测方法,但仅打印了最后一层。如何在预测中从每个层(包括转换层,最大池层和完全连接层)获得输出?
答案 0 :(得分:1)
答案 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();