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?