2017-05-10 86 views
0

我想从我已经用SIDEKIT提取的情感识别数据训练GMM-UBM模型(几乎与说话人识别一样,我也不理解HDF5功能文件系统)。我的数据是具有形状的视频(1101,78)[78是声学特征的数量和1101是特征矢量(帧)的数量。从定制数据训练UBM与sidekit

UBM = sidekit.Mixture()

llks = ubm.EM_uniform(愤怒,distribNb,iteration_min = 3,iteration_max = 10,llk_gain = 0.01,do_init =真)

的时引发错误: line 394,in _compute_all self.A =(numpy.square(self.mu)* self.invcov).sum(1) - 2.0 *(numpy.log(self.w)+ numpy.log(self。 c))

ValueError:操作数无法与形状一起广播(512,78)(512,0)

这意味着协方差矩阵是形状的(512,0)。那是错的吗?应该是(512,78)?我可能是错的。请给我一个提示

回答

1

你可能已经知道了,但我想我可能会发布一个可能的解决方案。

以下代码创建与尺寸(2100)的随机数据,并尝试使用EM_uniform算法训练128混合物GMM:

import sidekit 
import numpy as np 
import random as rn 

gmm = sidekit.Mixture() 
data = np.array([[rn.random() for i in range(100)],[rn.random() for i in range(100)]]) 
gmm.EM_uniform(data, 
       distrib_nb=128, 
       iteration_min=3, 
       iteration_max=10, 
       llk_gain=0.01, 
       do_init=True) 

然而,这导致在相同的错误已报道: ValueError:操作数不能与形状一起广播(128,100)(128,0)

我怀疑在如何计算gmm.invcov在Sidekit.Mixture._init_uniform()中存在一些错误,所以我想出了一个使用Sidekit.Mixture._init()中的代码手动初始化混合(EM_的初始化函数分裂() - 算法)。

下面的代码运行没有我的电脑上的错误:

import sidekit 
import numpy as np 
import random as rn 
import copy 

gmm = sidekit.Mixture() 
data = np.array([[rn.random() for i in range(100)],[rn.random() for i in range(100)]]) 

# Initialize the Mixture with code from Sidekit.Mixture._init() 
mu = data.mean(0) 
cov = (data**2).mean(0) 
gmm.mu = mu[None] 
gmm.invcov = 1./cov[None] 
gmm.w = np.asarray([1.0]) 
gmm.cst = np.zeros(gmm.w.shape) 
gmm.det = np.zeros(gmm.w.shape) 
gmm.cov_var_ctl = 1.0/copy.deepcopy(gmm.invcov) 
gmm._compute_all() 

# Now run EM without initialization 
gmm.EM_uniform(data, 
       distrib_nb=128, 
       iteration_min=3, 
       iteration_max=10, 
       llk_gain=0.01, 
       do_init=False) 

这得到以下输出: [-31.419146414931213,54.759037708692404,54.759037708692404,54.759037708692404], 这是在每次迭代后对数似然值(经过4次迭代后收敛,请注意,这个示例数据是小到可以训练一个gmm的方法。)

我不能保证这会导致以后发生任何错误,如果是这种情况,请留下评论!

至于HDF5文件,请查看h5py documentation的教程。另外,hdfview允许你查看h5文件的内容,这对于稍后进行调试时非常方便。

+0

非常感谢您的正确答案JørgenA.是的,我发现在invcov矩阵的初始化中存在一个错误。您是否在sidekit中有GMM-UBM示例的github帐户? – stefos

+1

你也知道一种方式来运行UBM-GMM系统与你自己的数据在numpy数组?我的意思是没有Feature Server和hdf5文件。因为我已经提取了我自己的自定义功能。 – stefos