从 tensorflow.js 神经网络获取权重

Getting weights from tensorflow.js neural network

我有这个顺序模型:

this.model = tf.sequential()

this.model.add(tf.layers.dense({units : 16, useBias : true, inputDim : 7})) // input
this.model.add(tf.layers.dense({units : 16, useBias : true, activation: 'sigmoid'})) // hidden
this.model.add(tf.layers.dense({units : 3, useBias : true, activation: 'sigmoid'})) // hidden 2

我在 API 中检查了 tensorflow.js,但没有关于获取神经网络权重(内核)的信息。那么,我怎样才能获得权重然后改变它们,以应用新的权重?(对于无监督学习)

看起来可能有一种更简单、更简洁的方法来做你想做的事,但无论如何:

调用 this.model.getWeights() 将为您提供一组与图层权重和偏差相对应的变量。对这些数组元素中的任何一个调用 data() 将 return 承诺您可以解决以获得权重。

我没有尝试手动设置权重,但是有一个 this.model.setWeights() 方法。

祝你好运。

这是打印所有重量的简单方法:

for (let i = 0; i < model.getWeights().length; i++) {
    console.log(model.getWeights()[i].dataSync());
}

访问第一个密集层的权重(内核和偏差):

const model = tf.sequential();
model.add(tf.layers.dense({units: 4, inputShape: [8]}));
model.add(tf.layers.dense({units: 4}));
model.compile({ optimizer: 'sgd', loss: 'meanSquaredError' });

// kernel:
model.layers[0].getWeights()[0].print()

// bias:
model.layers[0].getWeights()[1].print()