我想设置我的模型以在 Flux.jl 中使用交叉熵损失。我该如何做到这一点,我将在哪里传递损失函数本身?
1 回答
3
Flux.jl 提供了一个内置模块,通过该Flux.Losses
模块可以访问许多常见的损失函数using Flux.Losses
。模块中有一个内置的交叉熵损失函数,可以使用如下:
julia> y_label = Flux.onehotbatch([0, 1, 2, 1, 0], 0:2)
3×5 Flux.OneHotArray{3,2,Vector{UInt32}}:
1 0 0 0 1
0 1 0 1 0
0 0 1 0 0
julia> y_model = softmax(reshape(-7:7, 3, 5) .* 1f0)
3×5 Matrix{Float32}:
0.0900306 0.0900306 0.0900306 0.0900306 0.0900306
0.244728 0.244728 0.244728 0.244728 0.244728
0.665241 0.665241 0.665241 0.665241 0.665241
julia> sum(y_model; dims=1)
1×5 Matrix{Float32}:
1.0 1.0 1.0 1.0 1.0
julia> Flux.crossentropy(y_model, y_label)
1.6076053f0
您可以在Flux.crossentropy
这里找到完整的函数定义:https ://fluxml.ai/Flux.jl/stable/models/losses/#Flux.Losses.crossentropy
定义损失函数后,您可以将其传递给内置的训练函数:Flux.train!(loss, params(model), data, opt)
或在您的自定义训练循环中使用它。
于 2021-07-03T20:15:38.607 回答