From 3dceef427f69418220692b931d819c49e77f0810 Mon Sep 17 00:00:00 2001 From: janEbert Date: Fri, 8 Nov 2019 16:48:11 +0100 Subject: [PATCH 1/2] Fix binarycrossentropy on CuArrays --- src/layers/stateless.jl | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/layers/stateless.jl b/src/layers/stateless.jl index b8ce3c7d..5f9c1090 100644 --- a/src/layers/stateless.jl +++ b/src/layers/stateless.jl @@ -1,3 +1,4 @@ +using CuArrays using NNlib: logsoftmax, logσ # Cost functions @@ -35,6 +36,9 @@ Return `-y*log(ŷ + ϵ) - (1-y)*log(1-ŷ + ϵ)`. The ϵ term provides numerica """ binarycrossentropy(ŷ, y; ϵ=eps(ŷ)) = -y*log(ŷ + ϵ) - (1 - y)*log(1 - ŷ + ϵ) +# Re-definition to fix interaction with CuArrays. +CuArrays.@cufunc binarycrossentropy(ŷ, y; ϵ=eps(ŷ)) = -y*log(ŷ + ϵ) - (1 - y)*log(1 - ŷ + ϵ) + """ logitbinarycrossentropy(logŷ, y) From a00d8d94ec15080aada5c1cb938ce7cab365d99e Mon Sep 17 00:00:00 2001 From: janEbert Date: Fri, 8 Nov 2019 17:28:38 +0100 Subject: [PATCH 2/2] Add test for CUDA binarycrossentropy --- test/cuda/cuda.jl | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/cuda/cuda.jl b/test/cuda/cuda.jl index d2907995..ddd92e1e 100644 --- a/test/cuda/cuda.jl +++ b/test/cuda/cuda.jl @@ -31,6 +31,10 @@ cx = gpu(x) @test Flux.crossentropy(x,x, weight=1.0) ≈ Flux.crossentropy(cx,cx, weight=1.0) @test Flux.crossentropy(x,x, weight=[1.0;2.0;3.0]) ≈ Flux.crossentropy(cx,cx, weight=cu([1.0;2.0;3.0])) +x = σ.([-1.1491, 0.8619, 0.3127]) +y = [1, 1, 0.] +@test Flux.binarycrossentropy.(x,y) ≈ Flux.binarycrossentropy.(cu(x),cu(y)) + xs = rand(5, 5) ys = Flux.onehotbatch(1:5,1:5) @test collect(cu(xs) .+ cu(ys)) ≈ collect(xs .+ ys)