I’m trying to implement binary logistic regression in flux. I’m simplifying the mlp.jl example from the model zoo.. I have tried 4 versions, only 1 works, please explain why.

V1.

```
D = 2; N = 20;
X = randn(D, N)
y = rand([0,1], N)
D, N = size(X)
data = repeated((X,Y),1)
### changeable part
model = Dense(D, 1, sigmoid)
loss(x, y) = Flux.binarycrossentropy(model(x), y)
Y = y
###
callback() = @show(loss(X, Y))
opt = Flux.Optimise.ADAM()
Flux.train!(loss, params(model), data, opt, cb = callback)
```

Fails:

```
LoadError: no method matching eps(::TrackedArray{…,Array{Float32,2}})
```

V2: same as above but

```
model = Chain(Dense(D, 1), sigmoid)
```

Fails:

```
DimensionMismatch("multiplicative identity defined only for square matrices")
```

V3: same as above but

```
model = Dense(D, 2, softmax)
loss(x, y) = crossentropy(model(x), y)
Y = onehotbatch(y, 0:1)
```

Fails:

```
MethodError: no method matching similar(::Float32)
```

V4: success!

```
model = Chain(Dense(D, 2), softmax)
loss(x, y) = crossentropy(model(x), y)
Y = onehotbatch(y, 0:1)
```

I understand why V4 works, but why not V1-V3?