Небольшой словарь для нейронных сетей в порядке? - PullRequest
0 голосов
/ 07 февраля 2019

Я занимаюсь разработкой нейронной сети для создания музыки.Нейронная сеть будет двухслойной LSTM (долговременная кратковременная память).Я надеюсь закодировать музыку во многоформатный формат для обучения, то есть это будет 1, если эта нота играла, и 0, если эта нота не играла.Вот выдержка из того, как эти данные будут выглядеть:

0000000000000000000000000000000000000000000000000001000100100001000000000000000000000000
0000000000000000000000000000000000000000000000000001000100100001000000000000000000000000
0000000000000000000000000000000000000000000000000001000100100001000000000000000000000000
0000000000000000000000000000000000000000000000000001000100100001000000000000000000000000
0000000000000000000000000000000000000000000000000001000100100001000000000000000000000000
0000000000000000000000000000000000000000000000000011010100100001010000000000000000000000

Есть 88 столбцов, которые представляют 88 нот, и теперь каждый представляет новый удар.Вывод будет на уровне персонажа.

Мне просто интересно, так как в словаре только 2 символа, будет ли вероятность того, что 0 будет следующим всегда будет выше, чем вероятность1 быть следующим?Я знаю, что для большого словарного запаса нужен большой тренировочный набор, но у меня есть только маленький словарный запас.У меня есть 229 файлов, что соответствует примерно 50000 строк текста.Достаточно ли этого, чтобы вывод был равным 0?

Кроме того, было бы лучше иметь 88 узлов, по 1 для каждой ноты, или только один узел для одного символа за раз?

Заранее спасибо

1 Ответ

0 голосов
/ 08 февраля 2019

Небольшой словарь - это хорошо, если ваш набор данных не смещен в подавляющем большинстве к одному из «слов».

Что касается «было бы лучше иметь 88 узлов, по 1 на каждую ноту или только одинузел для одного символа за раз? ", каждый временной шаг представлен как 88 символов.Каждый персонаж является особенностью этого временного шага.Ваш LSTM должен выводить следующий временной шаг, поэтому у вас должно быть 88 узлов.Каждый узел должен выводить вероятность присутствия этого узла на этом временном шаге.

Наконец, поскольку вы создаете Char-RNN, я настоятельно рекомендую использовать abc notation для представления ваших данных.Песня в нотации ABC выглядит следующим образом:

X:1
T:Speed the Plough
M:4/4
C:Trad.
K:G
|:GABc dedB|dedB dedB|c2ec B2dB|c2A2 A2BA|
  GABc dedB|dedB dedB|c2ec B2dB|A2F2 G4:|
|:g2gf gdBd|g2f2 e2d2|c2ec B2dB|c2A2 A2df|
  g2gf g2Bd|g2f2 e2d2|c2ec B2dB|A2F2 G4:|

Это идеально подходит для Char-RNN, потому что она представляет каждую песню в виде набора символов, и вы можете запускать преобразования из MIDI в ABC и наоборот.Все, что вам нужно сделать, это научить вашу модель предсказывать следующий символ в этой последовательности вместо того, чтобы иметь дело с 88 выходными узлами.

...