说我有以下神经网络
Binding.bindIpAndPort
我想知道要放置什么而不是net = Chain(Dense(3,5,\sigma), Dense(5,2, ???))
,以便我的第一个输出神经元通过RELU激活函数,第二个为S形函数。该网络的输出是要执行的一对动作,第一个是正实数值,另一个是二进制选择。
我无法定义一个可以选择的自定义“ relu_sigma”函数,因为它的工作方式是激活函数采用单个值,而不是数组。因此,我无法创建一个知道是将第一个{{1}还是第二个???
作为参数的函数。
更笼统地说,我想知道如何使这种网络在任意数量的神经元上具有任意功能(例如5个relu,2个S型,最后4个softmax)
答案 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