theogf / AugmentedGaussianProcesses.jl

Gaussian Process package based on data augmentation, sparsity and natural gradients
https://theogf.github.io/AugmentedGaussianProcesses.jl/dev/
Other
134 stars 9 forks source link

DomainError with NaN #18

Closed trappmartin closed 3 years ago

trappmartin commented 4 years ago

Hi, I'm getting the following error on most of the dataset I tried.

ERROR: LoadError: DomainError with NaN:

Stacktrace
 [1] eta(::AugmentedGaussianProcesses.KernelModule.HyperParametersModule.Interval{Float64,AugmentedGaussianProcesses.KernelModule.HyperParametersModule.OpenBound{Float64},AugmentedGaussianProcesses.KernelModule.HyperParametersModule.NullBound{Float64}}, ::Float64) at /afs/spsc.tugraz.at/user/martint/.julia/packages/AugmentedGaussianProcesses/FfXUz/src/kernels/hyperparameters/interval.jl:67
 [2] settheta!(::AugmentedGaussianProcesses.KernelModule.HyperParametersModule.HyperParameter{Float64}, ::Float64) at /afs/spsc.tugraz.at/user/martint/.julia/packages/AugmentedGaussianProcesses/FfXUz/src/kernels/hyperparameters/hyperparameter.jl:45
 [3] update!(::AugmentedGaussianProcesses.KernelModule.HyperParametersModule.HyperParameter{Float64}, ::Float64) at /afs/spsc.tugraz.at/user/martint/.julia/packages/AugmentedGaussianProcesses/FfXUz/src/kernels/hyperparameters/hyperparameter.jl:61
 [4] _broadcast_getindex_evalf at ./broadcast.jl:578 [inlined]
 [5] _broadcast_getindex at ./broadcast.jl:551 [inlined]
 [6] getindex at ./broadcast.jl:511 [inlined]
 [7] copyto_nonleaf!(::Array{AugmentedGaussianProcesses.KernelModule.HyperParametersModule.HyperParameter{Float64},1}, ::Base.Broadcast.Broadcasted{Base.Broadcast.DefaultArrayStyle{1},Tuple{Base.OneTo{Int64}},typeof(AugmentedGaussianProcesses.KernelModule.HyperParametersModule.update!),Tuple{Base.Broadcast.Extruded{Array{AugmentedGaussianProcesses.KernelModule.HyperParametersModule.HyperParameter{Float64},1},Tuple{Bool},Tuple{Int64}},Base.Broadcast.Extruded{Array{Float64,1},Tuple{Bool},Tuple{Int64}}}}, ::Base.OneTo{Int64}, ::Int64, ::Int64) at ./broadcast.jl:928
 [8] copy at ./broadcast.jl:791 [inlined]
 [9] materialize at ./broadcast.jl:753 [inlined]
 [10] update!(::AugmentedGaussianProcesses.KernelModule.HyperParametersModule.HyperParameters{Float64}, ::Array{Float64,1}) at /afs/spsc.tugraz.at/user/martint/.julia/packages/AugmentedGaussianProcesses/FfXUz/src/kernels/hyperparameters/hyperparameter.jl:99
 [11] apply_gradients_lengthscale!(::RBFKernel{Float64,ARDKernel}, ::Array{Float64,1}) at /afs/spsc.tugraz.at/user/martint/.julia/packages/AugmentedGaussianProcesses/FfXUz/src/kernels/kernel.jl:84
 [12] _broadcast_getindex_evalf at ./broadcast.jl:578 [inlined]
 [13] _broadcast_getindex at ./broadcast.jl:551 [inlined]
 [14] getindex at ./broadcast.jl:511 [inlined]
 [15] copy at ./broadcast.jl:787 [inlined]
 [16] materialize(::Base.Broadcast.Broadcasted{Base.Broadcast.DefaultArrayStyle{1},Nothing,typeof(AugmentedGaussianProcesses.KernelModule.apply_gradients_lengthscale!),Tuple{Array{Kernel{Float64,KT} where KT<:AugmentedGaussianProcesses.KernelModule.KernelType,1},Array{Array{Float64,1},1}}}) at ./broadcast.jl:753
 [17] update_hyperparameters!(::SVGP{Float64,GaussianLikelihood{Float64},AnalyticVI{Float64},Array{Float64,1}}) at /afs/spsc.tugraz.at/user/martint/.julia/packages/AugmentedGaussianProcesses/FfXUz/src/autotuning.jl:29
 [18] #train!#428(::Int64, ::Int64, ::Int64, ::Function, ::SVGP{Float64,GaussianLikelihood{Float64},AnalyticVI{Float64},Array{Float64,1}}) at /afs/spsc.tugraz.at/user/martint/.julia/packages/AugmentedGaussianProcesses/FfXUz/src/training.jl:31

I'm running:

k = RBFKernel(1.0, dim=size(xtrain,2), ARD=true)
svgp = SVGP(xtrain, ytrain, k, GaussianLikelihood(), AnalyticVI(), 100, mean = mean(ytrain_), optimizer = RMSprop())
train!(svgp, iterations = 10_000)

and the data is normalised to be in the interval [0, 1].

trappmartin commented 4 years ago

Seems to work fine if I use AnalyticSVI(100) instead. At least for now :D

trappmartin commented 4 years ago

Or maybe not...

theogf commented 3 years ago

I am closing this issue as it is outdated