summaryrefslogtreecommitdiff
path: root/htk_io/tools/tnet_to_nerv.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'htk_io/tools/tnet_to_nerv.cpp')
-rw-r--r--htk_io/tools/tnet_to_nerv.cpp78
1 files changed, 70 insertions, 8 deletions
diff --git a/htk_io/tools/tnet_to_nerv.cpp b/htk_io/tools/tnet_to_nerv.cpp
index a779a25..f96781a 100644
--- a/htk_io/tools/tnet_to_nerv.cpp
+++ b/htk_io/tools/tnet_to_nerv.cpp
@@ -2,14 +2,22 @@
#include <fstream>
#include <string>
#include <cstring>
-#include <cstdlib>
+#include <stdlib.h>
char token[1024];
char output[1024];
double **mat;
int main(int argc, char **argv) {
+
+ if (argc != 3)
+ {
+ printf("%s tnet.model.in nerv.model.out\n", argv[0]);
+ }
+
std::ofstream fout;
- fout.open(argv[1]);
- int cnt = 0;
+ freopen(argv[1], "r", stdin);
+ fout.open(argv[2]);
+ int cnt = 0, bias = 1, win = 1;
+ long length = 0, base = 0;
while (scanf("%s", token) != EOF)
{
int nrow, ncol;
@@ -19,13 +27,13 @@ int main(int argc, char **argv) {
scanf("%d %d", &ncol, &nrow);
scanf("%s %d %d", token, &ncol, &nrow);
printf("%d %d\n", nrow, ncol);
- mat = (double **)malloc(nrow * sizeof(double *));
+ mat = (double **)malloc(nrow * sizeof(double *));
for (i = 0; i < nrow; i++)
mat[i] = (double *)malloc(ncol * sizeof(double));
for (j = 0; j < ncol; j++)
for (i = 0; i < nrow; i++)
scanf("%lf", mat[i] + j);
- long base = fout.tellp();
+ base = fout.tellp();
sprintf(output, "%16d", 0);
fout << output;
sprintf(output, "{type=\"nerv.LinearTransParam\",id=\"affine%d_ltp\"}\n",
@@ -38,10 +46,8 @@ int main(int argc, char **argv) {
for (j = 0; j < ncol; j++)
fout << mat[i][j] << " ";
fout << std::endl;
- free(mat[i]);
}
- free(mat);
- long length = fout.tellp() - base;
+ length = fout.tellp() - base;
fout.seekp(base);
sprintf(output, "[%13lu]\n", length);
fout << output;
@@ -69,6 +75,62 @@ int main(int argc, char **argv) {
cnt++;
}
}
+ else if (strcmp(token, "<bias>") == 0)
+ {
+ scanf("%d %d", &ncol, &nrow);
+ scanf("%s %d", token, &ncol);
+ base = fout.tellp();
+ nrow = 1;
+ mat = (double **)malloc(nrow * sizeof(double *));
+ for (i = 0; i < nrow; i++)
+ mat[i] = (double *)malloc(ncol * sizeof(double));
+ for (j = 0; j < ncol; j++)
+ for (i = 0; i < nrow; i++)
+ scanf("%lf", mat[i] + j);
+ sprintf(output, "%16d", 0);
+ fout << output;
+ sprintf(output, "{type=\"nerv.MatrixParam\",id=\"bias%d\"}\n",bias);
+ fout << output;
+ sprintf(output, "1 %d\n", ncol);
+ fout << output;
+ for (j = 0; j < ncol; j++)
+ fout << mat[0][j] << " ";
+ fout << std::endl;
+ length = fout.tellp() - base;
+ fout.seekp(base);
+ sprintf(output, "[%13lu]\n", length);
+ fout << output;
+ fout.seekp(0, std::ios_base::end);
+ bias++;
+ }
+ else if (strcmp(token, "<window>") == 0)
+ {
+ scanf("%d %d", &ncol, &nrow);
+ scanf("%s %d", token, &ncol);
+ base = fout.tellp();
+ nrow = 1;
+ mat = (double **)malloc(nrow * sizeof(double *));
+ for (i = 0; i < nrow; i++)
+ mat[i] = (double *)malloc(ncol * sizeof(double));
+ for (j = 0; j < ncol; j++)
+ for (i = 0; i < nrow; i++)
+ scanf("%lf", mat[i] + j);
+ sprintf(output, "%16d", 0);
+ fout << output;
+ sprintf(output, "{type=\"nerv.MatrixParam\",id=\"window%d\"}\n",win);
+ fout << output;
+ sprintf(output, "1 %d\n", ncol);
+ fout << output;
+ for (j = 0; j < ncol; j++)
+ fout << mat[0][j] << " ";
+ fout << std::endl;
+ length = fout.tellp() - base;
+ fout.seekp(base);
+ sprintf(output, "[%13lu]\n", length);
+ fout << output;
+ fout.seekp(0, std::ios_base::end);
+ win++;
+ }
}
return 0;
}