本篇文章4247字,读完约11分钟
雷锋。com:杨,本文作者。原文包含在作者的个人博客中。雷锋。com已被授权。
我想看看人工智能今天是如何作曲的。
本文将使用张量流来编写一个音乐生成器。
当你对机器人说:我想要一首能表达希望和奇迹的歌时,会发生什么?
计算机将首先把你的声音转换成单词,提取关键词并把它们转换成单词向量。然后我们将使用一些标记的音乐数据,它们是各种各样的人类情感。然后,通过在这些数据上训练模型,在模型被训练之后,可以产生具有所需关键词的音乐。程序的最终输出结果是一些和弦,他会选择一些最接近主人需要输出的情感关键词的和弦。当然,你不仅可以听它,还可以把它作为创作音乐的参考,这样你就可以很容易地创作音乐,即使你没有练习10,000个小时。
机器学习实际上是为了扩展我们的大脑和能力。
Deepmind发表了一篇名为wavenet的论文,介绍了音乐生成和文本转换为语音的艺术。
一般来说,语音生成模型是串联的。这意味着,如果我们想从一些文本样本中生成语音,我们需要一个非常大的语音片段数据库。通过截取其中的一些并重新组合在一起,我们可以形成一个完整的句子。
音乐的生成也是如此,但是它有一个很大的困难:当你组合一些静态的成分时,很难自然地和情绪化地生成声音。
一个理想的方法是,我们可以将生成音乐所需的所有信息保存到模型的参数中。报纸上是这么说的。
我们不需要将输出结果传递给信号处理算法来得到语音信号,而是直接处理语音信号的波形。
他们使用的模型是美国有线电视新闻网。在这个模型的每一个隐藏层中,每一个扩展因子都可以相互关联并呈指数增长。每个步骤中生成的样本将被放回网络,并用于生成下一步。
我们可以看看这个模型的图表。输入数据是单个节点。作为一个粗糙的声波,它需要为以下操作进行预处理。
然后我们对它进行编码,生成一个张量,它有一些样本和通道。然后把它放到cnn网络的第一层。该层将生成通道数,以便进行更简单的处理。然后合并所有输出结果并增加其维数。然后将尺寸添加到通道的原始编号中。将这个结果放入损失函数中,以衡量我们的模型训练得有多好。最后,这个结果将被再次输入网络,以生成下一个时间点所需的声波数据。重复这个过程,生成更多的语音。这个网络非常大,在他们的gpu集群上需要90分钟,而且只能产生一秒钟的音频。
接下来,我们将使用一个更简单的模型在张量流上实现一个音频发生器。
1.介绍包:数据科学包numpy,数据分析包熊猫,tqdm可以生成一个进度条来显示培训进度。
将numpy作为np导入
进口熊猫作为pd
导入msgpack
导入glob
将张量流作为tf导入
来自tensorflow.python.ops导入控件_flow_ops
从tqdm导入tqdm
导入midi _操纵
我们将使用神经网络模型RBM-限制性玻尔兹曼机作为生成模型。
它是一个两层网络:第一层是可见的,第二层是隐藏的。同一层的节点之间没有连接,不同层的节点相互连接。每个节点必须决定是否需要将接收到的数据发送到下一层,这个决定是随机的。
2.定义超级参数:首先定义模型需要生成的注释范围
最低音符= midi _ manipulation.lowerbound #钢琴卷帘窗上最低音符的索引
最高音符= midi _ manufacturing . upper bound #钢琴卷帘窗上最高音符的索引
音符范围=最高音符-最低音符#音符范围
然后你需要定义时间步长的大小,可见层和隐藏层。
num _ timesteps = 15 #这是我们一次将创建的时间步长数
n _ visible = 2 * note _ range * num _ time steps #这是可见图层的大小。
n _ hidden = 50 #这是隐藏层的大小
培训时间、批处理大小和学习率。
num _ epochs = 200 #我们将要运行的训练时段数。对于每个时期,我们都要浏览整个数据集。
batch _ size = 100 #我们一次将通过rbm发送的培训示例数。
lr = tf .常量(0.005,TF . float 32)#我们模型的学习率
3.定义变量:X是放入网络的数据
w用于存储权重矩阵,或两层之间的关系
另外,需要两种偏置,一种是隐藏层的bh,另一种是可见层的bv
x = tf.placeholder(tf.float32,[none,n_visible],name = " x ")#保存数据的占位符变量
w = TF . variable(TF . random _ normal([n _ visible,n_hidden],0.01),name = " w ")#存储边权重的权重矩阵
bh = tf.variable(tf.zeros([1,n_hidden],tf.float32,name = " BH ")#隐藏层的偏置向量
bv = tf.variable(tf.zeros([1,n_visible],tf.float32,name = " bv ")#可见层的偏置向量
然后,使用辅助方法gibbs_sample从输入数据x和隐藏层的样本中创建样本:
Gibbs_sample是一种能够从多个概率分布中提取样本的算法。
它可以生成一个统计模型,其中每个状态依赖于前一个状态,并随机生成符合分布的样本。
# x的样本
x_sample = gibbs_sample(1)
#隐藏节点的示例,从x的可见状态开始
h =样本(tf.sigmoid(tf.matmul(x,w) + bh))
#隐藏节点的样本,从x_sample的可见状态开始
h _ sample = sample(TF . sigmoid(TF . mat mul(x _ sample,w) + bh))
更新变量:size _ Bt = tf.cast (tf.shape (x) [0],tf.float32)
w_adder = tf.mul(lr/size_bt,tf.sub(tf.matmul(tf .转置(x),h),tf.matmul(tf .转置(x_sample),h_sample)))
bv_adder = tf.mul(lr/size_bt,tf.reduce_sum(tf.sub(x,x_sample),0,true))
bh_adder = tf.mul(lr/size_bt,tf.reduce_sum(tf.sub(h,h_sample),0,true))
#当我们运行sess.run(updt)时,tensorflow将运行所有3个更新步骤
updt = [w.assign_add(w_adder),bv.assign_add(bv_adder),bh.assign_add(bh_adder)]
5.运行图算法图:1。首先初始化变量
tf.session()作为sess:
#首先,我们训练模型
#初始化模型的变量
init = TF . initialize _ all _ variables()
sess.run(init)
首先,我们需要重塑每首歌曲,以便相应的矢量表示可以更好地用于训练模型。
对于tqdm中的纪元(范围(num _ epochs)):
对于歌曲中的歌曲:
#歌曲以时间x音符格式存储。每首歌曲的大小是时间步长\\\\\\\\\\\\\\\\
#在这里,我们重塑歌曲,以便每个训练示例都是一个带有num_timesteps x 2*note_range元素的向量
歌曲= np.array(歌曲)
歌曲=歌曲[:np.floor(歌曲. shape[0]/num _ time steps)* num _ time steps]
歌曲= NP . resform(歌曲,[歌曲.形状[0]/num_timesteps,歌曲.形状[1]*num_timesteps])
2.接下来,训练rbm模型,一次一个样本
对于范围内的I(1,len(歌曲),批量大小):
tr_x =歌曲[I:I+批量大小]
sess.run(updt,feed_dict={x: tr_x})
模型经过充分训练后,可以用来生成音乐。
3.需要训练吉布斯链
可见节点被初始化为0,以生成一些样本。
然后将矢量重新整形为更好的格式以便回放。
样本= gibbs_sample(1)。eval(session=sess,feed_dict={x: np.zeros((10,n_visible))})
对于范围内的I(示例. shape[0]):
如果没有(样本[I],):
继续
#在这里,我们将矢量重塑为时间x音符,然后将矢量保存为midi文件
s = NP . resform(样本[i,],(num_timesteps,2*note_range))
4.最后,打印出生成的和弦
midi _ operation . notestatematrixtomidi,“generated_chord_{}”。格式(i))1212
总而言之,有线电视新闻网被用来参数化地产生声波。
使用rbm,可以很容易地从训练数据中生成音频样本,
吉布斯算法可以帮助我们得到基于概率分布的训练样本。
最后,发送siraj的原始视频和源代码链接:
视频:YouTube/观看?v = ze7qwxx05t0 & t = 278s
源代码:github/llsourcell/music _ generator _ demo/blob/master/RBM _ chonds . py
张量流&神经网络算法高级应用类即将开始!从初级到高级,理论+实战,一站式深入了解张量流!
本课程面向深入学习的开发人员,教授如何使用张量流解决特定问题,如图像识别和文本分析。为期10周的课程将从张量流的原理和基本实践技能开始,逐步教会学生如何在张量流上构建cnn、自编码、rnn、gan等模型,最终掌握一套基于张量流的深度学习和发展的专业技能。
作为思想工作的高级技术专家,童达和白华川两位教师在构建大数据平台和开发深度学习系统方面有着丰富的经验。
时间:每周二和周四晚上20: 00到21: 00
课程时长:共20小时,10周完成,每周2次,每次1小时
在线教学地址:mooc.ai/
雷锋。(公开号码:雷锋。com)相关文章:
播放图像分类和图像分割?挑战基于张量流的图像标注生成!
教你从零开始在张量流上构建rnn(完整代码)!
雷锋文章版权所有。严禁擅自转载。详情请参考转载说明。
来源:搜狐微门户
标题:如何用 TensorFlow 教机器人作曲?秘诀原来是这样
地址:http://www.shwmhw.com/shxw/62922.html