日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

Caffe使用step by step:caffe框架下的基本操作和分析

發(fā)布時(shí)間:2025/7/25 89 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Caffe使用step by step:caffe框架下的基本操作和分析 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Caffe使用step by step:caffe框架下的基本操作和分析

時(shí)間:2015-10-16 11:40:09????? 閱讀:808????? 評(píng)論:0????? 收藏:0??????[點(diǎn)我收藏+]

標(biāo)簽:

  caffe雖然已經(jīng)安裝了快一個(gè)月了,但是caffe使用進(jìn)展比較緩慢,果然如劉老師說的那樣,搭建起來caffe框架環(huán)境比較簡(jiǎn)單,但是完整的從數(shù)據(jù)準(zhǔn)備->模型訓(xùn)練->調(diào)參數(shù)->合理結(jié)果需要一個(gè)比較長(zhǎng)的過程,這個(gè)過程中你需要對(duì)caffe中很多東西,細(xì)節(jié)進(jìn)行深入的理解,這樣才可以知道為什么能有這樣的結(jié)果,在訓(xùn)練或者fine-tuning時(shí)知道針對(duì)調(diào)整的方法。下面針對(duì)caffe中的使用進(jìn)行講解。

  在使用過程中,caffe官網(wǎng)上提供了詳細(xì)的使用說明,如果感覺仍然存在一些困難,可以使用谷歌或百度搜索自己遇到的問題和想要了解的過程進(jìn)行搜索學(xué)習(xí)。

?

一、Caffe模型基本組成

想要訓(xùn)練一個(gè)caffe模型,需要配置兩個(gè)文件,包含兩個(gè)部分:網(wǎng)絡(luò)模型,參數(shù)配置,分別對(duì)應(yīng)***.prototxt , ****_solver.prototxt文件

Caffe模型文件講解:

  • 預(yù)處理圖像的leveldb構(gòu)建?
    輸入:一批圖像和label (2和3)?
    輸出:leveldb (4)?
    指令里包含如下信息:
  • conver_imageset (構(gòu)建leveldb的可運(yùn)行程序)
  • train/ (此目錄放處理的jpg或者其他格式的圖像)
  • label.txt (圖像文件名及其label信息)
  • 輸出的leveldb文件夾的名字
  • CPU/GPU (指定是在cpu上還是在gpu上運(yùn)行code)
  • CNN網(wǎng)絡(luò)配置文件

  • Imagenet_solver.prototxt (包含全局參數(shù)的配置的文件)
  • Imagenet.prototxt (包含訓(xùn)練網(wǎng)絡(luò)的配置的文件)
  • Imagenet_val.prototxt (包含測(cè)試網(wǎng)絡(luò)的配置文件)

    ?

  • 網(wǎng)絡(luò)模型:即定義你網(wǎng)絡(luò)的每一層,下圖是用caffe中 /python/draw_net.py畫出的的siamese的模型,非常清晰

    層包含:(以LeNet為例)

    DATA:一般包括訓(xùn)練數(shù)據(jù)測(cè)試數(shù)據(jù)層兩種類型。 一般指輸入層,包含source:數(shù)據(jù)路徑,批處理數(shù)據(jù)大小batch_size,scale表示數(shù)據(jù)表示在[0,1],0.00390625即 1/255

    訓(xùn)練數(shù)據(jù)層:

    layer {name: "mnist"type: "Data" top: "data" top: "label" include { phase: TRAIN } transform_param { scale: 0.00390625 } data_param { source: "examples/mnist/mnist_train_lmdb" batch_size: 64 backend: LMDB } }

    測(cè)試數(shù)據(jù)層:

    layer {name: "mnist"type: "Data"top: "data"top: "label"include {phase: TEST}transform_param {scale: 0.00390625}data_param {source: "examples/mnist/mnist_test_lmdb"batch_size: 100backend: LMDB} }

    ?

    CONVOLUATION:卷積層,blobs_lr:1 , blobs_lr:2分別表示weight 及bias更新時(shí)的學(xué)習(xí)率,這里權(quán)重的學(xué)習(xí)率為solver.prototxt文件中定義的學(xué)習(xí)率真,bias的學(xué)習(xí)率真是權(quán)重學(xué)習(xí)率的2倍,這樣一般會(huì)得到很好的收斂速度。

    num_output表示濾波的個(gè)數(shù),kernelsize表示濾波的大小,stride表示步長(zhǎng),weight_filter表示濾波的類型

    layer {name: "conv1"type: "Convolution"bottom: "data"top: "conv1"param {lr_mult: 1 //weight學(xué)習(xí)率}param {lr_mult: 2 //bias學(xué)習(xí)率,一般為weight的兩倍}convolution_param {num_output: 20 //濾波器個(gè)數(shù)kernel_size: 5stride: 1 //步長(zhǎng)weight_filler {type: "xavier"}bias_filler {type: "constant"}} }

    ?

    POOLING: 池化層

    layer {name: "pool1"type: "Pooling"bottom: "conv1"top: "pool1"pooling_param {pool: MAXkernel_size: 2 stride: 2} }

    ?

    INNER_PRODUCT: 其實(shí)表示全連接,不要被名字誤導(dǎo)

    layer {name: "ip1"type: "InnerProduct"bottom: "pool2"top: "ip1"param {lr_mult: 1}param {lr_mult: 2}inner_product_param {num_output: 500 weight_filler {type: "xavier"}bias_filler {type: "constant"}} }

    ?

    RELU:激活函數(shù),非線性變化層 max( 0 ,x ),一般與CONVOLUTION層成對(duì)出現(xiàn)

    layer {name: "relu1"type: "ReLU"bottom: "ip1"top: "ip1" }

    ?

    SOFTMAX:?

    layer {name: "loss"type: "SoftmaxWithLoss"bottom: "ip2"bottom: "label"top: "loss" }

    ?

    參數(shù)配置文件:

    ***_solver.prototxt文件定義一些模型訓(xùn)練過程中需要到的參數(shù),比較學(xué)習(xí)率,權(quán)重衰減系數(shù),迭代次數(shù),使用GPU還是CPU等等

    # The train/test net protocol buffer definition net: "examples/mnist/lenet_train_test.prototxt"# test_iter specifies how many forward passes the test should carry out. # In the case of MNIST, we have test batch size 100 and 100 test iterations, # covering the full 10,000 testing images. test_iter: 100# Carry out testing every 500 training iterations. test_interval: 500# The base learning rate, momentum and the weight decay of the network. base_lr: 0.01 momentum: 0.9 weight_decay: 0.0005# The learning rate policy lr_policy: "inv" gamma: 0.0001 power: 0.75# Display every 100 iterations display: 100# The maximum number of iterations max_iter: 10000# snapshot intermediate results snapshot: 5000 snapshot_prefix: "examples/mnist/lenet"# solver mode: CPU or GPU solver_mode: GPU device_id: 0 #在cmdcaffe接口下,GPU序號(hào)從0開始,如果有一個(gè)GPU,則device_id:0

    ?

    訓(xùn)練出的模型被存為***.caffemodel,可供以后使用。

    二、使用caffe訓(xùn)練模型包含以下幾個(gè)步驟:

  • 準(zhǔn)備數(shù)據(jù)
  • 重建lmdb/leveldb文件,caffe支持三種數(shù)據(jù)格式輸入:images, levelda, lmdb
  • 定義name.prototxt , name_solver.prototxt文件
  • 訓(xùn)練模型
  • 三、caffe中比較有用且基礎(chǔ)的接口(cmdcaffe)

    注:在使用cmdcaffe時(shí),需要默認(rèn)切換到Caffe_Root文件夾下

    1、訓(xùn)練模型,以mnist為例子

    ./build/tools/caffe train --solver=examples/mnist/lenet_solver.prototxt

    注:caffe官網(wǎng)上給的例子不能直接執(zhí)行,需要使用上述命令才可以使用tools下的caffe接口,因?yàn)閏affe默認(rèn)都需要從根目錄下面執(zhí)行文件。

    2、觀察各個(gè)階段的運(yùn)行時(shí)間可以使用

    ./build/tools/caffe time --model=models/bvlc_reference_caffenet/train_val.prototxt

    3、使用已有模型提取特征

    ./build/tools/extract_features.bin models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel examples/_temp/imagenet_val.prototxt conv5 examples/_temp/features 10

    ?conv5表示提取第五個(gè)卷積層的特征, examples/_temp/feaures表示存放結(jié)果的目錄(這里的目錄需要提前構(gòu)建好)

    4、對(duì)已有模型進(jìn)行find-tuning,比如我們現(xiàn)在有一個(gè)1000類的分類模型,但目前我們的需求僅是20類,此時(shí)我們不需要重新訓(xùn)練一個(gè)模型,只需要將最后一層換成20類的softmax層,然后使用已有數(shù)據(jù)對(duì)原模型進(jìn)行fine-tuning即可

      在很多時(shí)候,使用Caffe框架學(xué)習(xí)深度學(xué)習(xí)模型時(shí),從ImageNet或者其他大型數(shù)據(jù)集從頭開始訓(xùn)練獲得一個(gè)fine-tuing合適的模型難度太大,這時(shí)候最好的情況,就是在已經(jīng)訓(xùn)練好的模型上面來進(jìn)行fine-tuning,通過這些過程可以加深自己對(duì)深度學(xué)習(xí),以及對(duì)caffe使用的了解和熟悉,以方便自己在后續(xù)提出自己的模型,自己進(jìn)行模型訓(xùn)練和fine-tuning的過程。

    已經(jīng)訓(xùn)練好的caffe模型可以在git的caffe項(xiàng)目中下載,比較經(jīng)典的模型有:AlexNet.caffemodel , LeNet.caffemodel , RCnn.caffemodel,其他的大家可以在caffe的git官網(wǎng)上面下載。

    使用自己的數(shù)據(jù)集對(duì)已經(jīng)訓(xùn)練好的模型進(jìn)行fine-tuning的操作(使用cmdcaffe接口來進(jìn)行):

    ./build/tools/caffe train -solver models/finetune_flickr_style/solver.prototxt -weights models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel -gpu 0

    第一個(gè)參數(shù):選擇好caffe模塊

    train:選取train函數(shù)

    后面接具體的參數(shù),分別為配置命令,配置文件路徑,fine-tuning命令,fine-tuning依賴的基準(zhǔn)模型文件目錄,選用的訓(xùn)練方式:gpu或者cpu,使用cpu時(shí)可以默認(rèn)不寫

    ?

    注:fine-tuning的過程與訓(xùn)練過程類似,只是在調(diào)用caffe接口時(shí)的命令不同,因此在fine-tuning之前,仍然需要按照訓(xùn)練流程準(zhǔn)備數(shù)據(jù)。

    下載數(shù)據(jù)->生成trainset和testset->生成db->設(shè)置好路徑->fine-tuning。

    ?

    5、還有一個(gè)是python下面的接口,draw_net.py可以根據(jù).prototxt文件將模式用圖示的方法表示出來,博文開始的模型圖即用該接口所繪

    ./python/draw_net.py ./examples/siamese/mnist_siamese.prototxt ./examples/siamese/mnist_siamese.png

    使用該接口進(jìn)行網(wǎng)絡(luò)的繪制示例化

    ?第一個(gè)參數(shù)為模型文件,第二個(gè)參數(shù)為所繪模型圖的保存地址

    ?

    深度學(xué)習(xí)中batch_size的作用:

    在深度學(xué)習(xí)訓(xùn)練過程中,有兩種訓(xùn)練方法,一種意識(shí)batch ,一種是stochastic訓(xùn)練方法

    ?

    solver:使用forward和backward接口來更新參數(shù),并迭代對(duì)loss進(jìn)行降低(定義的優(yōu)化方法,有stochastic gradient descent,SGD;Adaptive gradient ,NAG和Scaffolding)

    solver作用:(指定優(yōu)化方法)

    1.可以逐步對(duì)網(wǎng)絡(luò)尋優(yōu),創(chuàng)建訓(xùn)練得到的網(wǎng)絡(luò),并對(duì)測(cè)試網(wǎng)絡(luò)進(jìn)行評(píng)價(jià);

    2.通過調(diào)用forward和backward來對(duì)網(wǎng)絡(luò)參數(shù)進(jìn)行迭代尋優(yōu);

    3.周期性更新網(wǎng)絡(luò);

    4.記錄網(wǎng)絡(luò)訓(xùn)練中間過程,尋優(yōu)過程中記錄狀態(tài)

    總結(jié)

    以上是生活随笔為你收集整理的Caffe使用step by step:caffe框架下的基本操作和分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。