#include #include #include #include #include using namespace std; const char fmt[] = "[%013d]\n"; int main(int argc, char *argv[]) { if(argc < 3){ printf("Usage: %s kaldi_transf nerv_output\n", argv[0]); exit(1); } FILE *fin = fopen(argv[1], "r"); FILE *fout = fopen(argv[2], "w"); if(!fin || !fout){ puts("fopen error"); exit(1); } char buf[1024], tag[64]; int a, b; int size_window, size_bias; char **window, **bias; while(fgets(buf, sizeof(buf), fin)) { if(sscanf(buf, "%s%d%d", tag, &a, &b) == 3){ if(strcmp(tag, "") == 0){ assert(a == b); size_bias = a; fscanf(fin, "%*s%*s%*s"); bias = new char*[size_bias]; for(int i = 0; i < size_bias; i++){ bias[i] = new char[16]; fscanf(fin, "%s", bias[i]); } } else if(strcmp(tag, "") == 0){ assert(a == b); size_window = a; fscanf(fin, "%*s%*s%*s"); window = new char*[size_window]; for(int i = 0; i < size_window; i++){ window[i] = new char[16]; fscanf(fin, "%s", window[i]); } } } } long start = ftell(fout), size; fprintf(fout, fmt, 0); fprintf(fout, "{id = \"bias1\", type = \"nerv.MatrixParam\"}\n"); fprintf(fout, "1 %d\n", size_bias); for(int i = 0; i