HTML5技术

用Tensorflow让神经网络自动创造音乐 - Charlotte77

字号+ 作者:H5之家 来源:博客园 2016-07-14 16:00 我要评论( )

前几天看到一个有意思的分享,大意是讲如何用Tensorflow教神经网络自动创造音乐。听起来好好玩有木有!作为一个Coldplay死忠粉,第一想法就是自动生成一个类似Coldplay曲风的音乐,于是,开始跟着Github上的教程(项目的名称:Project Magenta)一步一步做,

  前几天看到一个有意思的分享,大意是讲如何用Tensorflow教神经网络自动创造音乐。听起来好好玩有木有!作为一个Coldplay死忠粉,第一想法就是自动生成一个类似Coldplay曲风的音乐,于是,开始跟着Github上的教程(项目的名称:Project Magenta)一步一步做,弄了三天,最后的生成的音乐在这里(如果有人能告诉我怎么在博客里插入音乐请赶快联系我!谢谢!)

  • 第一首:Magenta Melody Result1.mp3
  •    ?shareid=1799925478&uk=840708891

  • 第二首:Magenta Melody Result2.mp3
  •   ?shareid=3718079494&uk=840708891

      这两段音乐是我生成的十几个音乐中听起来还不错的,虽然还是有点怪,但是至少有节奏,嘿嘿。下面来说一下是怎么做的:

     

       1.首先下载Project Magenta

       1 git clone https://github.com/tensorflow/magenta.git 

     

      2.安装需要的工具:

      在这里(https://www.tensorflow.org/versions/r0.9/get_started/os_setup.html)安装python、bazel和Tensorflow

      注:我在安装bazel的时候一直出现“Segmentation fault:11”的错误,google了很多解决方法后发现是gcc的安装版本问题,如果你是mac用户,下载了xcode,并不代表你安装了gcc,还必须安装command line tools,如果安装成功,在linux里输入“gcc --version”会出现相应的版本信息,如果没有,就说明安装失败。如果安装失败了,用下载好的bazel再输入“bazel install gcc”,下载完检测一下gcc -v,如果依然是"Segmentation fault:11"错误,恭喜你,遇到和我一样的错误了,google了半天后发现发现了这个:

      so,Apple现在已经不用gcc了,改为LLVM。以后要用"clang、clang++"来代替gcc。如果你输入gcc -v,显示"Segmentation fault:11",不妨输入一下"clang -v",看一下有没有对应的版本信息。如果有就代表你下载成功了。但是没有完,还有最后一步,把指向gcc的链接改到clang。输入"which gcc"和"which clang",可以看到你的gcc和clang的位置,然后改一下软链接:

    1 cd /usr/local/bin 2 sudo mv gcc gcc_OLD 3 sudo ln -s /usr/bin/clang /usr/local/bin/gcc 4 gcc -v 5 Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn) 6 Target: x86_64-apple-darwin14.5.0 7 Thread model: posix

      这样就大功告成了!哈哈!不要问我为什么花这么大篇幅写这个看似无关紧要的东西,因为我被这玩意儿折磨了两天!!弄完这个才花了三天结果搞个这个居然就花了两天!!哦,对了,如果你看到这儿不知道bazel是干啥的,简单的说就是一个编译工具,相当于pip的intsall。

      现在用bazel来测试一下能不能顺利运行:

       1 bazel test //magenta:all 

      

      注:如果全部测试成功,很好。如果出现这个错误:

    1 INFO: Found 5 targets and 6 test targets... 2 INFO: Elapsed time: 0.427s, Critical Path: 0.00s 3 //magenta:basic_one_hot_encoder_test (cached) PASSED in 3.7s 4 //magenta:convert_midi_dir_to_note_sequences_test (cached) PASSED in 2.3s 5 //magenta:melodies_lib_test (cached) PASSED in 3.5s 6 //magenta:midi_io_test (cached) PASSED in 5.5s 7 //magenta:note_sequence_io_test (cached) PASSED in 3.5s 8 //magenta:sequence_to_melodies_test (cached) PASSED in 40.2s 9 10 Executed 0 out of 6 tests: 6 tests pass.
    11 There were tests whose specified size is too big. Use the --test_verbose_timeout_warnings command line option to see which ones these are.

      

      恭喜你,又犯了和我同样的错误:)这个错误是说测试文件太大了,不能一下子全部测试(我16g的内存还不够吗 = =),所以你可以跟我一样手动测试,以其中一个举例:

    1 >>>bazel-bin/magenta/basic_one_hot_encoder_test 2 >>>---------------------------------------------------------------------- 3 Ran 5 tests in 0.074s 4 5 OK

      把上述六个文件依次测试一下,成功请看下一步。

      

      3.创建你的旋律数据集

      和机器学习一样,我们得先输入一定的数据让它去训练,这里的训练数据可以自己下载喜欢的音乐,不过Magenta不能直接读取mp3文件,只能读取MIDI文件(mp3太大了,一个10M左右的mp3格式音乐可以转换成100k左右的midi文件)。当然,转换成midi格式的方法很多,我搜集了一个超好用的网址可以在线转:Convert Tool

      读取MIDI文件后,Magenta要把MIDI文件转化成Sequence文件才能进行训练

    ##创建旋律数据库 MIDI_DIRECTORY=/Users/shelter/magenta/magenta/music/train #这里换成你的文件路径就行了 SEQUENCES_TFRECORD=/tmp/notesequences.tfrecord bazel run //magenta:convert_midi_dir_to_note_sequences -- \ --midi_dir=$MIDI_DIRECTORY \ --output_file=$SEQUENCES_TFRECORD \ --recursive

      

      然后再从这些Sequence序列里提取出旋律:

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • 关于后台系统自动生成的一点思考 - 西安王磊

      关于后台系统自动生成的一点思考 - 西安王磊

      2017-03-13 08:02

    • 构建自动化前端样式回归测试——BackstopJS篇 - laden666666

      构建自动化前端样式回归测试——BackstopJS篇 - laden666666

      2017-02-13 16:03

    • 前端工程自动化构建总结 - bjtqti

      前端工程自动化构建总结 - bjtqti

      2017-01-10 15:00

    • 手机端H5点击类目自动定位到相应内容 - wangwht

      手机端H5点击类目自动定位到相应内容 - wangwht

      2017-01-10 14:00

    网友点评