使用张量流概率的路缘石MDN层。
keras-mdn-layer的Python项目详细描述
路缘石混合密度网络层
基于tensorflow分布模型的路缘石混合密度网络(mdn)层。这使得用神经网络来预测多个实值变量的实验变得更加简单,这些变量可以具有多个同样可能的值。
这一层可以帮助构建类似于RoboJam,Sketch-RNN,handwriting generation,甚至world models中使用的MDN RNN。您可以用MDN做很多很酷的事情!
此实现的一个好处是可以预测任意数量的实际值。tensorflow的Mixture
、Categorical
和MultivariateNormalDiag
分布函数用于生成损失函数(多元正态分布与对角协方差矩阵的混合的概率密度函数)。在以前的工作中,损失函数通常是手工指定的,这对于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问题:
还有一个脚本用于生成假汉字:
最后,为了学习如何生成带有时间成分的音乐触摸屏表演:
如何使用
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笔记本中查看笔记本目录中的示例!
致谢
- 提示Omimo's Keras MDN layer作为此代码的起点。
- 超级帽子尖到hardmaru's MDN explanation, projects, and good ideas for sampling functions等。
- 许多好主意来自Axel Brando's Master's Thesis
- 爱德华的混合密度网络。
参考文献
- 克里斯托弗M.毕晓普。1994年。混合密度网络。Technical Report NCRG/94/004。阿斯顿大学神经计算研究小组。http://publications.aston.ac.uk/373/
- 阿克塞尔·布兰多。2017年。用于分布和不确定度估计的混合密度网络(mdn)。硕士论文。加泰罗尼亚政治大学。
- 格雷夫斯。2013年。用递归神经网络生成序列。Arxiv电子印刷品(2013年8月)。https://arxiv.org/abs/1308.0850
- 大卫哈和道格拉斯艾克。2017年。草图的神经表示法。ARXIV电子印刷品(2017年4月)。https://arxiv.org/abs/1704.03477
- 查尔斯·马丁和吉姆·托雷森。2018年。Robojam:用于协作触摸屏交互的音乐混合密度网络。在进化和生物启发的音乐、声音、艺术和设计中:Evomusart'18,A.Liapis等人。(编辑)。计算机科学讲义,第10783卷。斯普林格国际出版公司。doi:10.1007/9778-3-319-77583-8_11