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

Я новичок в theano и пытаюсь настроить здесь скрипт автоэнкодера для работы по текстовым данным. Этот код использует набор данных MNIST в качестве обучающих данных. Эти данные представлены в виде двухмерного массива numpy.

Мои данные представляют собой разреженную матрицу csr из примерно 100 000 экземпляров с примерно 50 000 функций. Матрица является результатом использования tfidfvectorizer 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 млн. Для одной обучающей эпохи с размером пакета из 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