原文链接: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~

  

【Magenta 项目初探】手把手教你用Tensorflow神经网络创造音乐的更多相关文章

  1. Kaggle系列1:手把手教你用tensorflow建立卷积神经网络实现猫狗图像分类

    去年研一的时候想做kaggle上的一道题目:猫狗分类,但是苦于对卷积神经网络一直没有很好的认识,现在把这篇文章的内容补上去.(部分代码参考网上的,我改变了卷积神经网络的网络结构,其实主要部分我加了一层 ...

  2. [ionic开源项目教程] - 手把手教你使用移动跨平台开发框架Ionic开发一个新闻阅读APP

    前言 这是一个系列文章,从环境搭建开始讲解,包括网络数据请求,将持续更新到项目完结.实战开发中遇到的各种问题的解决方案,也都将毫无保留的分享给大家. 关注订阅号:TongeBlog ,查看移动端跨平台 ...

  3. 深度学习入门篇--手把手教你用 TensorFlow 训练模型

    欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:付越 导语 Tensorflow在更新1.0版本之后多了很多新功能,其中放出了很多用tf框架写的深度网络结构(https://git ...

  4. 手把手教你做JavaWeb项目:登录模块

    现如今,无论是客户端还是移动端,无论是游戏登陆还是社交平台登陆,无处不在的“登陆”.那么你知道怎么制作吗?今天就为你娓娓道来: 用户登录 在各大信息管理系统中,登录功能是必不可少的,他的作用就是验证用 ...

  5. 手把手教你使用 Spring Boot 3 开发上线一个前后端分离的生产级系统(一) - 介绍

    项目简介 novel 是一套基于时下最新 Java 技术栈 Spring Boot 3 + Vue 3 开发的前后端分离的学习型小说项目,配备详细的项目教程手把手教你从零开始开发上线一个生产级别的 J ...

  6. TensorFlow 神经网络教程

    TensorFlow 是一个用于机器学习应用程序的开源库.它是谷歌大脑的第二代系统,在取代了近源的 DistBelief 之后,被谷歌用于研究和生产应用.TensorFlow 提供了很多种语言接口,包 ...

  7. 史上最全最详细的环境搭建教程,行百里者手把手教你在windows下搭建Anaconda+pycharm+库文件(TensorFlow,numpy)环境搭建

    我是在搭建TensorFlow开发环境的道路上走了很多弯路 掉了很多头发,为了让广大同学们不在受苦受累 下面我将手把手教你学习如特快速搭建python环境 快速导入numpy,PIL,pillow,等 ...

  8. 手把手教你如何搭建iOS项目基本框架

    手把手教你如何搭建iOS项目基本框架 今天我们来谈谈如何搭建框架,框架需要做一些什么. 第一步:找到我们的目标我们的目标是让其他开发人员拿到手后即可写页面,不再需要考虑其他的问题. 第二步:我们需要做 ...

  9. 菜鸟-手把手教你把Acegi应用到实际项目中(8)-扩展UserDetailsService接口

    一个能为DaoAuthenticationProvider提供存取认证库的的类,它必须要实现UserDetailsService接口: public UserDetails loadUserByUse ...

随机推荐

  1. MyEclipse 启动 tomcate 失败 解决方法

    MyEclipse中启动tomcate失败 十月 20, 2015 9:53:04 下午 org.apache.catalina.startup.VersionLoggerListener log信息 ...

  2. USACO1.2Milking Cows

    题目描述 三个农民每天清晨5点起床,然后去牛棚给3头牛挤奶.第一个农民在300秒(从5点开始计时)给他的牛挤奶,一直到1000秒.第二个农民在700秒开始,在 1200秒结束.第三个农民在1500秒开 ...

  3. Linux字符设备驱动解析

    1.驱动即是一个内核模块,需要模块初始化函数 module_init() module_exit() 2.分配cdev struct cdev dev; 3.初始化cdev并定义file_operat ...

  4. [转]ASP.NET MVC3 + EF 性能优化解决方案以及最优架构

    [集思广议]      我们用 asp.net mvc3 + ef 做了一个网站,现在是内测阶段,发现打开速度非常慢.首页打开(无缓存)都在5-6s以上(测试环境:程序和db都在本机),请问各位 mv ...

  5. [No000018]都在背单词,为啥学霸那么厉害-如何在一天内记200个单词?

  6. luogu[2093]零件分组

    题目描述 某工厂生产一批棍状零件,每个零件都有一定的长度(Li)和重量(Wi).现在为了加工需要,要将它们分成若干组,使每一组的零件都能排成一个长度和重量都不下降(若i<j,则Li<=Lj ...

  7. 实现了与maya场交互的能力

    今天把模拟节点与maya场的对接做好了,效果如图: 图中黄色线为每个节点受到的外力,由于加了一个重力场,所以外力都是竖直向下. 节点连线方式如图所示: 交互的具体方法是在每次模拟之前,更新每个节点所受 ...

  8. 在移动端如何选择字体大小和布局的单位,px或dp?

    android开发中,文字大小的单位是sp,非文字的尺寸单位用dp,但是我们在设计稿用的单位是px.这些单位如何换算,是设计师.开发者需要了解的关键. 简单理解的话,px(像素)是我们UI设计师在PS ...

  9. HOJ 2713 Matrix1

    Matrix1 My Tags   (Edit)   Source : Classical Problem   Time limit : 5 sec   Memory limit : 64 M Sub ...

  10. IIS Enabling HTTP Keep-Alives

    IIS 6.0 from:https://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/ea116535-8e ...