|
13 | 13 | m = FourierNeuralOperator() |> device
|
14 | 14 | loss(𝐱, 𝐲) = sum(abs2, 𝐲 .- m(𝐱)) / size(𝐱)[end]
|
15 | 15 |
|
| 16 | +n_train = 1800 |
| 17 | +n_test = 200 |
| 18 | +batchsize = 100 |
16 | 19 | 𝐱, 𝐲 = get_burgers_data(n=2048)
|
17 | 20 |
|
18 |
| -n_train = 1000 |
19 | 21 | 𝐱_train, 𝐲_train = 𝐱[:, :, 1:n_train], 𝐲[:, 1:n_train]
|
20 |
| -loader_train = Flux.DataLoader((𝐱_train, 𝐲_train), batchsize=20, shuffle=true) |
| 22 | +loader_train = Flux.DataLoader((𝐱_train, 𝐲_train), batchsize=batchsize, shuffle=true) |
21 | 23 |
|
22 |
| -n_test = 100 |
23 | 24 | 𝐱_test, 𝐲_test = 𝐱[:, :, end-n_test+1:end], 𝐲[:, end-n_test+1:end]
|
24 |
| -loader_test = Flux.DataLoader((𝐱_test, 𝐲_test), batchsize=20, shuffle=false) |
| 25 | +loader_test = Flux.DataLoader((𝐱_test, 𝐲_test), batchsize=batchsize, shuffle=false) |
25 | 26 |
|
26 |
| -function loss_test() |
27 |
| - l = 0f0 |
28 |
| - for (𝐱, 𝐲) in loader_test |
29 |
| - 𝐱, 𝐲 = device(𝐱), device(𝐲) |
30 |
| - l += loss(𝐱, 𝐲) |
31 |
| - end |
32 |
| - @info "loss: $(l/length(loader_test))" |
| 27 | +function validate() |
| 28 | + validation_losses = [loss(device(𝐱), device(𝐲)) for (𝐱, 𝐲) in loader_test] |
| 29 | + @info "loss: $(sum(validation_losses)/length(loader_test))" |
33 | 30 | end
|
34 | 31 |
|
35 | 32 | data = [(𝐱, 𝐲) for (𝐱, 𝐲) in loader_train] |> device
|
36 | 33 | opt = Flux.Optimiser(WeightDecay(1f-4), Flux.ADAM(1f-3))
|
37 |
| -Flux.@epochs 500 @time(Flux.train!(loss, params(m), data, opt, cb=Flux.throttle(loss_test, 5))) |
| 34 | +call_back = Flux.throttle(validate, 5, leading=false, trailing=true) |
| 35 | +Flux.@epochs 500 @time(Flux.train!(loss, params(m), data, opt, cb=call_back)) |
0 commit comments