Как тренировать LSTM слой глубокой сети


13

Я использую lstm и сеть прямой связи для классификации текста.

Я преобразую текст в горячие векторы и подаю каждый в lstm, чтобы суммировать его как единое представление. Затем я передаю его в другую сеть.

Но как мне тренировать LSTM? Я просто хочу последовательно классифицировать текст - я должен кормить его без обучения? Я просто хочу представить отрывок как отдельный элемент, который я могу подать на входной слой классификатора.

Буду очень признателен за любые советы с этим!

Обновить:

Итак, у меня есть lstm и классификатор. Я беру все выходные данные lstm и собираю их среднее значение, а затем подаю это среднее значение в классификатор.

Моя проблема в том, что я не знаю, как обучить LSTM или классификатор. Я знаю, каким должен быть ввод для lstm и каким должен быть вывод классификатора для этого ввода. Поскольку это две отдельные сети, которые просто активируются последовательно, мне нужно знать и не знать, каким должен быть идеальный вывод для lstm, который также будет входом для классификатора. Есть ли способ сделать это?

Ответы:


9

Лучшее место, чтобы начать с LSTMs - это запись в блоге А. Карпати http://karpathy.github.io/2015/05/21/rnn-effectiveness/ . Если вы используете Torch7 (что я настоятельно рекомендую), исходный код доступен на github https://github.com/karpathy/char-rnn .

Я бы также попытался немного изменить вашу модель. Я бы использовал подход «многие к одному», чтобы вы вводили слова через таблицу поиска и добавляли специальное слово в конце каждой последовательности, чтобы только при вводе знака «конец последовательности» вы читали классификацию. выведите и рассчитайте ошибку на основе вашего критерия обучения. Таким образом, вы будете тренироваться непосредственно в контролируемом контексте.

С другой стороны, более простой подход заключается в использовании параграфа 2 ( https://radimrehurek.com/gensim/models/doc2vec.html ) для извлечения объектов для входного текста, а затем запуска классификатора поверх ваших функций. Извлечение векторного объекта абзаца очень просто, и в Python это будет:

class LabeledLineSentence(object):
    def __init__(self, filename):
        self.filename = filename

    def __iter__(self):
        for uid, line in enumerate(open(self.filename)):
            yield LabeledSentence(words=line.split(), labels=['TXT_%s' % uid])

sentences = LabeledLineSentence('your_text.txt')

model = Doc2Vec(alpha=0.025, min_alpha=0.025, size=50, window=5, min_count=5, dm=1, workers=8, sample=1e-5)
model.build_vocab(sentences)

for epoch in range(epochs):
    try:
        model.train(sentences)
    except (KeyboardInterrupt, SystemExit):
        break

Спасибо за ответ. Я буду рассматривать их. Есть ли у вас какие-либо советы по конкретному вопросу в моем вопросе - я обновил его.
WordSmith

Я не думаю, что ваша описанная процедура даст какие-либо результаты. Что вы будете тренироваться против LSTM? Я не уверен, что понимаю, зачем в этом случае использовать LSTM для изучения неконтролируемых функций для целого предложения. У вас есть какая-нибудь соответствующая литература по вашему подходу, с которой я мог бы вам помочь? Это также может вас заинтересовать arxiv.org/abs/1306.3584 .
Яннис Ассаэль

Я буду тренировать LSTM, основываясь на наборе данных прошлых отрывков текста и их классов. Я не собираюсь использовать неконтролируемое обучение. Я хочу тренировать это вручную, но не знаю как. Вот моя реализация lstm и классификатора без библиотеки машинного обучения, которая, как я знаю, работает: pastebin.com/63Cqrnef lstm имеет функцию deepActivate, которая активирует lstm, а затем классификатор, как я упоминал в моем вопросе. Вот что-то вроде того, что я пытаюсь реализовать: deeplearning.net/tutorial/lstm.html
wordSmith

но когда я попытался активировать их как одну сеть, я получил неопределенный от каждого из выходных слоев. Подробнее об этом здесь: stats.stackexchange.com/q/159922/81435
wordSmith

1
Большое спасибо! Вы предоставили гораздо больше помощи, чем требовалось. Спасибо, что сделали все возможное.
WordSmith
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.