|
36 | 36 | @test size(m(r)) == (10, 5) |
37 | 37 |
|
38 | 38 | # Test bias switch |
39 | | - bias = Conv(ones(Float32, 2, 2, 1, 3), ones(Float32, 3)) |
| 39 | + m2 = Conv(ones(Float32, 2, 2, 1, 3), ones(Float32, 3)) |
40 | 40 | ip = zeros(Float32, 28,28,1,1) |
41 | 41 |
|
42 | | - op = bias(ip) |
| 42 | + op = m2(ip) |
43 | 43 | @test sum(op) == prod(size(op)) |
44 | 44 |
|
45 | 45 | @testset "No bias mapped through $lmap" for lmap in (identity, cpu, f32) |
46 | | - bias = Conv((2,2), 1=>3, bias = false) |> lmap |
47 | | - op = bias(ip) |
| 46 | + m3 = Conv((2,2), 1=>3, bias = false) |> lmap |
| 47 | + op = m3(ip) |
48 | 48 | @test sum(op) ≈ 0.f0 |
49 | | - gs = gradient(() -> sum(bias(ip)), Flux.params(bias)) |
50 | | - @test bias.bias ∉ gs.params |
| 49 | + gs = gradient(m -> sum(m(ip)), m3)[1] |
| 50 | + @test gs.bias === nothing |
51 | 51 | end |
52 | 52 |
|
53 | 53 | # Train w/o bias and make sure no convergence happens |
54 | 54 | # when only bias can be converged |
55 | | - bias = Conv((2, 2), 1=>3, bias = false); |
| 55 | + m4 = Conv((2, 2), 1=>3, bias = false); |
56 | 56 | ip = zeros(Float32, 28,28,1,1) |
57 | 57 | op = zeros(Float32, 27,27,3,1) .+ 2.f0 |
58 | | - opt = Descent() |
| 58 | + opt_state = Flux.setup(Descent(), m4) |
59 | 59 |
|
60 | 60 | for _ = 1:10^3 |
61 | | - gs = gradient(Flux.params(bias)) do |
62 | | - Flux.Losses.mse(bias(ip), op) |
63 | | - end |
64 | | - Flux.Optimise.update!(opt, params(bias), gs) |
| 61 | + gs = gradient(m4) do m |
| 62 | + Flux.mse(m(ip), op) |
| 63 | + end[1] |
| 64 | + Flux.update!(opt_state, m4, gs) |
65 | 65 | end |
66 | 66 |
|
67 | | - @test Flux.Losses.mse(bias(ip), op) ≈ 4.f0 |
| 67 | + @test Flux.Losses.mse(m4(ip), op) ≈ 4.f0 |
68 | 68 |
|
69 | 69 | @testset "Grouped Conv" begin |
70 | 70 | ip = rand(Float32, 28, 100, 2) |
|
0 commit comments