如何从Theano堆叠自编码器获取预测向量
我正在尝试修改一个叫做“堆叠自编码器”的模型,用于分类,这个模型是基于Theano的,具体内容可以在深度学习教程的第8章找到。我正在处理的自编码器代码可以在这里找到。
我的数据集包含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的自编码器或者提到的教程,请帮帮我。
谢谢。
1 个回答
2
valid_score
的输出是验证集上的错误率。一个87%
的验证分数意味着你只正确分类了大约12%的验证样本。这个结果看起来和“全是4”的预测规则是一致的。