# Flux.jl manual training loop results in \`error gradent(F, ::Params) are deprecated\`

**URL:** <https://discourse.julialang.org/t/flux-jl-manual-training-loop-results-in-error-gradent-f-params-are-deprecated/129921>\
**Category:** New to Julia\
**Created:** [June 16, 2025, 12:17pm UTC](https://discourse.julialang.org/t/flux-jl-manual-training-loop-results-in-error-gradent-f-params-are-deprecated/129921 "2025-06-16T12:17:57Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Smara\_Kazenango](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/smara_kazenango/32/130333_2.png) [@Smara\_Kazenango](https://discourse.julialang.org/u/Smara_Kazenango)\
**Post date:** [June 16, 2025, 12:17pm UTC](https://discourse.julialang.org/t/flux-jl-manual-training-loop-results-in-error-gradent-f-params-are-deprecated/129921/1 "2025-06-16T12:17:57Z")

</div>

I have tried the below training loop in Julia and consistently receiving an error gradent(F, ::Params) are deprecated in Flux.

How do I solve this error:

epochs = 10

for epoch in 1:epochs  
epoch\_loss = 0.0

```
for (x_batch, y_batch) in train_loader
    gs = gradient(() -> begin
        y_pred = model(x_batch)
        l = logitcrossentropy(y_pred, y_batch)
        return l
    end, Flux.params(model))

    Flux.Optimise.update!(opt, Flux.params(model), gs)
    epoch_loss += loss_fn(x_batch, y_batch)
end

println("Epoch $epoch, Loss=$(epoch_loss)")

```

end

---

<div class="post-metadata">

**Author:** ![mcabbott](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mcabbott/32/6603_2.png) [@mcabbott](https://discourse.julialang.org/u/mcabbott)\
**Post date:** [June 16, 2025, 2:01pm UTC](https://discourse.julialang.org/t/flux-jl-manual-training-loop-results-in-error-gradent-f-params-are-deprecated/129921/2 "2025-06-16T14:01:53Z")

</div>

The quoted section should probably look like this:

```julia
opt_state = Flux.setup(Adam(), model) # do this just once

for (x_batch, y_batch) in train_loader
    lo, gs = withgradient(m -> begin
        y_pred = m(x_batch)
        l = logitcrossentropy(y_pred, y_batch)
        return l
    end, model) # model is an explicit argument of the function being differentiated

    Flux.update!(opt_state, model, gs[1]) # mutates model and opt_state
    epoch_loss += lo
end

```

---

<div class="post-metadata">

**Author:** ![Smara\_Kazenango](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/smara_kazenango/32/130333_2.png) [@Smara\_Kazenango](https://discourse.julialang.org/u/Smara_Kazenango)\
**Post date:** [June 16, 2025, 7:16pm UTC](https://discourse.julialang.org/t/flux-jl-manual-training-loop-results-in-error-gradent-f-params-are-deprecated/129921/3 "2025-06-16T19:16:58Z")

</div>

DimensionMismatch: layer Dense(4096 =\> 128) expects size(input, 1) == 4096, but got 3136×32 Matrix{Float32} getting this error now.
