您的位置:首页 > Web前端

windows中caffe中alexnet模型可能会遇到的问题

2017-03-13 10:49 253 查看
在windows版本下,caffe中好多脚本是linux版本下的,很多时候需要我们自己改成windows下批处理脚本。

那么在alexnet会遇到那些问题呢?我总结下我遇到的问题:

1.首先是数据ilsvrc2012下载问题,训练数据有138G,而验证集有6个G,测试集有12G,如此大的数据,一般的电脑是带不动的,也包括我的电脑,所以我只选择了30类数据来训练,这个时候问题就来了,你只选择了一点数据来训练,那么图像标签怎模板?因为我们用脚本下载下来的图像标签是所有图像的标签,如果我们用所有数据来训练,这个时候就会出现错误could not open or find file,那是因为标签里好多图片都没有,所以会出现这个问题,解决办法:自己做个标签(一行只有路径和标签,要换行),这个时候又会遇到一个问题,图像路径和标签之间用空格分开,而标签后面不能有有任何空格或则\t,那我就自己写个程序,访问文件的内容,把文件内容改成上面的形式(图像路径和标签之间用空格分开,而标签后面不能有有任何空格或则\t)。

2.如果你把刚才做的标签放进去训练,你会看到意想不到的结果,他会认为整个标签只有一张图片路径,这个是怎么回事呢?明明格式跟他一样!其实,我们错了,不信的话,你可以把他原来的标签和你自己做的标签放导入到到excel,你会发现原来的标签excel可以将他们分开,并且换行,而我们自己做的标签则excel分不开,那是什么原因呢? 据我个人认为:应该是标签和下一个路径之间加入了我们看不到的字符,表面上看他们是在一起的,但程序可以将他们分开,例子:原来图片标签:n0146700101.jpeg 0n0146700102.jpeg
0,你可以看到这个例子有两张图片(n0146700101.jpeg  n0146700102.jpeg)及标签(0 0),你可以看到标签0和n0146700102.jpeg连在一起,程序可以将他们分开,但如果我们自己做个标签如上面所示,你会发现程序识别不了,这个是什么原因呢?个人见解是0和n0146700102.jpeg 加入我们看不到的字符,使得程序可以将他们分开,但我们自己做的标签没有。   具体是啥字符,我个人还不知道,如果你知道,请回复我,谢谢!

解决办法:在原来的标签基础上删减。最好是顺序选用。(训练,验证,测试标签都是如此)

3.在解决完标签问题后,后面在create make_imagenet_mean 一般不会遇到问题,如果出现问题;可能是你的路径不对。至少目前我没遇到问题。但前面那个问题我想了好多天怎么去解决?请见谅能力有限。如果你有方法解决,请告诉我们,让大家以后少走点弯路,节约点时间。

这个问题已解决:  就是加入十六进制的0D和0A,中文名叫:换行键,即"\n".其实也不需要那样,直接写个程序,在标签后面加入换行就行,但是自己手动换行不行。

忘记上传自己的代码了。

我的代码如下:

 #include<fstream>

#include<string>

#include<iostream>

using namespace std;

void main()

{

    ifstream infile("F:\\caffe-master\\data\\ilsvrc12\\val2.txt", ios::in);

    ofstream outfile("F:\\caffe-master\\data\\ilsvrc12\\val3.txt", ios::out);

    char a[500];

    int count =1;

    while (!infile.eof())

    {

        

        if (count % 2 != 0)

        {

            infile >> a;

            outfile <<a<<" ";

        }

        else

        {

            infile >> a;

            outfile <<a;

            outfile << "\n";

        }

        count++;

    }

    infile.close();

    outfile.close();

}

这个程序是在vs2013下执行的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  深度学习 caffe