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 オートエンコーダーおよび/または言及されたチュートリアルを扱ったことがある場合は、私を助けてください。
ありがとうございました。