Question on the use of the Update! method and is_same_except()
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 35/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Ferma
- Stack tecnologico
- julia
- Ambito
- machine-learning
Direzione di ricerca
Inizia con i punti di ingresso MMI.update e MMI.is_same_except mostrati nell’issue, quindi esamina la documentazione o gli esempi circostanti di MLJModelInterface sull’aggiornamento dei modelli. Traccia il modo in cui vengono confrontati old_cache e il campo epochs modificato, quindi verifica il comportamento rieseguendo l’esempio LaplaceRegressor fornito modificando solo epochs.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Hi, i was trying to implement the update method for laplaceredux but I am having a problem.
this is the model
MLJBase.@mlj_model mutable struct LaplaceRegressor <: MLJFlux.MLJFluxProbabilistic
model::Flux.Chain = nothing
flux_loss = Flux.Losses.mse
optimiser = Adam()
epochs::Integer = 1000::(_ > 0)
batch_size::Integer = 32::(_ > 0)
subset_of_weights::Symbol = :all::(_ in (:all, :last_layer, :subnetwork))
subnetwork_indices = nothing
hessian_structure::Union{HessianStructure,Symbol,String} =
:full::(_ in (:full, :diagonal))
backend::Symbol = :GGN::(_ in (:GGN, :EmpiricalFisher))
σ::Float64 = 1.0
μ₀::Float64 = 0.0
P₀::Union{AbstractMatrix,UniformScaling,Nothing} = nothing
fit_prior_nsteps::Int = 100::(_ > 0)
end
this is the fit function that i have written
function MMI.fit(m::LaplaceRegressor, verbosity, X, y)
#X = MLJBase.matrix(X) |> permutedims
#y = reshape(y, 1, :)
if Tables.istable(X)
X = Tables.matrix(X)|>permutedims
end
# Reshape y if necessary
y = reshape(y, 1, :)
data_loader = Flux.DataLoader((X, y); batchsize=m.batch_size)
opt_state = Flux.setup(m.optimiser, m.model)
loss_history=[]
push!(loss_history, m.flux_loss(m.model(X), y ))
for epoch in 1:(m.epochs)
loss_per_epoch= 0.0
for (X_batch, y_batch) in data_loader
# Forward pass: compute predictions
y_pred = m.model(X_batch)
# Compute loss
loss = m.flux_loss(y_pred, y_batch)
# Compute gradients
grads = gradient(m.model) do model
# Recompute predictions inside gradient context
y_pred = model(X_batch)
m.flux_loss(y_pred, y_batch)
end
# Update parameters using the optimizer and computed gradients
Flux.Optimise.update!(opt_state ,m.model , grads[1])
# Accumulate the loss for this batch
loss_per_epoch += sum(loss) # Summing the batch loss
end
push!(loss_history,loss_per_epoch )
# Print loss every 100 epochs if verbosity is 1 or more
if verbosity >= 1 && epoch % 100 == 0
println("Epoch $epoch: Loss: $loss_per_epoch ")
end
end
la = LaplaceRedux.Laplace(
m.model;
likelihood=:regression,
subset_of_weights=m.subset_of_weights,
subnetwork_indices=m.subnetwork_indices,
hessian_structure=m.hessian_structure,
backend=m.backend,
σ=m.σ,
μ₀=m.μ₀,
P₀=m.P₀,
)
# fit the Laplace model:
LaplaceRedux.fit!(la, data_loader)
optimize_prior!(la; verbose=false, n_steps=m.fit_prior_nsteps)
fitresult = la
report = (loss_history = loss_history,)
cache = (deepcopy(m),opt_state, loss_history)
return fitresult, cache, report
end
and now follows the incomplete update function that i was trying. I have removed the loop part since it's not important.
function MMI.update(m::LaplaceRegressor, verbosity, old_fitresult, old_cache, X, y)
println(" running MMI:update")
old_model = old_cache[1]
if Tables.istable(X)
X = Tables.matrix(X)|>permutedims
end
# Reshape y if necessary
y = reshape(y, 1, :)
println(MMI.is_same_except(m, old_model, :epochs))
cache=()
report=()
return old_fitresult, cache, report
end
the issue is that if i try to rerun the model by changing only the number of epochs is_same_except still gives me
false
even though :epochs is listed as exception
using MLJ
flux_model = Chain(
Dense(4, 10, relu),
Dense(10, 10, relu),
Dense(10, 1)
)
model = LaplaceRegressor(model=flux_model)
X, y = make_regression(100, 4; noise=0.5, sparse=0.2, outliers=0.1)
mach = machine(model, X, y)
MLJBase.fit!(mach)
model.epochs=2000
MLJBase.fit!(mach)
so what is the correct way to implement is_same_except? thank you
- Lingua principale
- Julia
- Stelle
- 39
- Fork
- 8
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di JuliaAI/MLJModelInterface.jl
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
JuliaAI/MLJModelInterface.jl#215 · 1 commento ·
-
bug
Difficoltà 3/5 1-2 giorni Idoneità per principianti 35/100
JuliaAI/MLJModelInterface.jl#209 · 1 reazione ·
-
human_name vs Base.nameofAperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
JuliaAI/MLJModelInterface.jl#208 · 2 commenti ·
-
next major release
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
JuliaAI/MLJModelInterface.jl#189 ·
-
`params(::MLJType)` methodApertanext major release
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
JuliaAI/MLJModelInterface.jl#173 · 1 commento ·
Tutte le issue di JuliaAI/MLJModelInterface.jl
Issue simili
-
TSDAE's docstring implies a theta argument it does not takeForse già presa @singhharsh1708 l’ha presa oggi. Apertadocumentation
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 74/100
SciML/PETScDiffEq.jl#282 ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement good first issue help wanted
Difficoltà 2/5 Mezza giornata Idoneità per principianti 82/100
-
SavedSubsystem with an integer save_idxs maps the index the wrong way roundForse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
SciML/SciMLBase.jl#1643 ·
I maintainer di solito rispondono entro 2 giorni
-
authority-vechtstromen ready-for-agent
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 75/100
Deltares/Ribasim-NL#890 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
I maintainer di solito rispondono entro 1 giorno