将可变大小的图像矩阵传入 Theano

Pass in matrix of images of variables sizes into Theano

我正在尝试使用 Theano 做一些识别。我所有的图像都是不同尺寸的,我不想调整它们的大小,因为它们是绘画,所以它们不应该是相同的尺寸。我想知道如何将可变图像大小长度的图像矩阵传递给 Theano 函数。

我的印象是这对于 numpy 是不可能的。有替代品吗?

def floatX(X):
    return np.asarray(X, dtype=theano.config.floatX)

def init_weights(shape):
    return theano.shared(floatX(np.random.randn(*shape) * 0.01))

def model(X, w):
    return T.nnet.softmax(T.dot(X, w))

X = T.fmatrix()
Y = T.fmatrix()

w = init_weights((784, 10))

py_x = model(X, w)
y_pred = T.argmax(py_x, axis=1)

cost = T.mean(T.nnet.categorical_crossentropy(py_x, Y))
gradient = T.grad(cost=cost, wrt=w)
update = [[w, w - gradient * 0.05]]

train = theano.function(inputs=[X, Y], outputs=cost, updates=update, allow_input_downcast=True)
predict = theano.function(inputs=[X], outputs=y_pred, allow_input_downcast=True)

除非我对您的代码的解释有误,否则我认为您的尝试没有意义。

如果我理解正确,在 model() 中,您使用 dot(X, w) 计算图像像素的加权和,我假设 X 是一个 (nimages, npixels) 数组的图像数据,w 是具有 固定 维度 (784, 10).

的权重矩阵

为了甚至可以计算该点积,X.shape[1](每个输入图像中的像素数)必须等于w.shape[0].

如果输入图像的大小各不相同,您如何期望学习具有固定维度的单个权重矩阵?