假设我有以下神经网络
net = Chain(Dense(3,5,\sigma), Dense(5,2, ???))我想知道用什么代替???,这样我的第一个输出神经元就通过一个RELU激活函数,第二个是乙状结肠函数。这个网络的输出是一对要执行的动作,第一个是正值,另一个是二进制选择。
我不能定义一个自定义的"relu_sigma“函数来进行选择,因为它的工作方式是激活函数只接受一个值,而不是一个数组。因此,我不能创建一个函数,它知道它是以第一个还是第二个Wx+b作为参数。
更广泛地说,我想知道如何在任意数量的神经元上建立具有任意数量功能的这种网络(例如,5个relu,2个乙状结肠,以及最后4个神经元的softmax )。
发布于 2019-04-16 15:03:39
我定义了一个自定义层类型如下。它不是一般的,它只对神经元的前半部应用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,:]))
endhttps://stackoverflow.com/questions/55709856
复制相似问题