使用张量流概率的路缘石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检查整数是0还是检查变量是null更好?   java Android Kotlin(初学者)使用File(),并从ACTION\u GET\u内容返回Uri   java JavaFx在“内部场景”和根场景之间切换   spring将XMLBean配置转换为java配置   java JPA HIBERNATE映射列两次(embeddedID和POJO)   c#单态模式模型在什么情况下适用?   java请求。getRemoteUser在特定时间后返回null?   spring boot中PUT api控制器的java my单元测试用例失败   java在字符串中互换地解析和替换值   java Android JNI在应用程序中检测到错误:调用JNI GetMethodID时出现挂起异常   JavaSpringDataMongo:使用非简单键持久化映射   爪哇玻璃鱼连接被拒绝   java如何在用户注册时发送特定电子邮件id的自动回复?   Java列表:实例化时和之后的赋值之间的差异