Julia-код из нейросети
Автор
using Flux
Nx1, Nx2 = 30, 40
x1 = Float32.( range( -3, 3, length=Nx1 ) )
x2 = Float32.( range( -3, 3, length=Nx2 ) )
Xs = [ repeat( x1, outer=Nx2) repeat( x2, inner=Nx1) ];
Ys = @. 3*(1-Xs[:,1])^2*exp(-(Xs[:,1]^2) - (Xs[:,2]+1)^2) - 10*(Xs[:,1]/5 - Xs[:,1]^3 - Xs[:,2]^5)*exp(-Xs[:,1]^2-Xs[:,2]^2) - 1/3*exp(-(Xs[:,1]+1) ^ 2 - Xs[:,2]^2);
epochs = 20000;
learning_rate = 0.01;
model = Chain( Dense( 2 => 10, relu ), # Структура модели, которую мы будем обучать
Dense( 10 => 8, relu ),
Dense( 8 => 1 ) )
data = [ (Xs', Ys') ] # Зададим структуру данных
loss( x, y ) = Flux.mse( model( x ), y ) # и функцию потерь, в которую они будут передаваться процедурой обучения
loss_history = [] # Будем сохранять историю обучения
opt = ADAM( learning_rate ); # Подготовим оптимизатор и запустим обучение
for i in 1:epochs
Flux.train!( loss, Flux.params(model), data, opt )
push!( loss_history, loss( Xs', Ys' ) ) # Запомним значение функции потерь
end
jldsave("model.jld2"; model)
plot(
plot( loss_history, size=(300,200), label="loss" ),
wireframe( x1, x2, vec(model( Xs' )), title="Прогноз от нейросети", titlefont=font(10) ),
layout=(1,2), size=(600,250)
)