Neural network 从TensorFlow.JS层删除(修剪)神经元

Neural network 从TensorFlow.JS层删除(修剪)神经元,neural-network,tensorflow.js,Neural Network,Tensorflow.js,我对Tensorflow和神经网络是新手,除了使用Tensorflow的JavaScript版本外,我从未使用过其他版本。基本上我正在试验和研究这一切 在阅读(Python)Tensorflow文档时,我发现可以通过TF.CONTRIB.MODEL_Pruning进行修剪,但是,据我所知,Tensorflow.JS没有类似的功能。所以我想尝试一下,至少实现一种非常简单/基本的修剪方法 这种“非常简单/基本的修剪方法”类似于从隐藏层中移除权重非常接近于0的神经元。然后我会对模型进行更多的训练,看看

我对Tensorflow和神经网络是新手,除了使用Tensorflow的JavaScript版本外,我从未使用过其他版本。基本上我正在试验和研究这一切

在阅读(Python)Tensorflow文档时,我发现可以通过TF.CONTRIB.MODEL_Pruning进行修剪,但是,据我所知,Tensorflow.JS没有类似的功能。所以我想尝试一下,至少实现一种非常简单/基本的修剪方法

这种“非常简单/基本的修剪方法”类似于从隐藏层中移除权重非常接近于0的神经元。然后我会对模型进行更多的训练,看看是否能弥补精度上的损失

我知道我可以通过这样的方式来获取重量:

const weights = model.layers.map(layer => {
  return layer.getWeights()[0].dataSync();
});
我想知道的是,是否有可能找到并移除与这些重量相关的单位(以及我是否可以在训练期间这样做)

谢谢


Edu

可以在模型上设置权重。与使用
get
检索模型权重的方法相同,您可以使用
set
更改模型的权重

model.fit(x, y, {epochs: 1000, 
      callbacks: {
      onEpochEnd: () => {
        // check your weight
         model.layers[0].getWeights()
        // set your weiths
         model.layers[0].setWeights([tensors])
      }
    }})

谢谢你的回复。因此,如果我不能移除神经元,我可能能够迭代权重,收集感兴趣的神经元,创建一个新模型,并设置所收集神经元的权重值。。。是的,那可能有用@爱德华多格。您可以检索模型的层并从中构建另一个模型。下面是如何从初始模型的层构建新模型:这很有用,谢谢@edkevek。我将提出一些“伪剪枝”代码并与大家分享经验。@EduardoG.R。也许你可以将这个答案标记为已接受,并用新代码打开一个新的线程:)我仍在搜索神经元是否可以被移除,如果在一天结束时我没有发现其他任何东西,我会的!