我正在尝试从 Theano深度学习教程第 8 章修改 Stacked Autoencoder 以进行分类。我正在处理的自动编码器的代码可在此处获得。
我的数据集由 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 自动编码器和/或提到的教程打过交道,请帮助我。
谢谢你。