#include #include #include #include #include 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; 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; int i, j; if (strcmp(token, "") == 0) { scanf("%d %d", &ncol, &nrow); scanf("%s %d %d", token, &ncol, &nrow); printf("%d %d\n", nrow, ncol); 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); base = fout.tellp(); sprintf(output, "%16d", 0); fout << output; sprintf(output, "{type=\"nerv.LinearTransParam\",id=\"affine%d_ltp\"}\n", cnt); fout << output; sprintf(output, "%d %d\n", nrow, ncol); fout << output; for (i = 0; i < nrow; i++) { for (j = 0; j < ncol; j++) fout << mat[i][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); if (scanf("%s %d", token, &ncol) == 2 && *token == 'v') { base = fout.tellp(); for (j = 0; j < ncol; j++) scanf("%lf", mat[0] + j); sprintf(output, "%16d", 0); fout << output; sprintf(output, "{type=\"nerv.BiasParam\",id=\"affine%d_bp\"}\n", cnt); 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); cnt++; } } else if (strcmp(token, "") == 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, "") == 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; }