2017-08-22 12 views
1

CNTKツールをありがとうございました。いくつかの日以来、私は単純なネットワークを設定しようとしますが、私はそれを得ることはありません。私は、例えば、2入力および3出力とのネットワークを必要とする:CNTKノーホットベクトル出力を持たないニューラルネットワーク(マルチクラス分類器)

|features 0.3 0.5 |labels 0.2 0.7 0.9 

出力がないワンホット・ベクトルで、ネットワークはラベル値0.2 0.7 0.9を学ぶことがあります。しかし、ほとんどの例では出力として1ホットベクトルがあるので、これを解決する方法は私には分かりません。私は3分類でチュートリアルを変更しようとしましたが、それは動作しません、ネットワークは出力を正しく学習しません。私が試してみましたネットワークは、次のとおりです。

BrainScriptNetworkBuilder = { 

    SDim = 2  # feature dimension 
    H1Dim = 50 # hidden dimension 
    H2Dim = 50 # hidden dimension 
    LDim = 3  # number of classes (labels) 

    model (features) = { 
     W0 = ParameterTensor {(H1Dim:SDim)} ; b0 = ParameterTensor {H1Dim} 
     W1 = ParameterTensor {(H2Dim:H1Dim)} ; b1 = ParameterTensor {H2Dim} 
     W2 = ParameterTensor {(LDim:H2Dim)} ; b2 = ParameterTensor {LDim} 

     r1 = ReLU(W0 * features + b0) # hidden layer 1 
     r2 = ReLU(W1 * r1  + b1) # hidden layer 2 
     z = ReLU(W2 * r2  + b2) 
    }.z 

    # define inputs 
    features = Input {SDim, sparse = false} 
    labels = Input {LDim, sparse = false} 

    # apply model to features 
    z = model (features) 

    # define criteria and output(s) 
    ce = SquareError(labels, z) # criterion (loss) 
    err = SquareError(labels, z) # additional metric 

    # connect to the system. These five variables must be named exactly like this. 
    featureNodes = (features) 
    inputNodes  = (labels) 
    criterionNodes = (ce) 
    evaluationNodes = (err) 
    outputNodes  = (z) 
} 

だから私の質問は次のとおりです。出力は1つのホットベクトルにならないように、CNTKにネットワークを設定する方法は?

ありがとうございました。

答えて

2

あなたのラベルがワンホットベクトルでない場合、squareErrorは最小限にする良い損失関数です。いくつかの例にワンホットラベルがある場合でも、squareErrorを使用できます。だから私はあなたがすべてのことを正しくやっていると思うので、うまく動くように学習率を調整しなければならないかもしれません。

+0

ニコス、ネットワーク設定が正常だったことを知っているので、私は正しい学習パラメータを見つけました。今はうまくいく。私は0.02 * 400:0.003 * 400:0.002 * 400:0.001のような学習パラメータを使用しています。また、マルチラッシファイアの問題では、ReLUの起動がシグモイド関数よりもはるかに優れているという印象を持っています。ご協力いただきありがとうございます。 –

関連する問題