使用张量流概率的路缘石MDN层。

keras-mdn-layer的Python项目详细描述


路缘石混合密度网络层

Build StatusMIT LicenseDOIPyPI version

基于tensorflow分布模型的路缘石混合密度网络(mdn)层。这使得用神经网络来预测多个实值变量的实验变得更加简单,这些变量可以具有多个同样可能的值。

这一层可以帮助构建类似于RoboJamSketch-RNNhandwriting generation,甚至world models中使用的MDN RNN。您可以用MDN做很多很酷的事情!

此实现的一个好处是可以预测任意数量的实际值。tensorflow的MixtureCategoricalMultivariateNormalDiag分布函数用于生成损失函数(多元正态分布与对角协方差矩阵的混合的概率密度函数)。在以前的工作中,损失函数通常是手工指定的,这对于1d或2d预测来说是很好的,但是之后会变得更加烦人。

为训练和预测提供了两个重要功能:

  • get_mixture_loss_func(output_dim, num_mixtures):此函数生成具有正确输出维数和混合数的损失函数。
  • sample_from_output(params, output_dim, num_mixtures, temp=1.0):这个函数从模型输出的混合分布中抽取样本。

安装

此项目需要Python3.6+。您可以通过pip轻松地从PyPI安装此软件包,如下所示:

python3 -m pip install keras-mdn-layer

最后,在python中导入mdn模块:import mdn

或者,您可以克隆或下载此存储库,然后通过python setup.py install安装,或者将mdn文件夹复制到您自己的项目中。

示例

笔记本目录中提供了一些示例。

有适合多值函数的脚本,一个标准的mdn toy问题:

Keras MDN Demo

还有一个脚本用于生成假汉字:

kanji test 1

最后,为了学习如何生成带有时间成分的音乐触摸屏表演:

Robojam Model Examples

如何使用

mdn层应该是网络中的最后一层,您应该使用get_mixture_loss_func来生成丢失函数。下面是一个简单网络的例子,它有一个密集层,后面跟着mdn。

import keras
import mdn

N_HIDDEN = 15  # number of hidden units in the Dense layer
N_MIXES = 10  # number of mixture components
OUTPUT_DIMS = 2  # number of real-values predicted by each mixture component

model = keras.Sequential()
model.add(keras.layers.Dense(N_HIDDEN, batch_input_shape=(None, 1), activation='relu'))
model.add(mdn.MDN(OUTPUT_DIMS, N_MIXES))
model.compile(loss=mdn.get_mixture_loss_func(OUTPUT_DIMS,N_MIXES), optimizer=keras.optimizers.Adam())
model.summary()

正常安装:

history = model.fit(x=x_train, y=y_train)

来自网络的预测是混合模型的参数,因此必须应用sample_from_output函数来生成样本。

y_test = model.predict(x_test)
y_samples = np.apply_along_axis(sample_from_output, 1, y_test, OUTPUT_DIMS, N_MIXES, temp=1.0)

在jupyter笔记本中查看笔记本目录中的示例!

致谢

参考文献

  1. 克里斯托弗M.毕晓普。1994年。混合密度网络。Technical Report NCRG/94/004。阿斯顿大学神经计算研究小组。http://publications.aston.ac.uk/373/
  2. 阿克塞尔·布兰多。2017年。用于分布和不确定度估计的混合密度网络(mdn)。硕士论文。加泰罗尼亚政治大学。
  3. 格雷夫斯。2013年。用递归神经网络生成序列。Arxiv电子印刷品(2013年8月)。https://arxiv.org/abs/1308.0850
  4. 大卫哈和道格拉斯艾克。2017年。草图的神经表示法。ARXIV电子印刷品(2017年4月)。https://arxiv.org/abs/1704.03477
  5. 查尔斯·马丁和吉姆·托雷森。2018年。Robojam:用于协作触摸屏交互的音乐混合密度网络。在进化和生物启发的音乐、声音、艺术和设计中:Evomusart'18,A.Liapis等人。(编辑)。计算机科学讲义,第10783卷。斯普林格国际出版公司。doi:10.1007/9778-3-319-77583-8_11

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何解决Java泛型通配符/抽象歧义问题?   javacom。苹果eawt我到底应该安装什么   在屏幕旋转后,java片段的目标不在片段管理器中   java测试数据库连接超时   java当子类构造函数的超类具有较少的参数时,如何向其添加更多参数?   部署为jetty中部署为服务的两个应用程序设置不同的java系统属性   发送带有唯一附件的批量电子邮件(服务、java或api)   java如何在Android上使用AlarmManager在所需日期显示Toast   java有没有办法在eclipse中过滤工作区引用(Ctrl+Shift+G),这样就不会看到“潜在匹配”?   java设置textview数组的上下文   java为什么滚动页面时不使用鼠标滚动光标轨迹?   java在运行时更改拓扑属性   java自管理单调递增密钥或系统的时间戳   直接向扬声器发送音频