【问题标题】:How to create a neural network with multiple output layers (Julia, Flux)如何创建具有多个输出层的神经网络(Julia、Flux)
【发布时间】:2019-04-16 13:51:38
【问题描述】:

假设我有以下神经网络

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

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

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

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

【问题讨论】:

    标签: machine-learning deep-learning julia flux.jl


    【解决方案1】:

    我定义了一个自定义层类型如下。它没有那么普遍,它只适用于前半部分神经元的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
    
    

    【讨论】:

      猜你喜欢
      • 2019-08-07
      • 2017-11-16
      • 2016-09-08
      • 2018-01-25
      • 2016-12-30
      • 1970-01-01
      • 2018-02-28
      • 1970-01-01
      • 2019-08-02
      相关资源
      最近更新 更多