深度学习中利用caffe如何训练自己的模型

一、深度学习中利用caffe如何训练自己的模型

作者:圣行

链接:

来源:知乎

著作权归作者所有,转载请联系作者获得授权。

matlab 和python没有用过。如果是习惯用opencv的话,可以使用memory_data,请参考这个链接里的例子:C++ Image Classification with memory_data_param · Issue #1443 · BVLC/caffe · GitHub

给一个具体点的例子吧(不知道贴代码是不是有点不合知乎气质?),总共分三步:

第一步,构造网络:

enum Phase p = TEST;

Net<float> caffe_test_net(argv[1],p);

caffe_test_net.CopyTrainedLayersFrom(argv[2]);

第二步,构造数据并加入到网络输入层:

//create the input data

vector<Mat> md_images;

vector<int> md_labels;

//////operations for the input data

Mat original = imread(images\\lena_gray.png); //随便的图片,没有实用意义,可忽略

Mat *sub_img = new Mat;

for (int i = 0; i < 10; i++){

original(Range(i, i + 28), Range(i, i + 28)).copyTo(*sub_img); // 28x28,可以直接用lenet

md_images.push_back(*sub_img);

md_labels.push_back(0);

}

第三步,执行test操作:

for (int i = 0; i < 10; i++){

const vector<Blob<float>*>& result = caffe_test_net.ForwardPrefilled();

二、为什么在机器学习中训练模型时使用GPU的效果比CPU更好

因为机器学习中大部分是运算操作,例如计算特征值,单位化,计算协方差,最后计算概率等,cpu是用来调度的,而gpu本身就是以运算为己任(因为3d效果都是算出来的),所以各有长短

三、机器学习算法的训练样本每次都需要吗

只有第一次训练模型的时候需要,

如果将训练得到的模型保存到文件中,下一次利用模型预测的时候就只需要从文件中加载模型就可以了,而无需再次使用训练样本进行训练。

四、为什么在部分机器学习中训练模型时使用GPU的效果比CPU更好

Google Cloud Machine Learning是一个管理,可以让开发者更易于创建自己的机器学习模型,并且可以基于任何规模的数据类型运行。 TensorFlow框架现已支持Google多项服务,包括 Google Photos及 Cloud Speech——即图像识别和语音识别技术。Cloud Machine Learning管理结合TensorFlow,其一大亮点是支持异构设备分布式计算,它能够在各个上自动运行模型,从中国、单个CPU / GPU到成百上千GPU卡组成的分布式系统。开发者因此无需把时间花费在处理集群上,而更专注于模型创建。 在TensorFlow框架的支持下上,利用全新的Cloud Machine Learning可以创建并训练自己的学习模型,并且具有深度学习的能力。由于Google拥有强大的数据库,其可以支持成千上万用户和海量TB数据的全球预测,使得开发者训练的模型能够即插即用——这是新机器学习最强有力的支持,因为这意味着开发者能够在短时间内让自己的应用接触到全球的用户。该预测整合了Google云分析系统Cloud Dataflow,允许开发者访问Google Cloud Storage和BigQuery上的数据

五、怎样消除机器学习中的过度拟合

消除机器学习中的过度拟合方法:1.dropout:训练神经网络模型时,如果训练样本较少,为了防止模型过拟合,Dropout可以作为一种trikc供选择。2.earlystop结合crossvalidation使用。3.尽可能的扩大trainingdataset,增加训练集的全面性和数量。