将可变大小的图像矩阵传入 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]
.
如果输入图像的大小各不相同,您如何期望学习具有固定维度的单个权重矩阵?
我正在尝试使用 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]
.
如果输入图像的大小各不相同,您如何期望学习具有固定维度的单个权重矩阵?