# 原始数据来自:
# https://github.com/myleott/mnist_png
# 但是这个数据的放置效果是这样的:
显然不好用.
于是进行转化,目标是所有图片都放在一起,然后生成一个"图片和类别名字对应"的train.csv
这样,MNIST数据格式就和kaggle比赛中的一致了.
新建一个origin文件夹,把train中上述所有文件夹剪切放入origin
然后运行以下代码,得到train.csv
import os
import pandas as pd
from pandas.core.frame import DataFrame
#根据每个文件夹分别生成一个csv文件用来记录png图片和类别之间的关系
path="./origin/"
train_df = pd.DataFrame(columns = ["pic_name", "label"])
for folder in os.listdir(path):
sub_folder=path+folder
#获得某个类别下面的所有文件列表,然后存入一个csv
file_lists=[f for f in os.listdir(sub_folder) if os.path.isfile(os.path.join(sub_folder, f))]
# print("file_lists=",file_lists)
labels=list(folder)*len(file_lists)#生成类别
c={"pic_name":file_lists,"label":labels}
data=DataFrame(c)
train_df=pd.concat([train_df,data],ignore_index=True)
# data.to_csv(folder+".csv",index=False)
train_df.to_csv("train.csv",index=False)
#合并所有的csv,得到train.csv
然后所有文件从origin下面剪切到train中混合在一起,命令如下:
mv origin/*/*.png train/
由于MNIST中的test是验证集的意思,所以需要把上述步骤对test也操作一遍.
好了,最终结果如下:
https://github.com/appleyuchi/MNIST_PNG