applyGradients method

  1. @override
void applyGradients(
  1. List<List<Matrix>> gradients,
  2. List<Layer> layers, [
  3. dynamic parametr
])

apply gradients to the layers with Optimizer's logic

Implementation

@override
void applyGradients(gradients, layers, [parametr]) {
  if (momentum == 0) {
    for (int i = 0; i < layers.length; i += 1) {
      if (layers[i].useBiases) {
        layers[i].b = layers[i].b! - gradients[i][0].scaled(biasLearningRate);
      }
      layers[i].w = layers[i].w! - gradients[i][1].scaled(learningRate);
    }
  } else if (_previuosDelta == null) {
    _previuosDelta =
        List<Matrix>.filled(gradients.length, Matrix.zero(n: 0, m: 0));
    for (int i = 0; i < layers.length; i += 1) {
      if (layers[i].useBiases) {
        layers[i].b = layers[i].b! - gradients[i][0].scaled(biasLearningRate);
      }
      _previuosDelta![i] = gradients[i][1]..scale(learningRate);
      layers[i].w = layers[i].w! - gradients[i][1];
    }
  } else {
    for (int i = 0; i < layers.length; i += 1) {
      if (layers[i].useBiases) {
        layers[i].b = layers[i].b! - gradients[i][0].scaled(biasLearningRate);
      }
      _previuosDelta![i] = _previuosDelta![i].scaled(momentum) -
          gradients[i][1].scaled(learningRate);
      layers[i].w = layers[i].w! + _previuosDelta![i];
    }
  }
}