2017-05-10 174 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