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

时间:2018-04-29 21:24:27

标签: tensorflow tensorflow.js

我有这个顺序模型:

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

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

3 个答案:

答案 0 :(得分:1)

似乎可能有一种更简单,更清洁的方式来做你想做的事,但无论如何:

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

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

古德勒克。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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()