use explicit converts
This commit is contained in:
parent
d54b0e312a
commit
65a41f2de6
@ -2,16 +2,16 @@ using NNlib: logsoftmax, logσ
|
||||
|
||||
# Cost functions
|
||||
|
||||
mse(ŷ, y) = sum((ŷ .- y).^2)/length(y)
|
||||
mse(ŷ, y; efftype = eltype(ŷ)) = sum((ŷ .- y).^2)/convert(efftype, length(y))
|
||||
|
||||
function crossentropy(ŷ::AbstractVecOrMat, y::AbstractVecOrMat; weight = 1)
|
||||
-sum(y .* log.(ŷ) .* weight) / size(y, 2)
|
||||
function crossentropy(ŷ::AbstractVecOrMat, y::AbstractVecOrMat; weight = 1, efftype = eltype(ŷ))
|
||||
-sum(y .* log.(ŷ) .* weight) / convert(efftype, size(y, 2))
|
||||
end
|
||||
|
||||
@deprecate logloss(x, y) crossentropy(x, y)
|
||||
|
||||
function logitcrossentropy(logŷ::AbstractVecOrMat, y::AbstractVecOrMat; weight = 1)
|
||||
return -sum(y .* logsoftmax(logŷ) .* weight) / size(y, 2)
|
||||
function logitcrossentropy(logŷ::AbstractVecOrMat, y::AbstractVecOrMat; weight = 1, efftype = eltype(ŷ))
|
||||
return -sum(y .* logsoftmax(logŷ) .* weight) / convert(efftype, size(y, 2))
|
||||
end
|
||||
|
||||
"""
|
||||
|
@ -72,7 +72,7 @@ for (M, f, arity) in DiffRules.diffrules()
|
||||
f = :($M.$f)
|
||||
@eval begin
|
||||
@grad $f(a::TrackedReal, b::TrackedReal) = $f(data(a), data(b)), Δ -> (Δ * $da, Δ * $db)
|
||||
@grad $f(a::TrackedReal, b::Real) = $f(data(a), b), Δ -> (Δ * convert(TrackedReal{eltype(Δ)}, $da), _zero(b))
|
||||
@grad $f(a::TrackedReal, b::Real) = $f(data(a), b), Δ -> (Δ * $da, _zero(b))
|
||||
@grad $f(a::Real, b::TrackedReal) = $f(a, data(b)), Δ -> (_zero(a), Δ * $db)
|
||||
$f(a::TrackedReal, b::TrackedReal) = track($f, a, b)
|
||||
$f(a::TrackedReal, b::Real) = track($f, a, b)
|
||||
|
Loading…
Reference in New Issue
Block a user