我正在使用 theano 和他们的 LeNet 教程来使用街景谷歌图像数据集训练 CNN。
我加载数据集:
train_set_x, train_set_y, \
valid_set_x, valid_set_y, \
test_set_x, test_set_y = manager.get_grayscale_data_dim()
我打印了尺寸:
self.train_data_dims (70000, 1024, 1)
self.train_labels_dims (70000, 1)
self.valid_data_dims (3250, 1024, 1)
self.valid_labels_dims (3250, 1)
self.test_data_dims (26000, 1024, 1)
self.test_labels_dims (26000, 1)
然后我按照教程做:
# allocate symbolic variables for the data
index = T.lscalar() # index to a [mini]batch
x = T.matrix('x') # the data is presented as rasterized images
y = T.ivector('y') # the labels are presented as 1D vector of
print "y.type", y.type, "y.ndim", y.ndim
print "test_set_y", test_set_y.type, "test_set_y.ndim", test_set_y.ndim
打印结果:
y.type TensorType(int64, vector) y.ndim 1
test_set_y TensorType(int64, vector) test_set_y.ndim 1
我在这里遇到了问题(这是定义的第一个函数,接下来是验证和训练,只是为了让名称不会让您感到困惑,并且您不认为使用类似的训练和验证功能一切正常):
创建一个函数来计算模型所犯的错误
test_model = theano.function(
[index],
layer3.errors(y),
givens={
x: test_set_x[index * batch_size: (index + 1) * batch_size],
y: test_set_y[index * batch_size: (index + 1) * batch_size]
}
)
准确地说,我有一个错误:
y: test_set_y[index * batch_size: (index + 1) * batch_size]
错误本身表明(afau)我正在尝试将 smth 转换为矩阵。这是在哪里发生的,我想知道?
TypeError: Cannot convert Type TensorType(float64, vector) (of Variable Subtensor{int64:int64:}.0) into Type TensorType(float64, matrix). You can try to manually convert Subtensor{int64:int64:}.0 into a TensorType(float64, matrix).
AFAIU,y 和 test_set_y 的维度一致。在我的代码中,它们都是一维向量。 为什么切片会导致错误?切片会创建矩阵吗?更重要的是,我该如何解决这个问题? 提前致谢!
预先感谢您的帮助!