如何创建具有多个输出层的神经网络(Julia、Flux)

How to create a neural network with multiple output layers (Julia, Flux)

假设我有以下神经网络

net = Chain(Dense(3,5,\sigma), Dense(5,2, ???))

我想知道用什么代替 ??? 以便我的第一个输出神经元通过 RELU 激活函数,第二个通过 sigmoid 函数。该网络的输出是要执行的一对动作,第一个是正实数值,另一个是二元选择。

我无法定义可以做出选择的自定义 "relu_sigma" 函数,因为它的工作方式是激活函数采用单个值,而不是数组。所以我无法创建一个知道它是将第一个还是第二个 Wx+b 作为参数的函数。

更一般地说,我想知道如何在任意数量的神经元上创建具有任意数量函数的这种网络(例如,5 个 relu、2 个 sigmoid 和最后 4 个上的 softmax)

我定义了一个自定义图层类型如下。它不是一般的,它只对神经元的前半部分应用 relu,对后半部分应用 sigma。但这就是我想要的应用程序,概括不应该太复杂而无法弄清楚。

struct reluSigma
    W
    b
end
reluSigma(in::Integer, out::Integer) =  reluSigma(param(randn(out, in)), param(randn(out)))

function (m::reluSigma)(x)
    l = Int(length(m.b)/2)
    r1 = 1:l
    r2 = l+1:length(m.b)
    vcat(relu(m.W[r1,:] * x .+ m.b[r1,:]), σ(m.W[r2,:] * x .+ m.b[r2,:]))
end