optimizer = new StepDecay(0.001); } /** * @test */ public function build() : void { $this->assertInstanceOf(StepDecay::class, $this->optimizer); $this->assertInstanceOf(Optimizer::class, $this->optimizer); } /** * @test * @dataProvider stepProvider * * @param \Rubix\ML\NeuralNet\Parameter $param * @param \Tensor\Tensor $gradient * @param array[] $expected */ public function step(Parameter $param, Tensor $gradient, array $expected) : void { $step = $this->optimizer->step($param, $gradient); $this->assertEquals($expected, $step->asArray()); } /** * @return \Generator */ public function stepProvider() : Generator { yield [ new Parameter(Matrix::quick([ [0.1, 0.6, -0.4], [0.5, 0.6, -0.4], [0.1, 0.1, -0.7], ])), Matrix::quick([ [0.01, 0.05, -0.02], [-0.01, 0.02, 0.03], [0.04, -0.01, -0.5], ]), [ [1e-5, 5e-5, -2e-5], [-1e-5, 2e-5, 3e-5], [4e-5, -1e-5, -0.0005], ], ]; } }