# Toy Flux example with one paramemeter not working?

**URL:** <https://discourse.julialang.org/t/toy-flux-example-with-one-paramemeter-not-working/30679>\
**Category:** Machine Learning\
**Tags:** flux\
**Created:** [November 4, 2019, 8:00am UTC](https://discourse.julialang.org/t/toy-flux-example-with-one-paramemeter-not-working/30679 "2019-11-04T08:00:08Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![xiaodai](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/xiaodai/32/15937_2.png) [@xiaodai](https://discourse.julialang.org/u/xiaodai)\
**Post date:** [November 4, 2019, 8:00am UTC](https://discourse.julialang.org/t/toy-flux-example-with-one-paramemeter-not-working/30679/1 "2019-11-04T08:00:08Z")

</div>

I am trying to write a blog for people with no background in machine learning using the Flux framework. However, I can’t seem to figure out how to get it to work.

```julia
using Flux
w = param(rand())
x = 1
y = 0.5

loss(x) = (w*x - y)^2

Flux.train!(loss, params(w), (x,), ADAM())

```

I thought the above would just work. But I am getting this error

```julia
ERROR: MethodError: no method matching copyto!(::Tracker.TrackedReal{Float64}, ::Base.Broadcast.Broadcasted{Tracker.TrackedStyle,Tuple{},typeof(+),Tuple{Base.Broadcast.Broadcasted{Tracker.TrackedStyle,Nothing,typeof(*),Tuple{Float64,Tracker.TrackedReal{Float64}}},Base.Broadcast.Broadcasted{Base.Broadcast.DefaultArrayStyle{0},Nothing,typeof(*),Tuple{Base.Broadcast.Broadcasted{Base.Broadcast.DefaultArrayStyle{0},Nothing,typeof(-),Tuple{Int64,Float64}},Float64}}}})
Closest candidates are:
  copyto!(::AbstractArray, ::Base.Broadcast.Broadcasted) at broadcast.jl:863
  copyto!(::AbstractArray, ::Any) at abstractarray.jl:720
  copyto!(::Any, ::Base.Broadcast.Broadcasted{#s162,Axes,F,Args} where Args<:Tuple where F where Axes where #s162<:StaticArrays.StaticArrayStyle) at C:\Users\RTX2080\.julia\packages\StaticArrays\DBECI\src\broadcast.jl:29
Stacktrace:
 [1] materialize!(::Tracker.TrackedReal{Float64}, ::Base.Broadcast.Broadcasted{Tracker.TrackedStyle,Nothing,typeof(+),Tuple{Base.Broadcast.Broadcasted{Tracker.TrackedStyle,Nothing,typeof(*),Tuple{Float64,Tracker.TrackedReal{Float64}}},Base.Broadcast.Broadcasted{Base.Broadcast.DefaultArrayStyle{0},Nothing,typeof(*),Tuple{Base.Broadcast.Broadcasted{Base.Broadcast.DefaultArrayStyle{0},Nothing,typeof(-),Tuple{Int64,Float64}},Float64}}}}) at .\broadcast.jl:822
 [2] apply!(::ADAM, ::Tracker.TrackedReal{Float64}, ::Float64) at C:\Users\RTX2080\.julia\packages\Flux\dkJUV\src\optimise\optimisers.jl:104
 [3] update!(::ADAM, ::Tracker.TrackedReal{Float64}, ::Tracker.TrackedReal{Float64}) at C:\Users\RTX2080\.julia\packages\Flux\dkJUV\src\optimise\train.jl:6
 [4] update!(::ADAM, ::Tracker.Params, ::Tracker.Grads) at C:\Users\RTX2080\.julia\packages\Flux\dkJUV\src\optimise\train.jl:11
 [5] macro expansion at C:\Users\RTX2080\.julia\packages\Flux\dkJUV\src\optimise\train.jl:74 [inlined]
 [6] macro expansion at C:\Users\RTX2080\.julia\packages\Juno\oLB1d\src\progress.jl:134 [inlined]
 [7] #train!#12(::Flux.Optimise.var"#16#22", ::typeof(Flux.Optimise.train!), ::Function, ::Tracker.Params, ::Tuple{Int64}, ::ADAM) at C:\Users\RTX2080\.julia\packages\Flux\dkJUV\src\optimise\train.jl:69
 [8] train!(::Function, ::Tracker.Params, ::Tuple{Int64}, ::ADAM) at C:\Users\RTX2080\.julia\packages\Flux\dkJUV\src\optimise\train.jl:67
 [9] top-level scope at REPL[3]:clock9:

```

---

<div class="post-metadata">

**Author:** ![improbable22](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/improbable22/32/5464_2.png) [@improbable22](https://discourse.julialang.org/u/improbable22)\
**Post date:** [November 4, 2019, 10:20am UTC](https://discourse.julialang.org/t/toy-flux-example-with-one-paramemeter-not-working/30679/2 "2019-11-04T10:20:25Z")

</div>

It works if you make `w` an array:

```julia
w = param(rand(1))
loss(x) = (w[1]*x - y)^2

```

I think it might not be possible to fix the case of `w` a number, as `train!` wants to mutate its contents.

---

<div class="post-metadata">

**Author:** ![xiaodai](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/xiaodai/32/15937_2.png) [@xiaodai](https://discourse.julialang.org/u/xiaodai)\
**Post date:** [November 4, 2019, 10:21am UTC](https://discourse.julialang.org/t/toy-flux-example-with-one-paramemeter-not-working/30679/3 "2019-11-04T10:21:34Z")

</div>

I see. It needs to be an array, or else how can I mutate the value?! Thanks for that!
