zoukankan      html  css  js  c++  java
  • 【Magenta 项目初探】手把手教你用Tensorflow神经网络创造音乐

    原文链接:http://www.cnblogs.com/learn-to-rock/p/5677458.html

    偶然在网上看到了一个让我很感兴趣的项目 Magenta,用Tensorflow让神经网络自动创造音乐。

    白话就是:可以用一些音乐的风格来制作模型,然后用训练出的模型对新的音乐进行加工从而创造出新的音乐。
    花了半天时间捣鼓终于有了成果,挺开心的,同时也把这半天的经验拿来分享,能让大家节约一些时间也算是我对社会做出的一点贡献吧。
    再次感受 Google 的黑科技
    希望大家能喜欢我的Chinglish
     

    --第一步,安装,工具准备!--

    操作系统:请放弃 windows 吧,选择linux 或者 Unix
     
    想在windows上直接运行现在真的是毫无办法,刚开始想尝试新技术,应用容器——docker,不过没有windows 专业版的 hyperV,无法成功安装docker。
     
    在linux上安装
    1. 基本编程环境
      python 2.7 / 3.* 都可以使用 TensorFlow 的 API
      Java 环境:JDK
      可以用 apt-get 安装
      顺便把java添加到环境中吧,linux 中修改 bashrc. 路径PATH="$PATH:$HOME/bin"
      这部分我就不赘述,反正你要这都不会百度基本上就告别编程了。
     
    2. Project Magenta
     
    3. TensorFlow 的安装
        本团员是这样做的:
        $ sudo apt-get install python-pip python-dev
        $ sudo pip install --upgrade  https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.9.0-cp27-none-linux_x86_64.whl
     
      你可能会在这个过程遇到版本依赖问题,可以尝试参考下面做法:
         sudo aptitude install python-dev
     
    4. 安装bazel
          选择合适版本
     
        面对新鲜事物,请听亲生父母的,请一定看官方文档:http://www.bazel.io/docs/install.html
       
      注:linux download 的时候可以使用 wget

     

    --第二步:开始创作!--

    命令可以保存为 bash 格式方便以后使用,我是分四个步骤,编了4个批处理文件,
    请一定注意修改路径
    // 中途需要从github下载一些东西,不造是什么,所以请保持网络畅通
     

    1. 第一个bash:创建旋律数据库

    #!/bin/bash
    ##创建旋律数据库
    MIDI_DIRECTORY=/home/liukun/TensorFlow/magenta/music/train #这里换成你的文件路径就行了
    SEQUENCES_TFRECORD=/home/liukun/TensorFlow/magenta/music/train/notesequences.tfrecord
     
    bazel run //magenta/scripts:convert_midi_dir_to_note_sequences --
    --midi_dir=$MIDI_DIRECTORY
    --output_file=$SEQUENCES_TFRECORD
    --recursive
     

    2. 第二个bash:提取出训练样本

    # TFRecord file containing NoteSequence protocol buffers from convert_midi_dir_to_note_sequences.py.
    SEQUENCES_TFRECORD=/home/liukun/TensorFlow/magenta/music/train/notesequences.tfrecord
     
    # TFRecord file that TensorFlow's SequenceExample protos will be written to. This is the training dataset.
    TRAIN_DATA=/home/liukun/TensorFlow/magenta/music/train/training_melodies.tfrecord
     
    # Optional evaluation dataset. Also, a TFRecord file containing SequenceExample protos.
    EVAL_DATA=/home/liukun/TensorFlow/magenta/music/eval_melodies.tfrecord
     
    # Fraction of input data that will be written to the eval dataset (if eval_output flag is set).
    EVAL_RATIO=0.10
     
    bazel run //magenta/models/basic_rnn:basic_rnn_create_dataset --
    --input=$SEQUENCES_TFRECORD
    --train_output=$TRAIN_DATA
    --eval_output=$EVAL_DATA
    --eval_ratio=$EVAL_RATIO
     
    遇到的问题:本地github保存的账号可能会因为与远程github账号不同而出现错误,我root账户绑定了github用户,哪曾想到今天.....所以不用sudo了
     

    3. 第三个bash : 训练神经网络模型, 最耗费时间!!!

    #首先compile basic_rnn工具
    bazel build //magenta/models/basic_rnn:basic_rnn_train
     
    TRAIN_DATA=/home/liukun/TensorFlow/magenta/music/train/training_melodies.tfrecord
    #训练模型,其中“rnn_layer_size”是神经网络的层数,可以自定义
    /home/liukun/TensorFlow/magenta/bazel-bin/magenta/models/basic_rnn/basic_rnn_train --experiment_run_dir=/home/liukun/TensorFlow/magenta/music --sequence_example_file=$TRAIN_DATA --eval=false --hparams='{"rnn_layer_sizes":[30]}' --num_training_steps=2000
     
    我为了节省时间,只训练了2000遍,所以......
     

    4. 第四个bash:生成新的的旋律!

    ##生成旋律
    #指定测试旋律的文件地址
    PRIMER_PATH=/home/liukun/TensorFlow/magenta/music/origional/Canon.mid
    #注意这里是绝对地址,只能指定一首歌
    # num_outputs 指定生成曲目数量
    bazel run //magenta/models/basic_rnn:basic_rnn_generate --
    --experiment_run_dir=/home/liukun/TensorFlow/magenta/magenta/models
    --hparams='{"rnn_layer_sizes":[30]}'
    --primer_midi=$PRIMER_PATH
    --output_dir=/home/liukun/TensorFlow/magenta/music/generate
    --num_steps=64
    --num_outputs=3
     
      等待显得那么漫长。
      程序执行结束,我按耐不住一颗好奇之心,满怀期待地打开刚刚诞生于这个世界的新艺术,泪目,这融合了21世纪最前沿技术的新作
     旋律奏响,真TM......不好听。
     
     
     
     
    老司机留话:
      主要需要修改的就是文件的路径了。
      我的思路使用一些风格突出的歌曲作为训练集,然后对简单的旋律进行加工,这样应该更能体现效果。
     
      提醒:文件路径要使用绝对路径,虽然不知道问什么,但不这样就会出错,提示权限问题。
     
     
    关于这个项目的Google讨论小组:
    https://groups.google.com/a/tensorflow.org/forum/#!forum/magenta-discuss
     
     
    最后祝大家假期愉快!
    5555半天没刷题了~~~~
     
     
     
    转载请注意排版,别搞得难看的一比!!!
     
     
    项目文件目录树供参考:
    .
    ├── bazel installer
    │   ├── bazel
    │   └── bazel-0.3.0-installer-linux-x86_64.sh
    ├── magenta
    │   ├── 1.sh
    │   ├── 1.sh~
    │   ├── 2.sh
    │   ├── 2.sh~
    │   ├── 3.sh
    │   ├── 3.sh~
    │   ├── 4.sh
    │   ├── 4.sh~
    │   ├── bazel-bin -> /home/liukun/.cache/bazel/_bazel_liukun/ebbbbefb206fd0a3aa08c53b60fb3fee/execroot/magenta/bazel-out/local-opt/bin
    │   ├── bazel-genfiles -> /home/liukun/.cache/bazel/_bazel_liukun/ebbbbefb206fd0a3aa08c53b60fb3fee/execroot/magenta/bazel-out/local-opt/genfiles
    │   ├── bazel-magenta -> /home/liukun/.cache/bazel/_bazel_liukun/ebbbbefb206fd0a3aa08c53b60fb3fee/execroot/magenta
    │   ├── bazel-out -> /home/liukun/.cache/bazel/_bazel_liukun/ebbbbefb206fd0a3aa08c53b60fb3fee/execroot/magenta/bazel-out
    │   ├── bazel-testlogs -> /home/liukun/.cache/bazel/_bazel_liukun/ebbbbefb206fd0a3aa08c53b60fb3fee/execroot/magenta/bazel-out/local-opt/testlogs
    │   ├── __init__.py
    │   ├── LICENSE
    │   ├── magenta
    │   │   ├── 1.sh
    │   │   ├── 2.sh~
    │   │   ├── BUILD
    │   │   ├── __init__.py
    │   │   ├── __init__.pyc
    │   │   ├── lib
    │   │   │   ├── BUILD
    │   │   │   ├── __init__.py
    │   │   │   ├── __init__.pyc
    │   │   │   ├── melodies_lib.py
    │   │   │   ├── melodies_lib_test.py
    │   │   │   ├── midi_io.py
    │   │   │   ├── midi_io.pyc
    │   │   │   ├── midi_io_test.py
    │   │   │   ├── note_sequence_io.py
    │   │   │   ├── note_sequence_io_test.py
    │   │   │   ├── sequence_example_lib.py
    │   │   │   ├── sequence_to_melodies.py
    │   │   │   ├── sequence_to_melodies_test.py
    │   │   │   └── tf_lib.py
    │   │   ├── models
    │   │   │   ├── attention_rnn
    │   │   │   │   ├── attention_rnn_create_dataset.py
    │   │   │   │   ├── attention_rnn_encoder_decoder.py
    │   │   │   │   ├── attention_rnn_generate.py
    │   │   │   │   ├── attention_rnn_graph.py
    │   │   │   │   ├── attention_rnn_train.py
    │   │   │   │   ├── BUILD
    │   │   │   │   └── README.md
    │   │   │   ├── basic_rnn
    │   │   │   │   ├── basic_rnn_create_dataset.py
    │   │   │   │   ├── basic_rnn_encoder_decoder.py
    │   │   │   │   ├── basic_rnn_encoder_decoder.pyc
    │   │   │   │   ├── basic_rnn_generate.py
    │   │   │   │   ├── basic_rnn_graph.py
    │   │   │   │   ├── basic_rnn_graph.pyc
    │   │   │   │   ├── basic_rnn_train.py
    │   │   │   │   ├── BUILD
    │   │   │   │   ├── README.md
    │   │   │   │   └── run_basic_rnn_train.sh
    │   │   │   ├── lookback_rnn
    │   │   │   │   ├── BUILD
    │   │   │   │   ├── lookback_rnn_create_dataset.py
    │   │   │   │   ├── lookback_rnn_encoder_decoder.py
    │   │   │   │   ├── lookback_rnn_generate.py
    │   │   │   │   ├── lookback_rnn_graph.py
    │   │   │   │   ├── lookback_rnn_train.py
    │   │   │   │   └── README.md
    │   │   │   └── shared
    │   │   │       ├── BUILD
    │   │   │       ├── melody_rnn_create_dataset.py
    │   │   │       ├── melody_rnn_generate.py
    │   │   │       ├── melody_rnn_train.py
    │   │   │       ├── primer.mid
    │   │   │       └── README.md
    │   │   ├── protobuf
    │   │   │   ├── BUILD
    │   │   │   └── music.proto
    │   │   ├── reviews
    │   │   │   ├── assets
    │   │   │   │   ├── attention_interpolation.png
    │   │   │   │   ├── attention_parameterization.png
    │   │   │   │   ├── color-preserving-ny.jpg
    │   │   │   │   ├── diagram.png
    │   │   │   │   ├── generation.gif
    │   │   │   │   ├── mnist_generation.png
    │   │   │   │   ├── pixelrnn_figure6.png
    │   │   │   │   ├── pixelrnn_full_context.png
    │   │   │   │   ├── pixelrnn_masks_A.png
    │   │   │   │   ├── pixelrnn_masks_B.png
    │   │   │   │   ├── pixelrnn_masks_highlevel.png
    │   │   │   │   ├── svhn_generation.png
    │   │   │   │   └── tubingen-starry-night.jpg
    │   │   │   ├── draw.md
    │   │   │   ├── pixelrnn.md
    │   │   │   ├── README.md
    │   │   │   ├── styletransfer.md
    │   │   │   └── summary_generation_sequences.md
    │   │   ├── Rossini_barbe(2).mid
    │   │   ├── Rossini_barbe(3).mid
    │   │   ├── Rossini_barbe.mid
    │   │   ├── scripts
    │   │   │   ├── BUILD
    │   │   │   ├── convert_midi_dir_to_note_sequences.py
    │   │   │   └── convert_midi_dir_to_note_sequences_test.py
    │   │   └── testdata
    │   │       ├── BUILD
    │   │       ├── example_complex.mid
    │   │       ├── example.mid
    │   │       └── notesequences.tfrecord
    │   ├── music
    │   │   ├── eval_melodies.tfrecord
    │   │   ├── generate
    │   │   │   ├── 2016-07-16_224233_1.mid
    │   │   │   ├── 2016-07-16_224233_2.mid
    │   │   │   └── 2016-07-16_224233_3.mid
    │   │   ├── origional
    │   │   │   └── Canon.mid
    │   │   └── train
    │   │       ├── basket.mid
    │   │       ├── detective.mid
    │   │       ├── notesequences.tfrecord
    │   │       └── training_melodies.tfrecord
    │   ├── pretty_midi.BUILD
    │   ├── python_midi.BUILD
    │   ├── README.md
    │   ├── six.BUILD
    │   ├── tools
    │   │   └── bazel.rc
    │   ├── util
    │   │   └── python
    │   │       └── BUILD
    │   ├── WORKSPACE
    │   └── WORKSPACE~
    

      

  • 相关阅读:
    《iBoard 是什么》之简介
    [iBoard 电子学堂][第八卷 设计任意波发生器]第一篇 iBoard 任意波发生器简介
    [iBoard 电子学堂][第〇卷 电子基础]第二篇 电路图与印刷电路板
    职业规划提示
    督查督办工作基本程序
    今天收拾了个电脑抽屉,发现原来我是个有钱人
    VB之SendKeys键盘模拟
    天骄辅助外挂制作,寻求合作
    用CE找武林外传一级基址的方法
    asp实现数据记录的备份及恢复抛砖引玉
  • 原文地址:https://www.cnblogs.com/learn-to-rock/p/5677458.html
Copyright © 2011-2022 走看看