一、深度學習中利用caffe如何訓練自己的模型
作者:圣行
鏈接:
來源:知乎
著作權歸作者所有,轉載請聯(lián)系作者獲得授權。
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);
}
第三步,執(zhí)行test操作:
for (int i = 0; i < 10; i++){
const vector<Blob<float>*>& result = caffe_test_net.ForwardPrefilled();
二、為什么在機器學習中訓練模型時使用GPU的效果比CPU更好
因為機器學習中大部分是運算操作,例如計算特征值,單位化,計算協(xié)方差,最后計算概率等,cpu是用來調度的,而gpu本身就是以運算為己任(因為3d效果都是算出來的),所以各有長短
三、機器學習算法的訓練樣本每次都需要嗎
只有第一次訓練模型的時候需要,
如果將訓練得到的模型保存到文件中,下一次利用模型預測的時候就只需要從文件中加載模型就可以了,而無需再次使用訓練樣本進行訓練。
四、為什么在部分機器學習中訓練模型時使用GPU的效果比CPU更好
Google Cloud Machine Learning是一個管理,可以讓開發(fā)者更易于創(chuàng)建自己的機器學習模型,并且可以基于任何規(guī)模的數據類型運行。 TensorFlow框架現(xiàn)已支持Google多項服務,包括 Google Photos及 Cloud Speech——即圖像識別和語音識別技術。Cloud Machine Learning管理結合TensorFlow,其一大亮點是支持異構設備分布式計算,它能夠在各個上自動運行模型,從中國、單個CPU / GPU到成百上千GPU卡組成的分布式系統(tǒng)。開發(fā)者因此無需把時間花費在處理集群上,而更專注于模型創(chuàng)建。 在TensorFlow框架的支持下上,利用全新的Cloud Machine Learning可以創(chuàng)建并訓練自己的學習模型,并且具有深度學習的能力。由于Google擁有強大的數據庫,其可以支持成千上萬用戶和海量TB數據的全球預測,使得開發(fā)者訓練的模型能夠即插即用——這是新機器學習最強有力的支持,因為這意味著開發(fā)者能夠在短時間內讓自己的應用接觸到全球的用戶。該預測整合了Google云分析系統(tǒng)Cloud Dataflow,允許開發(fā)者訪問Google Cloud Storage和BigQuery上的數據
五、怎樣消除機器學習中的過度擬合
消除機器學習中的過度擬合方法:1.dropout:訓練神經網絡模型時,如果訓練樣本較少,為了防止模型過擬合,Dropout可以作為一種trikc供選擇。2.earlystop結合crossvalidation使用。3.盡可能的擴大trainingdataset,增加訓練集的全面性和數量。