Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我在MNIST数据集中的读取错误是什么?_Java_File Io_Mnist - Fatal编程技术网

Java 我在MNIST数据集中的读取错误是什么?

Java 我在MNIST数据集中的读取错误是什么?,java,file-io,mnist,Java,File Io,Mnist,我试图在一个项目中使用手写数字的MNIST数据集,我试图读取1-255的28×28整数2D数组中的每个图片,对应于每个像素的灰度颜色。我从他们的网站()下载了培训文件(train-images-idx3-ubyte.gz),实际处理这个文件时遇到了问题。它将文件格式描述为16个字节的头信息,后跟无符号位,每个位包含一个像素,按行组织。有关更多详细信息,请访问网站 在我的代码中,我尝试将文件读入一个字节数组(当我运行它时,它与指定的文件大小相同:9912422字节)。然后我从第17个字节开始,以跳

我试图在一个项目中使用手写数字的MNIST数据集,我试图读取1-255的28×28整数2D数组中的每个图片,对应于每个像素的灰度颜色。我从他们的网站()下载了培训文件(train-images-idx3-ubyte.gz),实际处理这个文件时遇到了问题。它将文件格式描述为16个字节的头信息,后跟无符号位,每个位包含一个像素,按行组织。有关更多详细信息,请访问网站

在我的代码中,我尝试将文件读入一个字节数组(当我运行它时,它与指定的文件大小相同:9912422字节)。然后我从第17个字节开始,以跳过标题,并补偿java试图使该字节成为一个有符号整数,将所有负数的绝对值加128(它们的第一位是1)。为了看看这是否有效,我试着使用一个绘图面板类来打印它,我知道这个类是有效的,我只看到静态的,像素上根本没有图案。我处理这个文件有什么不对? 谢谢

File File=new文件(“train-images-idx3-ubyte.gz”);
long size=file.length();
系统输出打印项次(尺寸);
字节[]内容=新字节[(int)大小];
FileInputStream in=新的FileInputStream(文件);
阅读(内容);
in.close();
DrawingPanel=新的DrawingPanel(400400);
Graphics g=panel.getGraphics();
int-xloc=0;
int-yloc=0;
对于(intjj=0;jj<28;jj++)
{
对于(int ii=0;ii<28;ii++)
{
int x=(int)内容[17+jj*28+ii];
if(x<0)
{
x=(x*(0-1))+128;
}
系统输出打印(x+“”);
int color=(255-x);
g、 setColor(新颜色(x,x,x));
g、 fillRect(xloc,yloc,10,10);
xloc+=10;
}
System.out.println();
yloc+=10;
xloc=0;
}

对于将来遇到这个问题的人来说,评论是对的,你必须先解压缩gz文件,然而,我研究了这个问题,它看起来非常复杂


虽然我正在研究这个问题,但我发现,通过快速的谷歌搜索,csv数据在网上很容易获得,所以除非你们喜欢自己提取文件,否则我建议你们使用这个

一旦解压了数据,您的代码就可以在我的网站上很好地运行,但只有在这些更改之后

  • 如果(x255)x=255//将任何高值设为上限

  • int color=(255-x)

  • g、 设置颜色(新颜色(颜色、颜色、颜色));//而不是x,x,x


首先,您可能需要一个特殊的库来正确读取GZIP文件。我认为您应该先解压缩GZIP文件,然后读入未压缩文件。要在Windows上解压文件,您可以使用第三方软件,如。(否则,命令行/终端中的tar-xvzf[文件路径]应该可以工作。)
 File file=new File("train-images-idx3-ubyte.gz");
 long size = file.length(); 
 System.out.println(size);        
 byte[] contents=new byte[(int)size];
 FileInputStream in = new FileInputStream(file);
 in.read(contents);
 in.close();
 DrawingPanel panel = new DrawingPanel(400, 400);
 Graphics g = panel.getGraphics(); 
 int xloc = 0;
 int yloc = 0;                         
 for(int jj = 0; jj < 28; jj++)
 {
    for(int ii = 0; ii < 28; ii++)
    {
       int x = (int) contents[17+jj*28+ii];
       if(x < 0)
       {
          x = (x * (0-1)) + 128;
       }
       System.out.print(x + " ");
       int color = (255 - x);
       g.setColor(new Color(x,x,x));
       g.fillRect(xloc,yloc,10,10);
           xloc += 10;
    }
    System.out.println();
    yloc+= 10;
    xloc = 0;
 }