Keras:将 MDN 层添加到 LSTM 网络

我的问题是:在给定舞蹈序列训练数据的情况下,下面详述的长短期记忆网络是否经过适当设计以生成新的舞蹈序列?


背景:我正在与一位希望使用神经网络生成新舞蹈序列的舞者合作。她向我发送了2016 年的 chor-rnn 论文,该论文使用带有混合密度网络层的 LSTM 网络完成了这项任务。然而,在我的 LSTM 网络中添加一个 MDN 层后,我的损失变为负值,结果看起来很混乱。这可能是由于训练数据非常小,但我想在扩大训练数据大小之前验证模型基础。如果有人可以建议下面的模型是否忽略了一些基本的东西(很有可能),我将非常感谢他们的反馈。


我输入网络的样本数据(X下图)具有形状 (626, 55, 3),它对应于 55 个身体位置的 626 个时间快照,每个位置有 3 个坐标(x、y、z)。所以 X 1 [11][2] 是第 11 个身体部位在时间 1 的 z 位置:


import requests

import numpy as np


# download the data

requests.get('https://s3.amazonaws.com/duhaime/blog/dancing-with-robots/dance.npy')


# X.shape = time_intervals, n_body_parts, 3

X = np.load('dance.npy')

为了确保数据被正确提取,我将前几帧可视化X:


import mpl_toolkits.mplot3d.axes3d as p3

import matplotlib.pyplot as plt

from IPython.display import HTML

from matplotlib import animation

import matplotlib


matplotlib.rcParams['animation.embed_limit'] = 2**128


def update_points(time, points, X):

  arr = np.array([[ X[time][i][0], X[time][i][1] ] for i in range(int(X.shape[1]))])

  points.set_offsets(arr) # set x, y values

  points.set_3d_properties(X[time][:,2][:], zdir='z') # set z value


def get_plot(X, lim=2, frames=200, duration=45):

  fig = plt.figure()

  ax = p3.Axes3D(fig)

  ax.set_xlim(-lim, lim)

  ax.set_ylim(-lim, lim)

  ax.set_zlim(-lim, lim)

  points = ax.scatter(X[0][:,0][:], X[0][:,1][:], X[0][:,2][:], depthshade=False) # x,y,z vals

  return animation.FuncAnimation(fig,

    update_points,

    frames,

    interval=duration,

    fargs=(points, X),

    blit=False  

  ).to_jshtml()


HTML(get_plot(X, frames=int(X.shape[0])))


潇潇雨雨
浏览 267回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python