Передать в 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)

person Gargob    schedule 07.03.2015    source источник
comment
что вы имеете в виду, когда говорите the Theano function в этом контексте?   -  person cel    schedule 07.03.2015
comment
Я обновил вопрос, чтобы показать код.   -  person Gargob    schedule 07.03.2015


Ответы (1)


Если я не ошибаюсь в своей интерпретации вашего кода, я не думаю, что то, что вы пытаетесь сделать, имеет смысл.

Если я правильно понимаю, в model() вы вычисляете взвешенную сумму по пикселям изображения, используя dot(X, w), где я предполагаю, что X — это (nimages, npixels) массив данных изображения, а w — весовая матрица с фиксированными размерами (784, 10) .

Чтобы скалярное произведение можно было вычислить, X.shape[1] (количество пикселей в каждом из ваших входных изображений) должно равняться w.shape[0].

Если размеры ваших входных изображений различаются, как вы можете ожидать изучения единой весовой матрицы с фиксированными размерами?

person ali_m    schedule 07.03.2015
comment
Спасибо за понимание! - person Gargob; 08.03.2015
comment
Я рад, что это помогло. В будущем, пожалуйста, постарайтесь лучше объяснить свой пример кода; в идеале сделать его работоспособным, сгенерировав некоторые поддельные входные данные. Из вашего вопроса действительно не очевидно, что вы пытаетесь сделать. Цель SO состоит в том, чтобы вопросы и ответы были полезны будущим читателям, пытающимся решить аналогичные проблемы. - person ali_m; 08.03.2015