Удаление (обрезка) нейронов из слоя TensorFlow.JS - PullRequest
0 голосов
/ 04 февраля 2019

Я новичок в Tensorflow, Neural Nets и никогда не использовал ничего, кроме версии Tensorflow на JavaScript.И в основном я экспериментирую и изучаю все это.

Чтение документов (на Python) Tensorflow Я видел, что обрезка может быть выполнена с помощью TF.CONTRIB.MODEL_PRUNING, но, насколько я обнаружил, ничего нетпохожи на Tensorflow.JS.Поэтому я хотел бы немного поэкспериментировать и реализовать хотя бы очень простой / базовый метод обрезки.

Этот «очень простой / базовый метод обрезки» может быть чем-то вроде удаления из скрытых слоев тех нейронов, вес которых равеночень близко к 0. Затем я немного тренировал бы модель и смотрел, смогу ли я восстановить потерю в точности.

Я знаю, что могу получить доступ к весам примерно так:

const weights = model.layers.map(layer => {
  return layer.getWeights()[0].dataSync();
});

Что бы я хотел знать, возможно ли на самом деле найти и удалить единицы, связанные с этими весами (и могу ли я сделать это во время тренировки).

Спасибо!

Edu

1 Ответ

0 голосов
/ 04 февраля 2019

Возможно установить вес на модели.Точно так же, как вы получаете вес модели с помощью 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])
      }
    }})
...