用 TensorFlow 让你的机器人唱首原创给你听
本篇文章4098字,读完约10分钟
雷锋。本文将使用一个简单的模型在张量流上实现一个音频发生器。原作者杨发表在作者的个人博客上。授权雷(公开号:雷)出版。
我想看看人工智能今天是如何作曲的。
本文将使用张量流来编写一个音乐生成器。
当你对机器人说:我想要一首能表达希望和奇迹的歌时,会发生什么?
计算机将首先把你的声音转换成单词,提取关键词并把它们转换成单词向量。
然后我们将使用一些标记的音乐数据,它们是各种各样的人类情感。然后,通过在这些数据上训练模型,在模型被训练之后,可以产生具有所需关键词的音乐。
程序的最终输出结果是一些和弦,他会选择一些最接近主人需要输出的情感关键词的和弦。
当然,你不仅可以听它,还可以把它作为创作音乐的参考,这样你就可以很容易地创作音乐,即使你没有练习10,000个小时。
机器学习实际上是为了扩展我们的大脑和能力。
Deepmind发表了一篇名为wavenet的论文,介绍了音乐生成和文本转换为语音的艺术。
一般来说,语音生成模型是串联的。这意味着,如果我们想从一些文本样本中生成语音,我们需要一个非常大的语音片段数据库。通过截取其中的一些并重新组合在一起,我们可以形成一个完整的句子。
音乐的生成也是如此,但是它有一个很大的困难:当你组合一些静态的成分时,很难自然地和情绪化地生成声音。
一个理想的方法是,我们可以将生成音乐所需的所有信息保存到模型的参数中。报纸上是这么说的。
我们不需要将输出结果传递给信号处理算法来得到语音信号,而是直接处理语音信号的波形。
他们使用的模型是美国有线电视新闻网。在这个模型的每一个隐藏层中,每一个扩展因子都可以相互关联并呈指数增长。每个步骤中生成的样本将被放回网络,并用于生成下一步。
我们可以看看这个模型的图表。输入数据是单个节点。作为一个粗糙的声波,它需要为以下操作进行预处理。
然后我们对它进行编码,生成一个张量,它有一些样本和通道。
然后把它放到cnn网络的第一层。该层将生成通道数,以便进行更简单的处理。
然后合并所有输出结果并增加其维数。然后将尺寸添加到通道的原始编号中。
将这个结果放入损失函数中,以衡量我们的模型训练得有多好。
最后,这个结果将被再次输入网络,以生成下一个时间点所需的声波数据。
重复这个过程,生成更多的语音。
这个网络非常大,在他们的gpu集群上需要90分钟,而且只能产生一秒钟的音频。
接下来,我们将使用一个更简单的模型在张量流上实现一个音频发生器。
1.介绍包:数据科学包numpy,数据分析包熊猫,tqdm可以生成一个进度条来显示培训进度。
importnumpyasnp
importpandasaspd
importmsgpackeimportglob
importtensorflowastf
from sensorflow . python . opsimportcontrol _ flow _ ops
fromtqdmimporttqdm
importmidi _操纵
我们将使用神经网络模型RBM-限制性玻尔兹曼机作为生成模型。
它是一个两层网络:第一层是可见的,第二层是隐藏的。同一层的节点之间没有连接,不同层的节点相互连接。每个节点必须决定是否需要将接收到的数据发送到下一层,这个决定是随机的。
2.定义超级参数:首先定义模型需要生成的注释范围
low _ note = midi _ operation . lowerbond # lower的索引
最高音符= midi _ operation . upper bond #最高音符的索引
注意范围=最高注意-最低注意#注意范围
然后你需要定义时间步长的大小,可见层和隐藏层。
num _ timesteps = 15 #这是我们一次将创建的时间步长数
n _ visible = 2 * note _ range * num _ time steps #这是可见层的大小。
n _ hidden = 50 #这是隐藏层的大小123123
培训时间、批处理大小和学习率。
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 ")# the placeholder variablethattholdsourdata
w = TF . variable(TF . random _ normal([n _ visible,n_hidden],0.01),name = " w ")# wethightmaxthatstoresedge weights
bh=tf.variable(tf.zeros([1,n_hidden],tf.float32,name = " BH ")# the biasevectorforthehiddenlayer
bv=tf.variable(tf.zeros([1,n_visible],tf.float32,name = " bv ")# the biasevectorforthevevisible layer
然后,使用辅助方法gibbs_sample从输入数据x和隐藏层的样本中创建样本:
Gibbs_sample是一种能够从多个概率分布中提取样本的算法。
它可以生成一个统计模型,其中每个状态依赖于前一个状态,并随机生成符合分布的样本。
# sample of x
x_sample=gibbs_sample(1)
#的完成,从x的可视状态开始
h =样本(tf.sigmoid(tf.matmul(x,w)+bh))
# hiddennodes的示例,从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.接下来,运行图表算法图:5.1首先用会话初始化变量:
#首先,湿雨模型
#模型的变量
init = TF . initialize _ all _ variables()
sess.run(init)
首先,我们需要重塑每首歌曲,以便相应的矢量表示可以更好地用于训练模型。
范围(num _ epochs)):
forsonginsongs:
# songsarestoretimexnotes format . the zeofeachsongsistimesteps _ in _ song x2 * note _ range
#此处是shapethe songsoteachtrainingxampleisavectorwithnum _ timestapsx2 * note _ range elements
歌曲=np.array(歌曲)
歌曲=歌曲[:np.floor(歌曲. shape[0]/num _ time steps)* num _ time steps]
歌曲= NP . resform(歌曲,[歌曲.形状[0]/num_timesteps,歌曲.形状[1]*num_timesteps])
5.2接下来,训练rbm模型,一次一个样本,范围(1,len(歌曲),批量大小):
tr _ x =歌曲[I:I+批量大小]
sess.run(updt,feed_dict={x:tr_x})
模型经过充分训练后,可以用来生成音乐。
5.3有必要训练吉布斯链,其中可见节点被初始化为0,以生成一些样本。
然后将矢量重新整形为更好的格式以便回放。
样本=gibbs_sample(1)。eval(session=sess,feed_dict={x:np.zeros((10,n_visible))})
for line range(sample . shape[0]):
ifnotany(样本[i,]):
继续
#我们在这里创建了vector betimex notes,并保存了vector rasamidifile
s = NP . resform(样本[i,],(num_timesteps,2*note_range))
5.4最后,打印出生成的和弦midi _。格式(一))
总而言之,有线电视新闻网被用来参数化地产生声波。
使用rbm,可以很容易地从训练数据中生成音频样本,
吉布斯算法可以帮助我们得到基于概率分布的训练样本。
本文是基于siraj视频,视频链接和github源代码在这里提供参考。
雷锋文章版权所有。严禁擅自转载。详情请参考转载说明。
标题:用 TensorFlow 让你的机器人唱首原创给你听
地址:http://www.6st8.com/zbxw/4968.html
免责声明:联合早报中文网从世界各个维度报道世界经济新闻,时政新闻,突发新闻等,本篇的部分内容来自于网络,不为其真实性负责,只为传播网络信息为目的,非商业用途,如有异议请及时联系btr2018@163.com,联合早报中文网的小编将予以删除。