MNIST是一套对手写数字进行识别的数据集:http://yann.lecun.com/exdb/mnist/
MNIST的数据结构官网上已给出,挺奇葩的-.-,所以第一件事是把数据整理出来
我写了个脚本帮我整理,输出的是一坨文本文件,
【其中image是用灰度矩阵表示,每个像素1字节,每张图28x28 pixels
1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <cstdlib> 5 using namespace std; 6 string st; 7 int tx,ty,ans,nm; 8 9 int toshi(char x) 10 { 11 int tmp; 12 if(x<=‘9‘) tmp=x-‘0‘; 13 else tmp=x-‘a‘+10; 14 return tmp; 15 } 16 17 int main() //image 18 { 19 freopen("testimages.txt","r",stdin); 20 21 for (int IM=1;IM<=10010;IM++) 22 { 23 char fn[50]=""; 24 itoa(IM,fn,10); 25 freopen(fn,"w",stdout); 26 nm=0; 27 cout<<"["; 28 for(int CC=1;CC<=392;CC++) //28*28/2 29 { 30 cin>>st; 31 ty=toshi(st[0]); 32 tx=toshi(st[1]); 33 ans=ty*16+tx; 34 if(nm%28==0) cout<<"["; 35 nm++; 36 cout<<ans; 37 if(nm%28!=0) cout<<","; 38 if(nm%28==0) if(nm%784==0) cout<<"]"; else cout<<"];"; 39 40 ty=toshi(st[2]); 41 tx=toshi(st[3]); 42 ans=ty*16+tx; 43 if(nm%28==0) cout<<"["; 44 nm++; 45 cout<<ans; 46 if(nm%28!=0) cout<<","; 47 if(nm%28==0) if(nm%784==0) cout<<"]"; else cout<<"];"; 48 } 49 cout<<"]"; 50 } 51 52 53 return 0; 54 } 55 56 57 58 /* 59 int main() //label 60 { 61 freopen("testlabel.txt","r",stdin); 62 //freopen("23333.out","w",stdout); 63 64 for (int IM=1;IM<=10000;IM+=2) 65 { 66 char fn[50]=""; 67 itoa(IM,fn,10); 68 freopen(fn,"w",stdout); 69 cin>>st; 70 ty=toshi(st[0]); 71 tx=toshi(st[1]); 72 ans=ty*16+tx; 73 cout<<ans<<" "; 74 75 itoa(IM+1,fn,10); 76 freopen(fn,"w",stdout); 77 ty=toshi(st[2]); 78 tx=toshi(st[3]); 79 ans=ty*16+tx; 80 cout<<ans<<" "; 81 } 82 83 84 return 0; 85 } 86 87 */
两个int main()一个是给image用的一个是给label用的,需要时选其中一个,把另一个注释掉即可。
循环变量IM表示数据数量。traindata有60000组,testdata有10000组
时间: 2024-12-28 01:57:26