SEQUENCES_TFRECORD=/tmp/notesequences.tfrecord EVAL_DATA=/tmp/evaluation_melodies.tfrecord 5 EVAL_RATIO=0.10 ENCODER=basic_one_hot_encoder 6 bazel run //magenta/models:basic_rnn_create_dataset -- \ 7 --input=$SEQUENCES_TFRECORD \ 8 --train_output=$TRAIN_DATA \ 9 --eval_output=$EVAL_DATA \ 10 --eval_ratio=$EVAL_RATIO \ 11 --encoder=$ENCODER
ok,这里我们的数据处理就完成了,生成的训练文件在"/tmp/training_melodies.tfrecord"里
4.训练神经网络模型
训练数据生成后就可以训练模型了,这里使用的是RNN模型:
bazel build //magenta/models:basic_rnn_train ./bazel-bin/magenta/models/basic_rnn_train --experiment_run_dir=/tmp/basic_rnn/run1 --sequence_example_file=$TRAIN_DATA --eval=false --hparams=--num_training_steps=1000
5.生成测试的旋律
模型那一步非常非常耗时间,Github里设置的是20000次迭代,差点把我的电脑跑烧起来 = =,你可以根据实际硬件情况设置迭代次数。测试旋律和训练的旋律一样,都是midi文件,我这里选取的是Katy Perry的Peacock(小黄歌 = =,想看一下用Coldplay的训练数据在katy Perry上测试的结果是啥)
PRIMER_PATH=/Users/shelter/magenta/magenta/music/coldplay/KatyPerryPeacock.mid #注意这里是绝对地址,只能指定一首歌 4 bazel run //magenta/models:basic_rnn_generate -- \ 5 --experiment_run_dir=/tmp/basic_rnn/run1 \ \ 7 --primer_midi=$PRIMER_PATH \ 8 --output_dir=/tmp/basic_rnn_3 \ 9 --num_steps=64 \ 10 --num_outputs=16
你可以用 "bazel test //magenta:all"查看结果,在 :6006 里查看可视化结果,包含收敛过程,accuracy等。
最后生成的旋律就是开头百度云里的文件了。还有另外一个是用轻音乐测试的,效果也不错。
总结:
1.一开始我的训练次数是20000次,到1000次的时候算法发散了,loss值由本来从20几万下降到2000多左右然后突然上升到16000左右,accuracy也下降了,所以就退出了,把迭代次数换成1000次训练。训练结束的时候算法还没有收敛,但是我想快点看到结果,而且电脑跑的太慢了,就直接拿来用了。如果你有GPU或者愿意等个几天跑程序,可以把迭代次数设置的大一点,等算法收敛后再进行测试。模型训练的好坏直接决定最后得到的音乐的好听程度,所以最好等算法收敛后在进行测试。我测试的世界各文件中很多都像乱弹的。
2.这个项目刚开始不久,有一个论坛专门给大家交流学习的心得以及提问题,点。上面的注释是我遇到的问题,如果遇到了新的问题,可以在论坛上发帖求助。我看到有的人生成的音乐很有那种诡异的哥特风哈哈。
3.这个项目背后的具体原理我没有写,Github上写的很清楚,可以参考这里
4.生成后的音乐可以根据自己的需要加上节拍,应该会好听一点~
总之,现在开始做吧,很有趣的!~