Существует тесная неявная связь между образами, которые мы представляем себе, когда слушаем любую песню. Например, при прослушивании песни о любви в голову обычно приходят образы счастливых, улыбающихся, сияющих, красивых людей в любящих объятиях друг друга. Я решил обучить набор случайных изображений вместе с песнями, а затем попытаться сгенерировать стихотворение для любого заданного случайного изображения с помощью машинного обучения. В старые времена существовало понятие «ситуационная поэзия», когда художники писали стихи на любую ситуацию. Может ли машинное обучение сделать это?

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

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

Абстрактный

Мультимодальное обучение, при котором обучающий набор машинного обучения состоит из нескольких режимов данных (текст, изображения, аудио и т. д.) и одновременно обученных и полученных результатов. Например, изображения и текст тренируются вместе, так что глядя на изображение; «контекст» может быть получен из изображения. Это внутренне использует различные методы глубокого обучения, такие как RNN (рекуррентная нейронная сеть) / LSTM (долговременная кратковременная память). Он дает предсказание «перспективы» данного объекта на основе «стиля» обученных данных. Например, если есть изображение «стены», то мы можем использовать его для генерации текста, который может быть произнесен Трампом, Хиллари или кем-то еще. Мы нашли эту захватывающую новую разработку, которая приближает машину к искусству и человеческому восприятию, и решили расширить ее, попытавшись применить ее для обучения тексту песни и посмотреть, сможем ли мы создать несколько значимых лирических цитат. Существует сильная корреляция между показанными изображениями и воспроизводимой песней. Например, для романтической песни о любви изображения обычно будут счастливыми, сияющими, красивыми любящими людьми и т. д. Мы решили обучить набор изображений вместе с песнями, а затем попытаться создать строфу песни для любого заданного случайного изображения.

Сначала он обучит модель с использованием полуконтролируемого набора данных, такого как Flicker, и обучит ее подписям, чтобы сгенерировать подписи для изображения. Позже другая модель будет обучена определенному элементу стиля, например лирике, с использованием концепции пропуска векторов мысли; и способен создавать тексты на основе этого обученного стиля. Наконец, выходные данные первой модели (генерирующей титры) передаются в качестве входных данных второй модели (генерирующей лирику на основе стиля) для создания «контекстной лирики» на основе изображения. Он будет использовать возможности RNN, поскольку RNN может обучать модель, основанную не только на текущем входе, но и на всех других входных данных до него. Таким образом, работая с последовательностью векторов и упорядочивая входные и выходные данные.

Он в значительной степени опирается на нейронную архитектуру, разработанную участниками с открытым исходным кодом в этой области, особенно Karparthy из MIT Labs.

1. Введение

Машинное обучение давно используется для распознавания закономерностей. Однако в последнее время идея о том, что машину можно использовать для «создания» узоров, захватила воображение каждого. Идея о том, что машины могут создавать произведения искусства, имитируя известные художественные стили или при любых входных данных, обеспечивающих «человеческую перспективу» на выходе, стала новым рубежом машинного обучения.

Хотя RNN известна уже давно, только совсем недавно было обнаружено, что она очень успешно обучает такие модели, которые могут принимать последовательность входных данных и создавать последовательность выходных данных. (Это резко отличается от типичных нейронных сетей или сверточных нейронных сетей, поскольку они принимают вектор фиксированного размера в качестве входных данных (например, изображение) и создают вектор фиксированного размера в качестве выходных данных, например, вероятности разных классов). RNN объединяют входной вектор со своим вектором состояния с фиксированной (но изученной) функцией для создания нового вектора состояния. Несмотря на то, что фактические вычисления выполняются с использованием LSTM, концептуальный метод, описанный ниже, остается прежним. Ниже содержание объясняет на более высоком уровне, как работает базовая модель.

1.1 Модель Char-RNN [1]

Карпаты лучше всего объяснили эту модель, как показано ниже.

RNN принимает входной вектор x и дает вам выходной вектор y. Однако на содержимое этого выходного вектора влияют не только входные данные, которые вы только что ввели, но и вся история входных данных, которые вы вводили в прошлом. RNN также использовал что-то вроде скрытого вектора h, так что он имеет некоторое внутреннее состояние, которое обновляется при каждом вызове шага. Прямой проход этой сети, как показано ниже

tanh реализует нелинейность, которая сжимает активации до диапазона [-1,1]. В приведенном выше уравнении используется один параметр, основанный на предыдущем скрытом состоянии, и другой, основанный на текущем входе и создающий вектор состояния.

Матрицы RNN инициализируются случайными числами, и основная часть работы во время обучения заключается в поиске матриц, которые приводят к желательному поведению, измеряемому с помощью некоторой функции потерь, которая выражает ваши предпочтения относительно того, какие виды выходных данных вы хотели бы получить. см. в ответ на ваши входные последовательности x. Затем это складывается с использованием классического метода глубокого обучения с использованием нескольких слоев RNN, так что выходные данные одного этапа передаются в качестве входных данных для другого этапа.

Пример RNN с 4-мерными входными и выходными слоями и скрытым слоем из 3 единиц (нейронов). На этой диаграмме показаны активации при прямом проходе, когда в RNN подаются символы «ад» в качестве входных данных. Выходной слой содержит доверительные значения, которые RNN присваивает следующему символу (словарь — «h, e, l, o»); Мы хотим, чтобы зеленые числа были высокими, а красные — низкими.

Мультимодальные модели использовали концепцию так называемых векторов «пропущенной мысли». Например, мы видим, что на первом временном шаге, когда RNN увидела символ «h», она присвоила достоверность 1,0 следующей букве «h», 2,2 — букве «e», -3,0 — «l» и 4,1. слишком". Поскольку в наших обучающих данных (строка «привет») следующим правильным символом является «е», мы хотели бы повысить его достоверность (зеленый) и уменьшить достоверность всех остальных букв (красный). Точно так же у нас есть желаемый целевой персонаж на каждом из 4 временных шагов, которому мы хотели бы, чтобы сеть присвоила большую достоверность. Поскольку RNN полностью состоит из дифференцируемых операций, мы можем запустить алгоритм обратного распространения, чтобы выяснить, в каком направлении мы должны скорректировать каждый из его весов, чтобы увеличить количество баллов правильных целей (цифры, выделенные зеленым жирным шрифтом). Затем мы можем выполнить обновление параметра, которое немного сдвигает каждый вес в этом направлении градиента. Если бы мы подали те же входные данные в RNN после обновления параметров, мы бы обнаружили, что оценки правильных символов (например, «e» на первом временном шаге) были бы немного выше (например, 2,3 вместо 2,2), а количество неправильных символов будет немного ниже.

Затем этот процесс повторяется много раз, пока сеть не сойдется, а ее прогнозы в конечном итоге не согласуются с обучающими данными в том, что правильные символы всегда предсказываются следующими. В первый раз, когда вводится символ «l», цель — «l», но во второй раз цель — «o». Поэтому RNN не может полагаться только на ввод и должна использовать свое рекуррентное соединение для отслеживания контекста для выполнения этой задачи.

Во время тестирования мы вводим символ в RNN и получаем распределение относительно того, какие символы, вероятно, будут следующими. Мы сэмплируем из этого дистрибутива и возвращаем его обратно, чтобы получить следующую букву. Это повторяется для генерации текста на основе стиля обученных данных. RNN обучается с помощью мини-пакетного стохастического градиентного спуска и использует классификатор Softmax для каждого выходного вектора одновременно.

1.2 Модель RNN от изображения к подписи[1]

Эта модель использует ту же концепцию, что и выше, но обучается на полуконтролируемом наборе данных изображений. Возможно, стоит объяснить, из чего здесь состоит полууправляемый набор данных. Он содержит изображения и подпись, написанную добровольцами. Это только вход во весь процесс, который имеет некоторую форму человеческого взаимодействия. В настоящее время доступно очень мало таких наборов данных, например, Flicker, созданный Университетом Иллинойса, и COCO, выпущенный Microsoft для конкуренции. Интуитивно говоря, модель обучается по-разному, чтобы распознавать изображения и их описания предложений, чтобы узнать об интермодальных соответствиях между языком и визуальными данными. Он использовал CNN и Multimodal RNN для создания описаний изображений. Опять же, LSTM используется для реализации RNN.

Модель предполагает входной набор данных изображений и их описания предложений. Ключевая интуиция заключается в том, что предложения, написанные людьми, часто ссылаются на какое-то конкретное, но неизвестное место на изображении. Например, слова «Полосатый кот наклоняется» относятся к коту, слова «деревянный стол» относятся к столу и т. д. Мы хотел бы вывести эти скрытые соответствия с конечной целью позже научиться генерировать эти фрагменты из областей изображения. Он описывает нейронные сети, которые отображают слова и области изображений в общее мультимодальное встраивание. Затем мы вводим нашу новую цель, которая изучает вложенные представления, чтобы семантически сходные понятия в двух модальностях занимали близлежащие области пространства. CNN сначала преобразует пиксели в размерные активации полносвязного слоя перед классификатором. Таким образом, каждое изображение представляется в виде набора h-мерных векторов. Чтобы установить интермодальные отношения, мы хотели бы представить слова в предложении в том же самом h пространстве вложения, которое занимают области изображения. Затем он использует двунаправленную рекуррентную нейронную сеть (BRNN) для вычисления представлений слов (показанных выше как LSTM). BRNN берет последовательность из N слов (закодированных в представлении 1 из k) и преобразует каждое из них в h-мерный вектор. Затем следует типичная реализация RNN. Функция активации настроена на выпрямленную линейную единицу (ReLU), которая вычисляет f. Обучение RNN точно такое же, как описано в предыдущей модели. Наконец, используется метод оптимизации, который представляет собой SGD с мини-пакетами для оптимизации модели. [1]

1.3 Объединить две модели

Мы попытались объединить две приведенные выше модели и посмотреть, сможем ли мы генерировать описания на основе изображений. Он интуитивно берет подписи, созданные для изображений, а затем на основе стиля и других обученных данных создает выходные данные.

Итак, в приведенном выше примере у нас есть модель преобразования изображения в текст, которая, например, обучена на полуконтролируемом наборе данных MCOCOCO. Есть еще одна модель, которая, например, обучается на книжных данных. Теперь заголовок, сгенерированный первой моделью для данного изображения; вместо этого может быть сгенерирован «стиль» второго обученного набора данных; путем заполнения или заполнения им второй модели.

2 Сбор данных

Изображения с подписями

Я собрал два типа данных для обучения моделей: изображения с подписями (набор данных мерцания) и стили текста (тексты песен).

Существует очень мало доступных полуконтролируемых наборов данных изображений. Мы использовали набор изображений Flicker с подписью, созданный Университетом Иллинойса в Урбане Шампейн. Мы попросили их поделиться с нами этим набором данных, и они предоставили то же самое. Это становится нашим набором данных для обучения изображений. [3]

Сбор данных - тексты песен

Ниже приведены шаги, выполняемые для сбора текстов песен. Код также включен в конце.

  1. Вручную загрузите подмножество набора данных millionsongs. Он содержит 10000 песен и все метаданные о них. Это набор данных, созданный Колумбийским университетом для академических целей. [5]
  2. Извлеките метаданные из этого набора данных, специально извлеките исполнителя и название и добавьте в фрейм данных.
  • Следующим шагом является извлечение текстов песен для каждого исполнителя и название, которое было захвачено. Для этого мы использовали википедию. [6]
  1. Сопоставьте исполнителя и название, извлеченные из набора данных миллионов песен, и объедините их с сайтом вики лирики, чтобы извлечь лирику и добавить ее в фрейм данных.
  2. Продолжайте обрабатывать все песни, в конечном итоге заканчивая загрузкой текстов всех песен в подмножестве набора данных миллионов песен.
  3. Теперь мы можем немного почистить данные. Первый шаг — избавиться от песен, для которых не найден текст. Это могут быть инструментальные песни или песни, записи которых отсутствуют в лирике вики.
  • Далее следует избавиться от неанглоязычных песен. Для этого пишется функция с использованием пакета NLTK. Он будет использовать английскую лексику для проверки процента неанглийских слов в песне. Естественно, что английские песни содержат слова, которые есть в английском словаре или даже из других языков, поэтому вместо строгой фильтрации мы удалили только те, в которых неанглоязычных слов больше половины. Таким образом, мы получаем набор данных текстов песен на английском языке.
  • Теперь это преобразовано в формат csv, чтобы его можно было обучить.
  • Код описанного выше процесса включен вместе с проектом github

Настройка среды

  1. Для обучения модели требовались значительные вычислительные мощности. Итак, мы приобрели 32-ядерный сервер Ubuntu Linux в облаке.
  2. Позже на машине был установлен Docker, который поставляется с Python 2.7 и другими пакетами для удовлетворения требований решения. У пакета есть несколько зависимостей, которые не были перечислены, поэтому мы предпочли вариант с докером.
  • Несмотря на это, на обучение модели ушло очень много времени, почти 24 часа на один цикл обучения, который состоял из 50 эпох и 50000 итераций. Следует отметить, что наш набор данных все еще был относительно небольшим, всего несколько тысяч текстов песен.

3. Методы обучения

I. Модель преобразования изображения в текст

  • Клонировал проект Github для NeuralTalk. Обучите модель на наборе данных мерцания. Это заняло довольно много времени, так как оно длилось более 40 часов. на облачном сервере.
  • Некоторые примеры результатов приведены ниже.

II. Контекстная модель Char RNN

  • Клонируйте проект Char-RNN с Github.
  • Модель сначала обучается для целей тестирования на стихах, а затем на наборе данных песен.
  • Для этого мы можем кратко описать, как реализован алгоритм char-rnn. (см. файл RNN.py в папке)
  • Определите параметры скорости обучения и т. д. Используйте метод градиента Adagrad. Скрытая переменная состояния h используется дважды: один идет по вертикали до предсказания (y), а другой идет по горизонтали к следующему скрытому состоянию h на следующем временном шаге. Во время обратного распространения эти две «ветви» вычислений вносят свой вклад в градиенты h, и эти градиенты должны суммироваться.
  • Дайте RNN последовательность входов и выходов (seq_length long) и используйте их для настройки внутреннего состояния.
  • Инициализируйте модель со случайными семенами.
  • Создайте матрицу x, которая содержит 1 из k представлений x и предсказанного y
  • Нормализованные вероятности каждого выхода во времени содержат векторы состояния во времени.
  • Создайте прямой проход для модели RNN
  • Найдите ненормализованные логарифмические вероятности для следующих символов
  • Найти вероятности для следующих символов
  • Используйте softmax (для потери перекрестной энтропии)
  • Backward Pass-вычислить градиенты, идущие в обратном направлении
  • Найти обновления для y
  • Обратное распространение в h и через нелинейность tanh
  • Найти обновления для h
  • Сохраните dh_next для последующей итерации
  • Обновите параметры RNN в соответствии с Adagrad
  • Открыть заданный текстовый файл
  • Сделайте несколько словарей для кодирования и декодирования из 1-of-k
  • Get Insize и outsize — это len(chars). Используйте скрытый размер ,. seq_length и Learning_rate
  • перебирать партии входных и целевых выходных входных данных для RNN, цели, которые он должен выводить
  • Рассчитать потери на итерациях
  • Получить результаты

Чтобы приспособиться к структуре песен, его нужно немного настроить. Сначала мы просматриваем все стихотворения и присваиваем каждому отдельному персонажу номер. Количество различных символов называется размером словарного запаса, и мы обозначаем его через V. Дана поэма длины N, мы можем закодировать поэму как размерную матрицу NxV. Мы кодируем метки как N-мерный вектор, где k-й компонент — это метка (k+1)-го символа.

Чтобы эффективно обучать наши модели, мы хотим использовать «мини-пакетные» обновления RMSProp, однако это небольшая проблема, поскольку наши данные не все имеют одинаковую длину. Учитывая нашу партию, мы находим самую длинную строфу (скажем, длины M), а затем дополняем матрицы других стихотворений в партии строками нулей, пока все они не станут NxV. Теперь его можно закодировать как BxNxV размерный 3-тензор. Чтобы запомнить, где расположены эти строки нулей, используйте матрицу масок размерности BxN, состоящую из единиц и нулей, представляющих реальные и фантомные символы соответственно. При прямом проходе с использованием этого пакета модель вычисляет, что, по ее мнению, является наиболее вероятным следующим символом, и использует этот прогноз для вычисления потерь. Однако модель не знает разницы между реальными персонажами и фантомными персонажами и просто весело вычисляет потери для всех персонажей. Вот тут-то и появляется матрица маски; фантомные потери умножаются на нули в матрице и поэтому не накапливаются. По сути, модель будет делать прогнозы по одному символу за раз. Учитывая характер, модель вычисляет счет для каждого возможного символа. В модели используется функция потерь Softmax, поэтому эти оценки можно грубо рассматривать как распределение вероятностей. Следующий символ затем выбирается путем выборки этого распределения. Сэмплирование продолжается до тех пор, пока ваша модель не решит, что песня закончилась.

Важным параметром для результатов сравнения здесь является -температура, которая принимает число в диапазоне (0, 1]. Температура представляет собой деление прогнозируемых логарифмических вероятностей перед Softmax, поэтому более низкая температура приведет к тому, что модель более вероятные, но и более скучные и консервативные прогнозы.Более высокие температуры заставляют модель рисковать и увеличивать разнообразие результатов, но за счет большего количества ошибок.

Для набора данных текстов песен мы обнаружили, что результаты с более высокой вероятностью представляли собой поток только машинных символов/символов. Фактически результаты выше 0,65 теряются, структура запутывается.

Ниже приведены некоторые из лучших результатов при температуре t = 0,4. Ниже приведены примеры текстов песен, сгенерированные моделью. (Результаты копируются в текстовую панель из окна терминала для лучшего просмотра).

Результаты определенно были интересными. Модель смогла подобрать концепцию песни, разбить ее на строфы, добавить пробелы между строфами (да, эти пробелы генерируются моделью, а не добавляются вручную, включая некоторые знаки препинания). Он также генерировал результаты средней длины песни и содержал повторения. Модель, однако, не выбрала концепцию рифмы (возможно, потому, что она зависит от звука, а не от текста), и результаты в целом не выглядели столь впечатляющими, поэтому мы решили настроить модель.

Итак, следующий шаг настройки был для песен, разделенных на строфы, с одной, двумя или максимум тремя строками. Этот набор данных называется «refined_lyrics». Теперь модель выполняется с 50 000 итераций, размер пакета и seq_length также изменяются путем попытки нескольких комбинаций. Ниже приведены полученные результаты.

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

4. Результаты

Модель char-rnn может быть заполнена входной последовательностью, чтобы следующий набор выходной последовательности генерировался на основе вероятности предоставленного начального числа. Следующий шаг — взять подпись, сгенерированную для изображения из первой модели, и предоставить ее в качестве исходной для следующей модели. Так что, если я засею модель словом поцелуй — я могу получить следующие результаты от модели.

Затем это объединяется с подписями к изображениям, полученными от первой модели, чтобы мы могли получить. Семя, предоставленное второй модели, взято из заголовка первой модели. Полученные таким образом результаты примерно такие. Приведенный выше пример является последним ниже. Для этого запустите скрипт combine_models_neuralquotes.py

Примечания ниже. В первом примере ключевое слово из подписи было «дверь», на втором изображении «солнце», на третьем «песня» и на последнем изображении «поцелуй»

5. Заключение

Создание искусства с использованием алгоритма машинного обучения открывает новые возможности всего, что можно сделать в этой области. То, что мы сделали в этом проекте, представляет собой скромную обертку алгоритмов, которые недавно разрабатывались в этой области, и распространили их на другие области. Результаты были на удивление впечатляющими, и модель смогла понять и создать строфы достойного качества. Конечно, было много ненужного вывода (не показано выше), поэтому он может еще не пройти «Тест Тьюринга», но, безусловно, это очень интересный метод.

Использование RNN вызвало некоторые проблемы, такие как чрезвычайно долгое время обучения даже на небольшом наборе данных, однако результаты были на удивление эффективными. Прогнозы дали хорошие результаты для текстов песен с распределением вероятностей от 0,3 до 0,5, прежде чем создать действительно случайный неанглийский вывод потоков. Это отличается от других моделей стиля текста, которые лучше работают при более высоких вероятностях. Это был один из ключевых выводов, сделанных при этом, и его можно использовать для изменения алгоритма, чтобы он сходился быстрее и работал быстрее. Этот проект служит вкладом в быстрорастущую область создания абстракций с использованием алгоритмов, чтобы модели могли стать еще лучше.

Первоначальная цель проекта состояла в том, чтобы создать модель RNN, которая расширяет концепцию контекстного обучения до «эмоциональных настроений». Это можно сделать, используя обучающий набор данных для разных настроений/жанров песен (например, счастливых, оптимистичных, грустных и т. д.). Он также будет учитывать ритмы и ноты песен (например, использование гитарных композиций песни). Это также будет включать изменение базового алгоритма char-rnn для включения векторов звука, другого скрытого вектора h и метода секвенирования. Для работы самой модели потребуются другие функции. Конечным результатом такой модели будет создание песни (слова плюс гитарные мелодии) для заданного контекста. К сожалению, это необходимо было уменьшить по разным причинам, в первую очередь из-за очень длительного времени обучения, необходимого даже для очень небольшого набора данных. Еще одним самым большим препятствием, с которым мы столкнулись, было получение набора данных песен, поскольку они защищены законом об авторском праве. (Использование такого метода также может вызвать интересные нетехнические проблемы, поскольку, если такая песня должна быть опубликована, то кто будет владеть авторскими правами на нее? Могут ли владельцы обучающих наборов данных предъявлять к ней претензии?) Однако мы намерены продолжить эту работу в будущем и завершить первоначальную цель.

Будущая работа

Сам алгоритм остается в основном методом проб и ошибок. Мы пробовали с разным количеством слоев, но большой разницы в выходе не было. Одна из проблем возникла с параметром контекстуальной точности, который измеряет точность созданных текстов на основе «имеет ли это смысл для человеческого масштаба». Предложение какого-либо технического критерия, который будет использоваться для измерения точности таких моделей, может стать очень важной будущей работой в этом отношении.

Сама идея может быть распространена на аудио и видео. В фильмах существует сильная корреляция с действиями на видео (драка, романтика, насилие, комедия) и фоновой музыкой. В конечном итоге станет возможным расширить многомодельное обучение в аудиовизуальной области; предсказать/создать фоновую оценку для коротких видеороликов(даже воссоздать фильм Чарли Чаплина с его фоновой оценкой, созданной с помощью машинного обучения)!!

Инструкции по коду

  • Набор данных Flicker Image. Он не включен в заявку из-за большого размера. Ссылки включены
  • Набор данных песен с текстами песен - не включен в заявку из-за большого размера. Ссылки включены
  • Datacollection_lyrics Используется для извлечения набора данных текстов песен. Код имеет комментарии, и его довольно просто запустить на основе комментариев. Обратите внимание, что запуск этого скрипта может занять некоторое время.
  • Обучить изображение модели подписи. Клонируйте проект Github для NeuralTalk
  • Обучите модель на наборе данных мерцания. Запустите код driver.py, чтобы выполнить обучение multimodel-rnn. Обратите внимание, что обучение займет много времени. Модель не включена из-за размера, но ее можно получить на Github.
  • Запустите код eval_sentence_predictions.py и получите прогнозы в файле «results.json». (Это входит в подачу).
  • Результаты можно просмотреть с помощью html-страницы visualize_result_struct, однако, поскольку мы работали на облачном сервере
  • Чтобы обучить модель char-rnn, клонируйте проект Github.
  • Включить извлеченные данные в папку \data. Обученные модели будут проверены и добавлены в \cv. Мы включили две обученные модели в полный набор данных песен, а также в уточненный набор данных текстов песен. Обратите внимание, что обучение займет много времени.
  • Чтобы получить образцы результатов для полного набора данных текстов песен, выполните приведенную ниже команду. Опция –n 1 ограничивает 1 песню и t настраивает температуру.

python sample.py -m ‘finalcheckpoint_baseline_1.926.p –n 1 –t 0,3’

  • Чтобы получить образцы результатов для уточненного набора данных песен/строф, запустите ниже . Параметр –n 3 ограничивает результаты до 3 строк/строф и t регулирует температуру.

python sample.py -m finalcheckpoint_baseline_1.492.p –n 3 –t 0,3′

Чтобы подготовить вывод, начальное число можно передать с помощью –s

  • Чтобы получить окончательные результаты, используйте сиды json и char-rnn с использованием скрипта «combine_models_neuralquotes.py».

Примечание. Для запуска проекта мы использовали образ Docker. Если теперь ниже можно использовать.

  • Установите python 2.7 на сервер Ubuntu с зависимостями, указанными на странице require.txt. Сюда не входят некоторые скрытые зависимости для различных пакетов, с которыми мы сталкиваемся при запуске проекта. Образ Docker является предпочтительным вариантом.

использованная литература

  1. Оригинальная статья автора об изображении в текст — cs.stanford.edu/people/karpathy/cvpr2015.pdf
  2. Мультимодальный RNN — http://cs.stanford.edu/people/karpathy/deepimagesent/
  3. Набор данных Semi Supervised Images Flicker 8K — https://illinois.edu/fb/sec/1713398
  4. Набор данных о поэзии – https://www.gutenberg.org/wiki/Poetry_(Bookshelf)
  5. http://sballas8.github.io/2015/08/11/Poet-RNN.html
  6. Миллион песен Датасет- http://labrosa.ee.columbia.edu/millionsong/
  7. Lyric Lookup Wiki — http://lyrics.wikia.com/
  8. Проект Github- https://github.com/karpathy/neuraltalk
  9. http://www.jtoy.net/