2014-01-18 8 views
0

Matlab의 viterbi logodds 계산에 효율성 문제가 있습니다.Matlab의 빠른 DP (프로필 HMM의 경우 Viterbi)

기본적으로 내 문제는 코드를 많이 감속시키는 중첩 루프가 반드시 있어야한다는 것입니다.

for i=1:input_len 
    for j=1:num_states 
     v_m=emission_value+max_over_3_elements; %V_M 
     v_i=max_over_2_elements; %V_I 
     v_d=max_over_2_elements; %V_D 
    end 
end 

내가 어쩌면 당신은 몇 가지 조언이있어 프로파일 HMM에 대한 비터 비를 구현하는 첫 번째 아니에요 생각이 비싼 부분입니다. 또한 Matlab 자신의 hmmviterbi를 살펴 보았지만 계시도 없었습니다 (중첩 루프 사용). 나는 또한 max를 몇 가지 기본 연산으로 대체하면서 테스트했지만 눈에 띄는 차이는 없었습니다 (사실 약간 느림).

+0

Kevin Murphy의 Probabilistic Modeling Toolkit은 확률 론적 모델링에 많이 사용되는 matlab 함수를 고도로 최적화 된 버전으로 대체하는 Lightspeed라는 패키지를 포함하고 있기 때문에 상당히 빠릅니다. https://github.com/probml/pmtk3 – jerad

답변

0

불행히도, 루프는 Matlab에서 속도가 느립니다 (최신 버전에서는 더 좋아집니다). 그리고 루프 내부의 연산이 다른 반복에서는 독립적이지 않기 때문에 쉽게 벡터화/병렬화 할 수 있다고 생각하지 않습니다.

이것은 MEX의 작업처럼 보입니다. C로 이것을 작성하는 것은 너무 많은 작업이 아니어야하며 예상되는 속도 향상은 아마도 꽤 큽니다.