""" # -*- coding: utf-8 -*- # # Copyright 2021 Michael Büsch # # Licensed under the Apache License version 2.0 # or the MIT license, at your option. # SPDX-License-Identifier: Apache-2.0 OR MIT # """ from mlplib.activation import * from mlplib.backward import * from mlplib.forward import * from mlplib.init import * from mlplib.loss import * from mlplib.optimize import * from mlplib.parameters import * from mlplib.util import * import numpy as np def make_net(): seed(42) nr_inputs = 4 layout = (6, 9, 2) params = Parameters( weights=init_layers_weights(nr_inputs, layout), biases=init_layers_biases(layout), actvns=[ ReLU(), ReLU(), Sigmoid(), ], ) return params def run_net(params, optimizer, decay=False): x = standard_normal((20, params.nr_inputs)) y = standard_normal((20, params.layout[-1])) lossfn = MSE() prev_loss = 9999.0 prev_alpha = optimizer.alpha + 9999.0 for i in range(100): gradients, yh = backward_prop(x, y, params, lossfn) new_loss = lossfn.fn(yh, y) assert new_loss < prev_loss prev_loss = new_loss optimizer.apply(i, gradients) if decay: assert optimizer.alpha < prev_alpha prev_alpha = optimizer.alpha def test_gradient_descent(): params = make_net() optimizer = GradDescent(params=params, alpha=0.1) run_net(params, optimizer) def test_momentum(): params = make_net() optimizer = Momentum(params=params, alpha=0.1, beta=0.9) run_net(params, optimizer) def test_rms_prop(): params = make_net() optimizer = RMSProp(params=params, alpha=0.01, beta=0.9) run_net(params, optimizer) def test_adam(): params = make_net() optimizer = Adam(params=params, alpha=0.01, beta1=0.9, beta2=0.9) run_net(params, optimizer) def test_decay_simple(): params = make_net() optimizer = AlphaDecaySimple( Adam(params=params, alpha=0.01, beta1=0.9, beta2=0.9), decay_rate=0.15) run_net(params, optimizer, decay=True) def test_decay_exp(): params = make_net() optimizer = AlphaDecayExp( Adam(params=params, alpha=0.01, beta1=0.9, beta2=0.9), decay_rate=0.15) run_net(params, optimizer, decay=True) def test_decay_sqrt(): params = make_net() optimizer = AlphaDecaySqrt( Adam(params=params, alpha=0.01, beta1=0.9, beta2=0.9), decay_rate=0.15) run_net(params, optimizer, decay=True) # vim: ts=4 sw=4 expandtab