- Machine Learning (TensorFlow) + Art
- Official HP
- GitHub
- Douglas Eckさんが発起人
- Douglas Eckさんのインタビュー @ Talking Machines
- 2016/06/01に始まったばかりのプロジェクト
- 現時点では単旋律のメロディーのみサポート
- 現在サポートされているモデルは3つ
- Basic RNN
- Lookback RNN
- Attention RNN
- 有音:note-on event for each pitch (0-127)
- 消音:note-off event (-1)
- イベントなし:no event (-2)
- 基本となるモデル
- 入力
- 直前のイベント(ワンホットベクトル)
- 出力
- 現在のイベント(ワンホットベクトル)
The Unreasonable Effectiveness of Recurrent Neural Networks
- MIDIファイルを
NoteSequence
protoに変換 - 学習用・検証用のデータを作成
- モデルの学習と検証
- モデルから音楽生成
.
├── midi
│ └── beatles
│ └── The_Beatles_-_Let_It_Be.mid
└── script
├── build_dataset.sh
├── generate_melodies.sh
├── midi.sh
├── run_beatles.sh
└── train_rnn.sh
build_dataset.sh
bazel build magenta/scripts:
convert_midi_dir_to_note_sequences
./bazel-bin/magenta/scripts/
convert_midi_dir_to_note_sequences
--midi_dir=$MIDI_DIR
--output_file=$SEQUENCES_TFRECORD
--recursive
MIDI files -> NoteSequence
protos
.
├── midi
│ └── beatles
│ └── The_Beatles_-_Let_It_Be.mid
└── script
├── build_dataset.sh
├── generate_melodies.sh
├── midi.sh
├── run_beatles.sh
├── tmp
│ └── notesequences.tfrecord
└── train_rnn.sh
train_rnn.sh
bazel run //magenta/models/$RNN_TYPE:
${RNN_TYPE}_create_dataset -- \
--input=$SEQUENCES_TFRECORD \
--output_dir=$DATASET_DIR \
--eval_ratio=$EVAL_RATIO
train_rnn.sh
./bazel-bin/magenta/models/$RNN_TYPE/${RNN_TYPE}_train
--run_dir=$RUN_DIR
--sequence_example_file=$TRAIN_DATA
--hparams=$HPARAMS
--num_training_steps=$NUM_TRAINING_STEPS
--eval=false &
./bazel-bin/magenta/models/$RNN_TYPE/${RNN_TYPE}_train
--run_dir=$RUN_DIR
--sequence_example_file=$EVAL_DATA
--hparams=$HPARAMS
--num_training_steps=$NUM_TRAINING_STEPS
--eval=true &
tensorboard --logdir=$LOG_DIR --port=$TB_PORT &
└── script
├── ...
├── tmp
│ ├── basic_rnn
│ │ ├── logdir
│ │ │ └── 160916-1
│ │ │ ├── eval
│ │ │ │ └── events.out.tfevents.1474006070.56ef28e42bab
│ │ │ └── train
│ │ │ ├── checkpoint
│ │ │ ├── events.out.tfevents.1474006072.56ef28e42bab
│ │ │ ├── graph.pbtxt
│ │ │ ├── model.ckpt-0
│ │ │ ├── model.ckpt-0.meta
│ │ │ ├── model.ckpt-5
│ │ │ └── model.ckpt-5.meta
│ │ └── sequence_examples
│ │ ├── eval_melodies.tfrecord
│ │ └── training_melodies.tfrecord
│ └── notesequences.tfrecord
└── train_rnn.sh
bazel run //magenta/models/${RNN_TYPE}:
${RNN_TYPE}_generate -- \
--run_dir=$RUN_DIR \
--hparams=$HPARAMS \
--output_dir=$OUTPUT_DIR \
--num_outputs=5 \
--num_steps=512
#--primer_midi=${PRIMER_PATH}
#--primer_melody="[60]"
./generate_melodies.sh -r basic_rnn -n 160916-1
.
├── ...
├── tmp
│ ├── basic_rnn
│ │ ├── generated
│ │ │ └── 160916-1
│ │ │ ├── 2016-09-16_070537_1.mid
│ │ │ ├── 2016-09-16_070537_2.mid
│ │ │ ├── 2016-09-16_070537_3.mid
│ │ │ ├── 2016-09-16_070537_4.mid
│ │ │ └── 2016-09-16_070537_5.mid
│ │ ├── logdir
│ │ │ ├── 160916-1
│ │ │ │ ├── eval
│ │ │ │ │ └── events.out.tfevents.1474006070.56ef28e42bab
│ │ │ │ └── train
│ │ │ │ ├── checkpoint
│ │ │ │ ├── events.out.tfevents.1474006072.56ef28e42bab
- 1小節、2小節前のイベント
- 直前が1小節、2小節前のイベントの繰り返しかどうか
- 小節の中の位置情報
Step 1: [0,0,0,0,1]
Step 2: [0,0,0,1,0]
Step 3: [0,0,0,1,1]
Step 4: [0,0,1,0,0]
- 2小節前の繰り返し(repeat-2-bars-ago)
- 1小節前の繰り返し(repeat-1-bar-ago) RNNのセルを使わず情報を保持。名前の由来。
- 最近のDeep Learning (NLP) 界隈におけるAttention事情
- Generating Long-Term Structure in Songs and Stories
- Attention and Augmented Recurrent Neural Networks
英語 | 日本語 |
---|---|
Note | 音符 |
Bar | 小節 |
Pitch | 音の高さ |