From: Shikano M. <sh...@us...> - 2016-12-22 06:24:01
|
Update of /cvsroot/sp-tk/SPTK/src/bin/gmm In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv10443 Modified Files: gmm.c gmmp.c _gmm.c Log Message: add -D option in gmmp command Index: _gmm.c =================================================================== RCS file: /cvsroot/sp-tk/SPTK/src/bin/gmm/_gmm.c,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** _gmm.c 16 Dec 2015 07:24:03 -0000 1.25 --- _gmm.c 22 Dec 2016 06:23:59 -0000 1.26 *************** *** 296,300 **** ! double log_wgd(const GMM * gmm, const int m, const int L, const double *dat) { int l, ll; --- 296,301 ---- ! double log_wgd(const GMM * gmm, const int m, const int l1, const int l2, ! const double *dat) { int l, ll; *************** *** 304,318 **** if (gmm->full != TR) { ! for (l = 0; l < L; l++) { tmp = dat[l] - gmm->gauss[m].mean[l]; sum += (tmp * tmp) / gmm->gauss[m].var[l]; } } else { ! diff = dgetmem(L); ! for (l = 0; l < L; l++) { diff[l] = dat[l] - gmm->gauss[m].mean[l]; } ! for (l = 0; l < L; l++) { ! for (ll = 0, tmp = 0.0; ll < L; ll++) { tmp += diff[ll] * gmm->gauss[m].inv[ll][l]; } --- 305,319 ---- if (gmm->full != TR) { ! for (l = l1; l < l2; l++) { tmp = dat[l] - gmm->gauss[m].mean[l]; sum += (tmp * tmp) / gmm->gauss[m].var[l]; } } else { ! diff = dgetmem(l2); ! for (l = l1; l < l2; l++) { diff[l] = dat[l] - gmm->gauss[m].mean[l]; } ! for (l = l1; l < l2; l++) { ! for (ll = l1, tmp = 0.0; ll < l2; ll++) { tmp += diff[ll] * gmm->gauss[m].inv[ll][l]; } *************** *** 323,326 **** --- 324,328 ---- lwgd = log(gmm->weight[m]) - 0.5 * sum; + return (lwgd); } *************** *** 347,351 **** } ! double log_outp(const GMM * gmm, const int L, const double *dat) { int m; --- 349,353 ---- } ! double log_outp(const GMM * gmm, const int l1, const int l2, const double *dat) { int m; *************** *** 353,357 **** for (m = 0, logb = LZERO; m < gmm->nmix; m++) { ! logwgd = log_wgd(gmm, m, L, dat); logb = log_add(logb, logwgd); } --- 355,359 ---- for (m = 0, logb = LZERO; m < gmm->nmix; m++) { ! logwgd = log_wgd(gmm, m, l1, l2, dat); logb = log_add(logb, logwgd); } Index: gmmp.c =================================================================== RCS file: /cvsroot/sp-tk/SPTK/src/bin/gmm/gmmp.c,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** gmmp.c 14 Dec 2015 05:34:34 -0000 1.21 --- gmmp.c 22 Dec 2016 06:23:58 -0000 1.22 *************** *** 59,64 **** * -B B1 ... Bb : block size in covariance matrix [FALSE] * * where (B1 + B2 + ... + Bb) = l * ! * -c1 : inter-block correlation [FALSE] * ! * -c2 : full covariance in each block [FALSE] * * infile: * * input vector sequence [stdin] * --- 59,65 ---- * -B B1 ... Bb : block size in covariance matrix [FALSE] * * where (B1 + B2 + ... + Bb) = l * ! * -c1 : inter-block correlation [FALSE] * ! * -c2 : full covariance in each block [FALSE] * ! * -D : print log-probability of each block [FALSE] * * infile: * * input vector sequence [stdin] * *************** *** 98,101 **** --- 99,103 ---- #define DEF_M 16 #define DEF_A FA + #define DEF_D FA #define FULL FA *************** *** 135,138 **** --- 137,143 ---- fprintf(stderr, " -c2 : full covariance in each block [FALSE]\n"); + fprintf(stderr, + " -D : print log-probablity of each block [%s]\n", + BOOL[DEF_D]); fprintf(stderr, " infile:\n"); fprintf(stderr, *************** *** 162,169 **** FILE *fp = stdin, *fgmm = NULL; GMM gmm; ! double logp, ave_logp, *x; int M = DEF_M, L = DEF_L, T; ! Boolean aflag = DEF_A, full = FULL; ! int cov_dim = 0, dim_list[1024], i, j; Boolean block_full = FA, block_corr = FA, multiple_dim = FA; --- 167,174 ---- FILE *fp = stdin, *fgmm = NULL; GMM gmm; ! double logp, *ave_logp, *x; int M = DEF_M, L = DEF_L, T; ! Boolean aflag = DEF_A, Dflag = DEF_D, full = FULL; ! int cov_dim = 0, dim_list[1024], i, j, l1, l2; Boolean block_full = FA, block_corr = FA, multiple_dim = FA; *************** *** 215,218 **** --- 220,226 ---- } break; + case 'D': + Dflag = TR; + break; default: fprintf(stderr, "%s: Illegal option \"%s\".\n", cmnd, *argv); *************** *** 275,298 **** /* Calculate and output log-probability */ T = 0; - ave_logp = 0.0; x = dgetmem(L); while (freadf(x, sizeof(*x), L, fp) == L) { ! if (!aflag) { ! logp = log_outp(&gmm, L, x); ! fwritef(&logp, sizeof(double), 1, stdout); } else { ! ave_logp += log_outp(&gmm, L, x); ! T++; } } fclose(fp); ! if (aflag) { if (T == 0) { fprintf(stderr, "%s: No input data!\n", cmnd); usage(1); } else { ! ave_logp /= (double) T; ! fwritef(&ave_logp, sizeof(double), 1, stdout); } } --- 283,333 ---- /* Calculate and output log-probability */ T = 0; x = dgetmem(L); + ave_logp = dgetmem(cov_dim); while (freadf(x, sizeof(*x), L, fp) == L) { ! if (Dflag == TR) { ! l1 = 0; ! l2 = 0; ! if (multiple_dim != TR) { ! fprintf(stderr, ! "%s: -D option must be specified with -B option!\n", cmnd); ! usage(1); ! } ! for (i = 0; i < cov_dim; i++) { ! l2 = l2 + dim_list[i]; ! if (aflag == TR) { ! ave_logp[i] += log_outp(&gmm, l1, l2, x); ! } else { ! logp = log_outp(&gmm, l1, l2, x); ! fwritef(&logp, sizeof(double), 1, stdout); ! } ! l1 = l2; ! } } else { ! if (aflag == TR) { ! ave_logp[0] += log_outp(&gmm, 0, L, x); ! } else { ! logp = log_outp(&gmm, 0, L, x); ! fwritef(&logp, sizeof(double), 1, stdout); ! } } + T++; } fclose(fp); ! if (aflag == TR) { if (T == 0) { fprintf(stderr, "%s: No input data!\n", cmnd); usage(1); } else { ! if (Dflag == TR) { ! for (i = 0; i < cov_dim; i++) { ! ave_logp[i] /= (double) T; ! fwritef(&ave_logp[i], sizeof(double), 1, stdout); ! } ! } else { ! ave_logp[0] /= (double) T; ! fwritef(&ave_logp[0], sizeof(double), 1, stdout); ! } } } Index: gmm.c =================================================================== RCS file: /cvsroot/sp-tk/SPTK/src/bin/gmm/gmm.c,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -d -r1.28 -r1.29 *** gmm.c 16 Dec 2015 07:27:40 -0000 1.28 --- gmm.c 22 Dec 2016 06:23:58 -0000 1.29 *************** *** 555,559 **** for (t = 0, ave_logp1 = 0.0, pd = dat; t < T; t++, pd += L) { for (m = 0, logb = LZERO; m < M; m++) { ! logwgd[m] = log_wgd(&gmm, m, L, pd); logb = log_add(logb, logwgd[m]); } --- 555,559 ---- for (t = 0, ave_logp1 = 0.0, pd = dat; t < T; t++, pd += L) { for (m = 0, logb = LZERO; m < M; m++) { ! logwgd[m] = log_wgd(&gmm, m, 0, L, pd); logb = log_add(logb, logwgd[m]); } |