我的问题是:在给定舞蹈序列训练数据的情况下,下面详述的长短期记忆网络是否经过适当设计以生成新的舞蹈序列?
背景:我正在与一位希望使用神经网络生成新舞蹈序列的舞者合作。她向我发送了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])))
相关分类