我正在尝试修改Stacked Autoencoder以便从Theano deep learning tutorial进行分类,第8章。我正在处理的自动编码器代码可用here。
我的数据集由4个数组组成:test_set_x,test_set_y,valid_set_x,valid_set_y。这些名字是自我解释的。
这是在验证集上检查训练的自动编码器的方法:
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(我的类中有一个)。
我的尝试看起来像这样:
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 autoencoders和/或上述教程达成协议,请帮助我。
谢谢。
答案 0 :(得分:2)
valid_score
输出是验证集上的错误率。验证分数为87%
表示您只能正确分类约12%的验证示例。这个结果似乎与“全4”预测规则一致。