首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用来自自定义数据的sidekit培训UBM

使用来自自定义数据的sidekit培训UBM
EN

Stack Overflow用户
提问于 2017-05-10 14:31:10
回答 2查看 2K关注 0票数 1

我正在尝试从我已经提取的数据中训练GMM-UBM模型,以便用SIDEKIT进行情感识别(与说话人识别基本相同)。我也不理解HDF5特性文件系统)。我的数据是具有形状的ndarray ( 1101 ,78) [78是声学特征的数目,1101是特征向量(帧)的数目。

代码语言:javascript
复制
ubm = sidekit.Mixture()

llks = ubm.EM_uniform(anger, distribNb, iteration_min=3, iteration_max=10, llk_gain=0.01, do_init=True)

引发的错误是:

代码语言:javascript
复制
line 394, in _compute_all
    self.A = (numpy.square(self.mu) * self.invcov).sum(1) - 2.0 * (numpy.log(self.w) + numpy.log(self.cst))

ValueError: operands could not be broadcast together with shapes (512,78) (512,0)

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-31 17:12:16

你可能已经想好了,但我想我还是发布一个可能的解决方案吧。

以下代码创建具有维度(2,100)的随机数据,并尝试使用EM_uniform算法训练128个混合gmm:

代码语言:javascript
复制
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_split()-algorithm的初始化函数)的代码对混合代码进行了手动初始化。

以下代码在我的计算机上运行时没有错误:

代码语言:javascript
复制
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 5-文件,请查看教程的h5py文档。此外,hdfview允许您查看h5-文件的内容,这对于稍后进行调试非常方便。

票数 3
EN

Stack Overflow用户

发布于 2019-01-08 07:58:42

Feature_list参数的内容是什么?

代码语言:javascript
复制
ubm=sk.Mixture()
 llk = ubm.EM_split(features_server=server,
                     feature_list=ubm_list,
                     distrib_nb=512,
                     num_thread=8,
                     save_partial=False)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43895460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档