我正试图修改堆叠式自动编码器,以便从第8章的“编号deep learning tutorial”中进行分类。我正在处理的自动编码器的代码是可用的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]”。将此结果与有效的集向量进行比较,正确率约为12%,甚至接近87%。
我不明白我做错了什么。
请帮助我,如果你曾经有过一个协议,没有自动编码器和/或提到的教程。
谢谢您。

最佳答案

valid_score输出是验证集上的错误率。87%的验证分数意味着您仅成功地对大约12%的验证示例进行了正确分类。这个结果似乎与“全部4”预测规则相一致。

07-27 13:58