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

时间:2019-04-16 13:51:38

标签: machine-learning deep-learning julia

说我有以下神经网络

Binding.bindIpAndPort

我想知道要放置什么而不是net = Chain(Dense(3,5,\sigma), Dense(5,2, ???)) ,以便我的第一个输出神经元通过RELU激活函数,第二个为S形函数。该网络的输出是要执行的一对动作,第一个是正实数值,另一个是二进制选择。

我无法定义一个可以选择的自定义“ relu_sigma”函数,因为它的工作方式是激活函数采用单个值,而不是数组。因此,我无法创建一个知道是将第一个{{1}还是第二个???作为参数的函数。

更笼统地说,我想知道如何使这种网络在任意数量的神经元上具有任意功能(例如5个relu,2个S型,最后4个softmax)

1 个答案:

答案 0 :(得分:0)

我定义了一个自定义图层类型,如下所示。它不是一般的,它仅将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