/* irl_gnuplot.c */ #include #include "mnist.h" #include "irl_gnuplot.h" char buf[100]; FILE *gp; void irl_init_gnuplot (int m) { // sprintf (buf, "gnuplot -geometry %dx%d", 1280,1280); sprintf (buf, "gnuplot -parse"); gp = popen(buf,"w"); if ( m == 1){ fprintf(gp, "set terminal pdf\n"); } else if ( m == 2){ fprintf(gp, "set terminal gif\n"); } else if ( m == 3){ fprintf(gp, "set terminal postscript \"Helvetica\" 20 color eps enhanced\n"); } // fprintf(gp, "set terminal postscript eps color \"Times\" 20\n"); // fprintf(gp, "set terminal tgif\n"); // fprintf(gp, "set term x11\n"); fprintf(gp, "set size ratio -1\n"); // fprintf(gp, "set size 1.0, 0.25\n"); // fprintf(gp, "set size 1.0, 0.2\n"); fprintf(gp, "set noxtics\n"); fprintf(gp, "set noytics\n"); fprintf(gp, "set border 0\n"); fprintf(gp, " \n"); // fprintf(gp, "set size square\n"); // fprintf(gp, "unset colorbox\n"); // fprintf(gp, "set cbrange [-0.4:0.4]\n"); // fprintf(gp, "set cbrange [-0.002:0.002]\n"); fprintf(gp, "unset key\n"); fprintf(gp, "set palette defined (0 \"white\", 1 \"blue\")\n"); // fprintf(gp, "set palette defined (0 \"black\", 1 \"white\", 2 \"red\")\n"); fprintf(gp, "set yrange [] reverse\n"); } /* w[i][j] 表示したいデータ img[] は表示する画像 */ void irl_plot3d_gnuplot (double **w, double *img, char *title, int n_visible, int n_hidden, int m) { fprintf (gp, "set title \"%s\"\n", title); if ( m == 1){ fprintf(gp, "set out 'result_mnist_%s.pdf\n", title); } else if ( m == 2){ fprintf(gp, "set out 'result_mnist_%s.gif'\n", title); } else if ( m == 3){ fprintf(gp, "set out 'result_mnist_%s.eps'\n", title); } // fprintf(gp, "set label 1 '%s' at 10,-5 right\n", title); // fprintf(gp, "set label 1 font 'Times-Italic'\n", title); fprintf(gp, "plot '-' matrix with image\n"); irl_write_multi_images(w, img, n_hidden/8, 8, n_visible, n_hidden); // write_multi_images(asn->W, img, n_hidden/10, 10, n_visible, n_hidden); fflush (gp); } /* write_multi_images(w, img, n_hidden/20, 20, n_visible, n_hidden); 3番目の引数: 一行に表示する個数 4番目の引数: 縦方向の表示数. */ void irl_write_multi_images(double **w, double *img, int nx, int ny,int n_visible, int n_hidden ){ int i,j; int MARGIN_X = 2; int MARGIN_Y = 2; int N_XUNITS = MNIST_X_UNITS; int N_YUNITS = MNIST_Y_UNITS; int width = MARGIN_X + (N_XUNITS + MARGIN_X)*nx; int height = MARGIN_Y + (N_YUNITS + MARGIN_Y)*ny; int n_pixels = width * height; int index; int r,c; int a; int start_x, start_y; double min; min = 0.0; for (i = 0; i < n_hidden; i++){ for (j=1; j <= n_visible; j++){ if ( w[i][j] < min ){ min = w[i][j]; } } } for (i=0; i