Как мога да ускоря автоматичен енкодер, който да използва върху текстови данни, написани в пакета theano на python?

Нов съм в theano и се опитвам да адаптирам скрипта за автоматично кодиране тук, за да работи върху текстови данни. Този код използва набора от данни MNIST като данни за обучение. Тези данни са под формата на numpy 2d масив.

Моите данни са csr разредена матрица от около 100 000 екземпляра с около 50 000 функции. Матрицата е резултат от използването на tfidfvectorizator на sklearn за напасване и трансформиране на текстовите данни. Тъй като използвам разредени матрици, променям кода, за да използвам пакета theano.sparse, за да представя моя вход. Моят тренировъчен набор е символичната променлива:

train_set_x = theano.sparse.shared(train_set)

Матриците theano.sparse обаче не могат да изпълняват всички операции, използвани в оригиналния скрипт (има списък с редки операции тук). Кодът използва точка и сума от тензорните методи на входа. Промених точката на sparse.dot, но не мога да намеря с какво да заменя сумата, така че конвертирам тренировъчните партиди в плътни матрици и използвам оригиналните тензорни методи, както е показано в тази функция на разходите:

 def get_cost(self):
     tilde_x = self.get_corrupted_input(self.x, self.corruption)
     y = self.get_hidden_values(tilde_x)
     z = self.get_reconstructed_input(y)
     #make dense, must be a better way to do this
     L = - T.sum(SP.dense_from_sparse(self.x) * T.log(z) + (1 - SP.dense_from_sparse(self.x)) * T.log(1 - z), axis=1)
     cost = T.mean(L)
     return cost

def get_hidden_values(self, input):
    # use theano.sparse.dot instead of T.dot
    return T.nnet.sigmoid(theano.sparse.dot(input, self.W) + self.b)

Методите get_corrupted_input и get_reconstructed_input остават както са в връзката по-горе. Въпросът ми е има ли по-бърз начин да направя това?

Преобразуването на матриците в плътни прави обучението много бавно. Понастоящем са необходими 20,67 m, за да се направи една тренировъчна епоха с размер на партида от 20 тренировъчни инстанции.

Всяка помощ или съвети, които можете да дадете, ще бъдат много оценени!


person clurhur    schedule 13.11.2014    source източник


Отговори (1)


В най-новия главен клон на theano.sparse има изброен метод sp_sum.

(вижте тук)

Ако не използвате версията на кървящия край, бих я инсталирал и ще видя дали извикването ще работи и дали това ще ускори нещата:

pip install --upgrade --no-deps git+git://github.com/Theano/Theano.git

(И ако е така, би било хубаво да го отбележим тук, не винаги е ясно, че разредената функционалност е много по-бърза от използването на плътни изчисления през целия път, особено на графичния процесор.)

person user2805751    schedule 15.11.2014