使用python将自己的图片数据集准换成为cnn的数据集
来源:互联网 发布:知天下事 编辑:程序博客网 时间:2024/05/19 16:33
在使用theano的cnn时,今天介绍一下关于如何将自己的数据集转换成像cnn的默认数据集mnist的形式
在此本人遇到了一些坑,在此进行总结一下,
声明在此使用的彩色图转灰度图进行的单通道的图像存储,对于多通道的图像随后进行总结
主要流程是将图像数据读出
将图像转换成numpy的数组形式
将图像进行行的处理编程行向量的存储
之后是将数据与标签进行合并存储
存储在一个list中
将这个数据集进行数据的打乱顺序,(随机化的过程)
主要的过程就是这些了
下面是代码的
===========================
# -*-coding:utf-8-*-import numpyimport theanofrom PIL import Imagefrom pylab import *import osimport theano.tensor as Timport randomimport pickledef dataresize(path=r'D:\worksapce_python\20160426_cp\testing'): # test path path_t =r"D:\worksapce_python\20160426_cp\training" # train path datas = [] train_x= [] train_y= [] valid_x= [] valid_y= [] test_x= [] test_y= [] for dirs in os.listdir(path): # print dirs for filename in os.listdir(os.path.join(path,dirs)): imgpath =os.path.join(os.path.join(path,dirs),filename) img = Image.open(imgpath) img =img.convert('L').resize((28,28)) width,hight=img.size img = numpy.asarray(img,dtype='float64')/256. tmp = img.reshape(1, hight*width)[0] tmp =hstack((dirs,tmp)) # 在此将标签加在数据的前面。 datas.append(tmp) # datas.append(img.reshape(1, hight*width)[0]) #在此处取出第一行的数据否则在后面的转换的过程中会出现叠加的情况,在成在转换成矩阵时宝类型转换的错误 #将数据打乱顺序 random.shuffle(datas) # 将数据和标签进行分离 label=[] for num in range(len(datas)): label.append((datas[num])[0]) datas[num] =(datas[num])[1:] #将数据的标签项去掉 tests = [] # #读取测试集 for dirs in os.listdir(path_t): for filename in os.listdir(os.path.join(path_t,dirs)): imgpath =os.path.join(os.path.join(path_t,dirs),filename) img = Image.open(imgpath) img =img.convert('L').resize((28,28)) width,hight=img.size img = numpy.asarray(img,dtype='float64')/256. tmp = img.reshape(1, hight*width)[0] # 在此如果不是取出[0]的话在后面会发现其实其是一个多维的数据的叠加, # 在后面使用theano中的cnn在调用时会出现数据的异常(转换的异常), # 在此是跟原始的mnist的数据集的形式做了比较修改才发现的。。。 tmp =hstack((dirs,tmp)) tests.append(tmp) #将数据打乱顺序 random.shuffle(tests) # 将数据和标签进行分离 label_t=[] for num in range(len(tests)): label_t.append((tests[num])[0]) tests[num] =(tests[num])[1:] #将数据的标签项去掉 ''' 将数据进行打乱,拆分成train test valid ''' for num in range(len(label)): train_x.append(datas[num]) train_y.append(label[num]) for num in range(len(tests)): if num%2==0: valid_x.append(tests[num]) valid_y.append(label_t[num]) if num%2==1: test_x.append(tests[num]) test_y.append(label_t[num]) train_x=numpy.asarray(train_x,dtype='float64') train_y=numpy.asarray(train_y,dtype='int64') valid_x=numpy.asarray(valid_x,dtype='float64') valid_y=numpy.asarray(valid_y,dtype='int64') test_x=numpy.asarray(test_x,dtype='float64') test_y=numpy.asarray(test_y,dtype='int64') def shared_dataset(data_xy, borrow=True): data_x, data_y = data_xy shared_x = theano.shared(numpy.asarray(data_x, dtype=theano.config.floatX), borrow=borrow) shared_y = theano.shared(numpy.asarray(data_y, type=theano.config.floatX), borrow=borrow) return shared_x, T.cast(shared_y, 'int32') test_set_x, test_set_y = shared_dataset((test_x,test_y)) valid_set_x, valid_set_y = shared_dataset((valid_x,valid_y)) train_set_x, train_set_y = shared_dataset((train_x,train_y)) rval = [(train_set_x, train_set_y), (valid_set_x, valid_set_y), (test_set_x, test_set_y)] save_datas_pkl(rval) # return rvaldef save_datas_pkl(file1s,path=r'./data/datasets.pkl'): datas=file1s output =open(path,'wb') pickle.dump(datas,output) output.close()def load_datas(path=r'./data/datasets.pkl'): pkl_file =open(path,'rb') datas =pickle.load(pkl_file) pkl_file.close() return datasif __name__=='__main__': dataresize()
===========================
以上就是我的代码
其中的路径大家可以根据自己的路径进行修改,还有就是图像的大小可以自行的修改没必要是28*28的
我的目录形式是多级的,所以使用的双重循环
所以根据自己的情况修改。
1 0
- 使用python将自己的图片数据集准换成为cnn的数据集
- mxnet 使用自己的图片数据训练CNN模型
- CNN学习----创建自己的数据集
- 使用Python将MNIST数据集转化为图片
- 使用Faster R-CNN训练自己的数据_NWPU_VHR-10数据集
- mxnet实战笔记(1) - 使用自己的图片数据训练CNN模型
- 用CNN工具箱对自己的数据集分类
- theano下CNN网络验证测试自己的数据集
- 在自己的数据集上微调Light CNN
- 利用matlab将自己的数据制作为标准VOC数据集格式
- 使用Faster R-CNN训练自己的数据
- faster r-cnn训练自己的数据
- caffe(7) 训练自己的CNN网络—基于自己建立的数据集
- python将mysql数据库的数据转换为json数据
- 把获得的数据流转换成一副图片(Bitmap)
- 将自己数据转化为cifar10支持的lmdb
- [caffe]将自己的图片数据转换db格式
- 如何将tomcat图标换成自己的
- Flex 布局教程:实例篇(阮一峰)
- uwp开发————文件保存
- java并发编程(3)--java.util.concurrent.*
- GDOI2016酱油记
- Linux内核学习总结篇
- 使用python将自己的图片数据集准换成为cnn的数据集
- 书单
- 运算符
- yii2 rbac权限控制详细操作步骤
- MongoDB -- MongoClient连接池用法
- 剑指offer(4) 两个栈实现队列
- 几个玩具代码(不用main的编程)
- 黑马程序员全力打造高薪IT人才
- 整数规划求解有向图最短路径问题环路解决方法