3

Theano深層学習チュートリアルの第 8 章から、分類用に Stacked Autoencoder を変更しようとしています。私が扱っている autoencoder のコードは、こちらで入手できます。

私のデータセットは、test_set_x、test_set_y、valid_set_x、valid_set_y の 4 つの配列で構成されています。名前は自明です。

これは、トレーニングされたオートエンコーダーが検証セットでチェックされる方法です。

valid_score = the.function([], sda.errors,
                 givens={
                    sda.x: valid_set_x,
                    sda.y: valid_set_y},
                 name='valid_test')

print valid_score()

このコードは私のデータセットに「0.87」を出力するので、うまくいきます。

より冗長に表現する

valid_score = the.function([], T.mean(T.neq(sda.logLayer.y_pred, sda.y)),
                 givens={
                    sda.x: valid_set_x,
                    sda.y: valid_set_y},
                 name='valid_test')

それでも正解率は 87% です。

しかし、実際のクラスの予測ベクトルを直接取得しようとすると、非常に間違った結果が得られます。結果ベクトルのすべての要素は 4 (私のクラスでは 1 つ) です。

私の試みは次のようになります:

predict = the.function([], sda.logLayer.y_pred,
                   givens={sda.x: valid_set_x})
print predict()

これは "[4, 4, 4, ....., 4, 4]" を出力します。この結果を valid_set_y ベクトルと比較すると、約 12% の正確性が得られますが、87% 近くにもなりません。

私が間違っていることを理解していません。

theano オートエンコーダーおよび/または言及されたチュートリアルを扱ったことがある場合は、私を助けてください。

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

4

1 に答える 1