【问题标题】:Getting weights from tensorflow.js neural network从 tensorflow.js 神经网络获取权重
【发布时间】:2018-04-29 21:24:27
【问题描述】:

我有这个顺序模型:

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,但没有关于获取神经网络的权重(内核)的内容。那么,如何获取权重然后更改它们以应用新的权重?(对于无监督学习)

【问题讨论】:

  • 您不是手动尝试更新权重吗?
  • @Daniel 我想做,但不知道怎么做
  • 如果您手动应用权重以找到最佳权重,则不需要这样做。只需训练网络,它就会找到最佳权重。
  • @Daniel 我想使用遗传算法,因此我需要更改交叉和突变的权重
  • @Daniel pytorch 会很好,但我使用的是 javascript(tensorflow.js),反正没关系,因为我找到了 netaptic.js。

标签: tensorflow tensorflow.js


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    祝你好运。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 内核究竟打印了什么?
      猜你喜欢
      • 2015-06-29
      • 2019-05-05
      • 1970-01-01
      • 1970-01-01
      • 2019-07-31
      • 1970-01-01
      • 2017-03-01
      • 1970-01-01
      • 2022-11-30
      相关资源
      最近更新 更多