如何从Theano堆叠自编码器获取预测向量

3 投票
1 回答
980 浏览
提问于 2025-04-18 12:56

我正在尝试修改一个叫做“堆叠自编码器”的模型,用于分类,这个模型是基于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”的预测规则是一致的。

撰写回答