基于pycaffe从零开始写mnist(第一篇)——生成txt文件

来源:互联网 发布:php静态计数器 编辑:程序博客网 时间:2024/05/29 12:04

遇到的问题:

1.F0725 23:05:55.042811  4306 common.cpp:158] Check failed: error == cudaSuccess (10 vs. 0)  invalid device ordinal
*** Check failure stack trace: ***


因为我在set_device上设置为第二块gpu,但是仅仅有一块gpu,因此会报错,所以应该执行gpu为set_device(0)

caffe.set_device(1)2.F0725 23:28:49.673435  4586 image_data_layer.cpp:148] Check failed: cv_img.data Could not load *** Check failure stack trace: ***竟然报找不到图片的错误,莫名其妙,我写的可是全路径啊好吧,从当前路径开始往下写,终于找到文件了,因此在将txt文件传入神经网络的时候,并非输入全路径,而是输入相对路径--------------------------------------------------------------------------------这里要注意:生成的txt文件的图片路径一定要是相对路径具体代码如下:
# -*- coding: utf-8 -*-__author__ = 'xuy'"""用来生成txt文件,最终生成的是的路径是相对路径,不是绝对路径格式是:图片文件名 label(也就是文件夹名称)"""import commandsimport osimport reimport randomtrain_root_dir='mnist/train'test_root_dir='mnist/test'train_save_name=train_root_dir+'/mytrain.txt'test_save_name=test_root_dir+'/mytest.txt'fw_train=open(train_save_name,'w')#打开的是文件名称fw_test=open(test_save_name,'w')for parent,dirnames,filenames in os.walk(train_root_dir):#三个参数:分别返回1.父目录 2.所有文件夹名字(不含路径) 3.所有文件名字#开始遍历train文件夹下面的所有的文件名称    for filename in filenames:        pattern_train=r'(\d{0,10}.png$)'        pattern_train_png_filename=re.search(pattern_train,filename)        if pattern_train_png_filename !=None:            train_png_filename=pattern_train_png_filename.group(0)#这个是以png为后缀名的文件名,其他文件名被过滤掉了            train_all_file_name=os.path.join(parent,train_png_filename)#添加了全路径名称            # print "the full filename is: ",train_all_file_name            train_label_FileName=train_all_file_name[-11:-10]            # print "the train label is :",train_label_FileName            train_WriteFile_content=train_all_file_name+' '+train_label_FileName+'\n'            # shuffle_train_WriteFile_content=random.sample(train_WriteFile_content,len(train_WriteFile_content))            fw_train.write(train_WriteFile_content)        # print "parent is:" + parent        # print "filename is:" + filename        # all_file_name=os.path.join(parent,filename)        # print "the full filename is: ",all_file_name #输出文件路径信息for parent,dirnames,filenames in os.walk(test_root_dir):    for filename in filenames:        pattern_test=r'(\d{0,10}.png$)'        pattern_test_png_filename=re.search(pattern_test,filename)        if pattern_test_png_filename !=None:            test_png_filename=pattern_test_png_filename.group(0)            test_all_file_name=os.path.join(parent,test_png_filename)            # print "the full filename is: ",test_all_file_name            test_label_FileName=test_all_file_name[-11:-10]            test_WriteFile_content=test_all_file_name+' '+test_label_FileName+'\n'            # random.shuffle(test_WriteFile_content)这个报错            # shuffle_test_WriteFile_content=random.sample(test_WriteFile_content,len(test_WriteFile_content))            fw_test.write(test_WriteFile_content)fw_train.close()fw_test.close() 


此时生成的文件是有顺序的,这就会导致训练的时候准确率不高,实验的时候,才10%多一点,因此需要打乱顺序

通过系统命令:shuf train.txt >shuf_train.txt,这样就生成了一个乱序的txt文件,因此就可以进入下一篇,构造网络结构+训练了


阅读全文
0 0