Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
CaffeµÄÉî¶ÈѧϰѵÁ·È«¹ý³Ì
 
×÷Õߣº·ë³¬ À´Ô´£ºinfoq ·¢²¼ÓÚ£º 2017-10-20
  5306  次浏览      29
 

±¾ÎÄΪ´óÊý¾ÝÔÓ̸4ÔÂ20ÈÕ΢ÐÅÉçȺ·ÖÏíÄÚÈÝÕûÀí¡£

½ñÌìµÄÄ¿±êÊÇʹÓÃCaffeÍê³ÉÉî¶ÈѧϰѵÁ·µÄÈ«¹ý³Ì¡£CaffeÊÇÒ»¿îÊ®·ÖÖªÃûµÄÉî¶Èѧϰ¿ò¼Ü£¬ÓɼÓÖÝ´óѧ²®¿ËÀû·ÖУµÄ¼ÖÑïÇ岩ʿÓÚ2013ÄêÔÚGithubÉÏ·¢²¼¡£×ÔÄÇʱÆð£¬CaffeÔÚÑо¿½çºÍ¹¤Òµ½ç¶¼Êܵ½Á˼«´óµÄ¹Ø×¢¡£CaffeµÄʹÓñȽϼòµ¥£¬´úÂëÒ×ÓÚÀ©Õ¹£¬ÔËÐÐËٶȵõ½Á˹¤Òµ½çµÄÈϿɣ¬Í¬Ê±»¹ÓÐÊ®·Ö³ÉÊìµÄÉçÇø¡£

¶ÔÓÚ¸Õ¿ªÊ¼Ñ§Ï°Éî¶ÈѧϰµÄͬѧÀ´Ëµ£¬CaffeÊÇÒ»¿îÊ®·ÖÊ®·ÖÊʺϵĿªÔ´¿ò¼Ü¡£¿ÉÆäËûͬÀàÐ͵Ŀò¼Ü£¬ËüÓÖÒ»¸ö×î´óµÄÌØµã£¬¾ÍÊÇ´úÂëºÍ¿ò¼Ü±È½Ï¼òµ¥£¬ÊʺÏÉîÈëÁ˽â·ÖÎö¡£½ñÌ콫Ҫ½éÉܵÄÄÚÈݶ¼ÊÇCaffeÖгÉÐͺܾõÄÄÚÈÝ£¬Èç½ñ¾ø´ó¶àÊý°æ±¾µÄCaffe¶¼°üº¬ÕâЩ¹¦ÄÜ¡£¹ØÓÚCaffeÏÂÔØºÍ°²×°µÄÄÚÈÝÇë¸÷λ¸ù¾Ý¹Ù·½ÍøÕ¾Ö¸µ¼½øÐÐÏÂÔØºÍ°²×°£¬ÕâÀï¾Í²»ÔÙ׸ÊöÁË¡£

Ò»¸ö³£¹æµÄ¼à¶½Ñ§Ï°ÈÎÎñÖ÷Òª°üº¬ÑµÁ·ÓëÔ¤²âÁ½¸ö´óµÄ²½Ö裬ÕâÀﻹÊÇÒÔCaffeÖÐ×Ô´øµÄÀý×Ó¡ª¡ªMNISTÊý¾Ý¼¯ÊÖдÊý×Öʶ±ðΪÀý£¬À´½éÉÜÒ»ÏÂËü¾ßÌåµÄʹÓ÷½·¨¡£

Èç¹û°ÑÉÏÃæÌáµ½µÄÉî¶ÈѧϰѵÁ·²½Öè·Ö½âµÃ¸üϸÖÂһЩ£¬ÄÇôÕâ¸ö³£¹æÁ÷³Ì½«·Ö³ÉÕ⼸¸ö×Ó²½Ö裺

Êý¾ÝÔ¤´¦Àí£¨½¨Á¢Êý¾Ý¿â£©

ÍøÂç½á¹¹ÓëÄ£ÐÍѵÁ·µÄÅäÖÃ

ѵÁ·ÓëÔÚѵÁ·

ѵÁ·ÈÕÖ¾·ÖÎö

Ô¤²â¼ìÑéÓë·ÖÎö

ÐÔÄܲâÊÔ

ÏÂÃæ¾ÍÀ´Ò»Ò»½éÉÜ¡£

1 Êý¾ÝÔ¤´¦Àí

Ê×ÏÈÊÇѵÁ·Êý¾ÝºÍÔ¤²âÊý¾ÝµÄÔ¤´¦Àí¡£ÕâÀïµÄ¹¤×÷Ò»°ãÊǰѴý·ÖÎöʶ±ðµÄͼÏñ½øÐмòµ¥µÄÔ¤´¦Àí£¬È»ºó±£´æµ½Êý¾Ý¿âÖС£ÎªÊ²Ã´ÒªÍê³ÉÕâÒ»²½¶ø²»ÊÇÖ±½Ó´ÓͼÏñÎļþÖжÁÈ¡Êý¾ÝÄØ£¿ÒòΪʵ¼ÊÈÎÎñÖÐѵÁ·Êý¾ÝµÄÊýÁ¿¿ÉÄܷdz£´ó£¬´ÓͼÏñÎļþÖжÁÈ¡Êý¾Ý²¢½øÐгõʼ»¯µÄЧÂÊÊǷdz£µÍµÄ£¬ËùÒÔºÜÓбØÒª°ÑÊý¾ÝÔ¤Ïȱ£´æÔÚÊý¾Ý¿âÖУ¬À´¼Ó¿ìѵÁ·µÄ½Ú×à¡£

ÒÔϵIJÙ×÷½«È«²¿ÔÚÖÕ¶ËÍê³É¡£µÚÒ»²½Êǽ«Êý¾ÝÏÂÔØµ½±¾µØ£¬ºÃÔÚMNISTµÄÊý¾ÝÁ¿²»Ëã´ó£¬Èç¹û´ó¼ÒµÄÍøÂç»·¾³ºÃ£¬ÕâÒ»²½µÄËÙ¶È»á·Ç³£¿ì¡£Ê×ÏÈÀ´µ½caffeµÄ°²×°¸ùĿ¼¡ª¡ªCAFFE_HOME£¬È»ºóÖ´ÐÐÏÂÃæµÄÃüÁ

cd data/mnist
./get_mnist.sh

³ÌÐòÖ´ÐÐÍê³Éºó£¬Îļþ¼ÐÏÂÓ¦¸Ã»á¶à³öÀ´ËĸöÎļþ£¬ÕâËĸöÎļþ¾ÍÊÇÎÒÃÇÏÂÔØµÄÊý¾ÝÎļþ¡£µÚ¶þ²½ÎÒÃÇÐèÒªµ÷ÓÃexampleÖеÄÊý¾Ý¿â´´½¨³ÌÐò£º

cd $CAFFE_HOME
./examples/mnist/create_mnist.sh

³ÌÐòÖ´ÐÐÍê³Éºó£¬examples/mnistÎļþ¼ÐÏÂÃæ¾Í»á¶à³öÁ½¸öÎļþ¼Ð£¬·Ö±ð±£´æÁËMNISTµÄѵÁ·ºÍ²âÊÔÊý¾Ý¡£ÖµµÃÒ»ÌáµÄÊÇ£¬Êý¾Ý¿âµÄ¸ñʽ¿ÉÒÔͨ¹ýÐ޸Ľű¾µÄBACKEND±äÁ¿À´¸ü»»¡£Ä¿Ç°Êý¾Ý¿âÓÐÁ½ÖÖÖ÷Á÷Ñ¡Ôñ£º

LevelDB

LmDB

ÕâÁ½ÖÖÊý¾Ý¿âÔÚ´æ´¢Êý¾ÝºÍ²Ù×ÝÉÏÓÐһЩ²»Í¬£¬Ê×ÏÈÊÇËüÃǵÄÊý¾Ý×éÖ¯·½Ê½²»Í¬£¬ÕâÊÇLevelDBµÄÄÚÈÝ£º

ÕâÊÇLMDBµÄÄÚÈÝ£º

´Ó½á¹¹¿ÉÒÔ¿´³öLevelDBµÄÎļþ±È½Ï¶à£¬LMDBµÄÎļþ¸üΪ½ô´Õ¡£

Æä´ÎÊÇËüÃǵĶÁÈ¡Êý¾ÝµÄ½Ó¿Ú£¬Ä³Ð©³¡¾°ÐèÒª±éÀúÊý¾Ý¿âÍê³ÉһЩԭʼͼÏñµÄ·ÖÎö´¦Àí£¬Òò´ËÁ˽âËüÃǵÄÊý¾Ý¶ÁÈ¡·½·¨Ò²Ê®·ÖÓбØÒª¡£Ê×ÏÈÊÇLMDB¶ÁÈ¡Êý¾ÝµÄ´úÂ룺

Æä´ÎÊÇLevelDB¶ÁÈ¡µÄ´úÂ룺

×îºó»Øµ½±¾Ð¡½ÚµÄÎÊÌ⣺ΪʲôҪ²ÉÓÃÊý¾Ý¿âµÄ·½Ê½´æ´¢Êý¾Ý¶ø²»ÊÇÖ±½Ó¶ÁȡͼÏñ£¿ÕâÀï¿ÉÒÔ¼òµ¥²âÊÔÒ»ÏÂÓÃMNISTÊý¾Ý¹¹½¨µÄÕâÁ½¸öÊý¾Ý¿â°´Ðò¶ÁÈ¡µÄËÙ¶È£¬ÕâÀïÓÃϵͳº¯Êýtime½øÐмÆÊ±£¬½á¹ûÈçÏ£º

ΪÁ˱ȽÏԭʼͼÏñ¶ÁÈëµÄËÙ¶È£¬ÕâÀォMNISTµÄÊý¾ÝÒÔjpegµÄ¸ñʽ±£´æ³ÉͼÏñ£¬²¢²âÊÔËüµÄ¶ÁȡЧÂÊ£¨ÒÔCaffe pythonʹÓõÄscikit imageΪÀý£©£¬´úÂëÈçÏÂËùʾ£º

×îÖÕµÄʱ¼äÈçÏÂËùʾ£º

ÓÉ´Ë¿ÉÒÔ¿´³ö£¬Ô­Ê¼Í¼ÏñºÍÊý¾Ý¿âÏà±È£¬¶ÁÈ¡Êý¾ÝµÄЧÂʲî¾à»¹ÊÇÂù´óµÄ¡£ËäÈ»ÔÚCaffeѵÁ·ÖÐÊý¾Ý¶ÁÈëÊÇÒì²½Íê³ÉµÄ£¬µ«ÊÇËü»¹ÊDz»Äܹ»Ì«Âý£¬ËùÒÔÕâÒ²ÊÇÔÚѵÁ·Ê±Ñ¡ÔñÊý¾Ý¿âµÄÔ­Òò¡£

ÖÁÓÚÕâÁ½¸öÊý¾Ý¿âÖ®¼äµÄ±È½Ï£¬ÕâÀï¾Í²»ÔÙ¶à×öÁË¡£¸ÐÐËȤµÄ¸÷λ¿ÉÒÔÔÚһЩ´óÐ͵ÄÊý¾Ý¼¯ÉÏ×öһЩʵÑ飬ÄÇÑù¸üÈÝÒ׿´³öÁ½¸öÊý¾Ý¼¯Ö®¼äµÄÇø±ð¡£

2 ÍøÂç½á¹¹ÓëÄ£ÐÍѵÁ·µÄÅäÖÃ

ÉÏÒ»½ÚÍê³ÉÁËÊý¾Ý¿âµÄ´´½¨£¬ÏÂÃæ¾ÍҪΪѵÁ·Ä£ÐÍ×ö×¼±¸ÁË¡£Ò»°ãÀ´ËµCaffe²ÉÓöÁÈëÅäÖÃÎļþµÄ·½Ê½½øÐÐѵÁ·¡£CaffeµÄÅäÖÃÎļþÒ»°ãÓÉÁ½²¿·Ö×é³É£ºsolver.prototxtºÍnet.prototxt£¨ÓÐʱ»áÓжà¸önet.prototxt£©¡£ËüÃÇʵ¼ÊÉ϶ÔÓ¦ÁËCaffeϵͳ¼Ü¹¹ÖÐÁ½¸öÊ®·Ö¹Ø¼üµÄʵÌ塪¡ªÍøÂç½á¹¹NetºÍÇó½âÆ÷Solver¡£ÏÈÀ´¿´¿´Ò»°ãÀ´ËµÏà¶Ô¼ò¶ÌµÄsolver.prototxtµÄÄÚÈÝ£¬ÎªÁË·½±ã´ó¼ÒÀí½â£¬ËùÓÐÅäÖÃÐÅÏ¢¶¼ÒѾ­¼ÓÈëÁË×¢ÊÍ£º

ΪÁË·½±ã´ó¼ÒÀí½â£¬ÕâÀォexamples/mnist/lenet_solver.prototxtÖеÄÄÚÈݽøÐÐÖØÐÂÅÅÐò£¬Õû¸öÅäÖÃÎļþÏ൱ÓڻشðÁËÏÂÃæ¼¸¸öÎÊÌ⣺

ÍøÂç½á¹¹µÄÎļþÔÚÄÄ£¿

ÓÃʲô¼ÆËã×ÊԴѵÁ·£¿CPU»¹ÊÇGPU£¿

ѵÁ·¶à¾Ã£¿ÑµÁ·ºÍ²âÊԵıÈÀýÊÇÈçºÎ°²Åŵģ¬Ê²Ã´Ê±ºòÊä³öЩ¸øÎÒÃÇÇÆÇÆ£¿

ÓÅ»¯µÄѧϰÂÊÔõôÉ趨£¿»¹ÓÐÆäËûµÄÓÅ»¯²ÎÊý¡ª¡ªÈ綯Á¿ºÍÕýÔòÄØ£¿

Ҫʱ¿Ì¼ÇµÃ´æµµ°¡£¬²»È»´óÏÀµÃ´ÓÍ·À´¹ýÁË¡­¡­

½ÓÏÂÀ´¾ÍÊÇnet.prototxtÁË£¬ÕâÀïºöÂÔÁËÿ¸öÍøÂç²ãµÄ²ÎÊýÅäÖã¬Ö»°Ñ±íÊ¾ÍøÂçµÄ»ù±¾½á¹¹ºÍÀàÐÍÅäÖÃչʾ³öÀ´£º

name: "LeNet"
layer {
name: "mnist"
type: "Data"
top: "data"
top: "label"
}
layer {
name: "conv1"
type: "Convolution"
bottom: "data"
top: "conv1"
}
layer {
name: "pool1"
type: "Pooling"
bottom: "conv1"
top: "pool1"
}
layer {
name: "conv2"
type: "Convolution"
bottom: "pool1"
top: "conv2"
}
layer {
name: "pool2"
type: "Pooling"
bottom: "conv2"
top: "pool2"
}
layer {
name: "ip1"
type: "InnerProduct"
bottom: "pool2"
top: "ip1"
}
layer {
name: "relu1"
type: "ReLU"
bottom: "ip1"
top: "ip1"
}
layer {
name: "ip2"
type: "InnerProduct"
bottom: "ip1"
top: "ip2"
}
layer {
name: "loss"
type: "SoftmaxWithLoss"
bottom: "ip2"
bottom: "label"
top: "loss"
}

ÕâÀïֻչʾÁËÍøÂç½á¹¹µÄ»ù´¡ÅäÖã¬Ò²Õ¼ÓÃÁË´óÁ¿µÄƪ·ù¡£Ò»°ãÀ´Ëµ£¬Õâ¸öÎļþÖеÄÄÚÈݳ¬¹ý100Ðж¼ÊÇÔÙ³£¼û²»¹ýµÄÊ¡£¶øÏñ´óÃû¶¦¶¦µÄResNetÍøÂ磬ËüµÄÎļþ³¤¶Èͨ³£ÔÚǧÐÐÒÔÉÏ£¬¸üÊÇÈÃÈËÄÑÒÔÔĶÁ¡£ÄÇôÎÊÌâÀ´ÁË£¬ÄÇô´óµÄÍøÂçÎļþ¶¼ÊÇ¿¿ÈËÖ±½Ó±à¼­³öÀ´µÄô£¿²»Ò»¶¨¡£ÓеÄÈË»á±È½ÏÓÐÄÍÐĵØÒ»µãµãдÍ꣬¶øÓеÄÈËÔò²»»áÔ¸Òâ×öÕâÑùµÄ¿àÁ¦»î¡£Êµ¼ÊÉÏCaffeÌṩÁËÒ»Ì×½Ó¿Ú£¬´ó¼Ò¿ÉÒÔͨ¹ýд´úÂëµÄÐÎʽÉú³ÉÕâ¸öÎļþ¡£ÕâÑùÒ»À´£¬±àдģÐÍÅäÖõŤ×÷Ò²±äµÃ¼òµ¥²»ÉÙ¡£ÏÂÃæÕ¹Ê¾ÁËÒ»¶ÎÉú³ÉLeNetÍøÂç½á¹¹µÄ´úÂ룺

×îÖÕÉú³ÉµÄ½á¹û´ó¼Ò¶¼ÊìÖª£¬ÕâÀï¾Í²»¸ø³öÁË¡£

layer {
name: "data"
type: "Data"
top: "data"
top: "label"
transform_param {
scale: 0.00390625
mirror: false
}
data_param {
source: "123"
batch_size: 128
backend: LMDB
}
}
layer {
name: "conv1"
type: "Convolution"
bottom: "data"
top: "conv1"
convolution_param {
num_output: 20
kernel_size: 5
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
}
}
}
layer {
name: "pool1"
type: "Pooling"
bottom: "conv1"
top: "pool1"
pooling_param {
pool: MAX
kernel_size: 2
stride: 2
}
}
layer {
name: "conv2"
type: "Convolution"
bottom: "pool1"
top: "conv2"
convolution_param {
num_output: 50
kernel_size: 5
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
}
}
}
layer {
name: "pool2"
type: "Pooling"
bottom: "conv2"
top: "pool2"
pooling_param {
pool: MAX
kernel_size: 2
stride: 2
}
}
layer {
name: "ip1"
type: "InnerProduct"
bottom: "pool2"
top: "ip1"
inner_product_param {
num_output: 500
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
}
}
}
layer {
name: "relu1"
type: "ReLU"
bottom: "ip1"
top: "ip1"
}
layer {
name: "ip2"
type: "InnerProduct"
bottom: "ip1"
top: "ip2"
inner_product_param {
num_output: 10
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
}
}
}
layer {
name: "loss"
type: "SoftmaxWithLoss"
bottom: "ip2"
bottom: "label"
top: "loss"
}

´ó¼Ò¿ÉÄܾõµÃÉÏÃæµÄ´úÂ벢ûÓнÚʡ̫¶àƪ·ù£¬Êµ¼ÊÉÏÈç¹û½«ÉÏÃæµÄ´úÂëÄ£¿é»¯×öµÃ¸üºÃЩ£¬Ëü¾Í»á±äµÃ·Ç³£¼ò½à¡£ÕâÀï¾Í²»×öÑÝʾÁË£¬»¶Ó­´ó¼Ò×ÔÐг¢ÊÔ¡£

3 ѵÁ·ÓëÔÙѵÁ·

×¼±¸ºÃÁËÊý¾Ý£¬Ò²È·¶¨ÁËѵÁ·Ïà¹ØµÄÅäÖã¬ÏÂÃæÕýʽ¿ªÊ¼ÑµÁ·¡£ÑµÁ·ÐèÒªÆô¶¯Õâ¸ö½Å±¾£º

È»ºó¾­¹ýÒ»¶Îʱ¼äµÄѵÁ·£¬ÃüÁîÐвúÉúÁË´óÁ¿ÈÕÖ¾£¬ÑµÁ·¹ý³ÌÒ²Ðû¸æÍê³É¡£ÕâʱѵÁ·ºÃµÄÄ£ÐÍĿ¼¶à³öÁËÕ⼸¸öÎļþ£º

ºÜÏÔÈ»£¬Õ⼸¸öÎļþ±£´æÁËѵÁ·¹ý³ÌÖеÄһЩÄÚÈÝ£¬ÄÇôËüÃǶ¼ÊÇ×öʲôµÄÄØ£¿*caffemodel*Îļþ±£´æÁËcaffeÄ£ÐÍÖеIJÎÊý£¬*solverstate*Îļþ±£´æÁËѵÁ·¹ý³ÌÖеÄһЩÖмä½á¹û¡£±£´æ²ÎÊýÕâ¼þÊÂÇéºÜÈÝÒ×ÏëÏ󣬵«ÊDZ£´æÑµÁ·ÖеÄÖмä½á¹û¾ÍÓÐЩ³éÏóÁË¡£solverstateÀïÃæ¾¿¾¹±£´æÁËʲô£¿»Ø´ðÕâ¸öÎÊÌâ¾ÍÐèÒªÕÒµ½solverstateµÄÄÚÈݶ¨Ò壬Õâ¸ö¶¨ÒåÀ´×Ôsrc/caffe/proto/caffe.protoÎļþ£º

´Ó¶¨ÒåÖпÉÒÔºÜÇå³þµÄ¿´³öÆäÄÚÈݵĺ¬Òå¡£ÆäÖÐhistoryÊÇÒ»¸ö±È½ÏÓÐÒâ˼µÄÐÅÏ¢£¬Ëû´æ´¢ÁËÀúÊ·µÄ²ÎÊýÓÅ»¯ÐÅÏ¢¡£Õâ¸öÐÅÏ¢ÓÐʲô×÷ÓÃÄØ£¿ÓÉÓںܶàËã·¨¶¼ÒÀÀµÀúÊ·¸üÐÂÐÅÏ¢£¬Èç¹ûÓÐÒ»¸öÄ£ÐÍѵÁ·ÁËÒ»°ëÍ£Ö¹ÁËÏÂÀ´£¬ÏÖÔÚÏë»ùÓÚ֮ǰѵÁ·µÄ³É¹û¼ÌÐøÑµÁ·£¬ÄÇôÐèÒªÀúÊ·µÄÓÅ»¯ÐÅÏ¢°ïÖú¼ÌÐøÑµÁ·¡£Èç¹ûÄ£ÐÍѵÁ·Í»È»ÖжÏѵÁ·¶øÀúÊ·ÐÅÏ¢ÓÖ¶ªÊ§ÁË£¬ÄÇôģÐÍÖ»ÄÜ´ÓͷѵÁ·¡£ÕâÑùµÄÉî¶Èѧϰ¿ò¼Ü¾Í²»¾ß±¸¡°¶ÏµãѵÁ·¡±µÄ¹¦ÄÜÁË£¬Ö»ÓÐ"ÖØÍ·ÔÙÀ´"µÄ¹¦ÄÜ¡£ÏÖÔڵĴóÐÍÉî¶ÈѧϰģÐͶ¼ÐèÒªºÜ³¤µÄʱ¼äѵÁ·£¬ÓеÄÐèҪѵÁ·ºÃ¼¸Ì죬Èç¹û¿ò¼Ü²»Ìṩ¶ÏµãѵÁ·µÄ¹¦ÄÜ£¬Ò»µ©»úÆ÷³öÏÖÎÊÌâµ¼Ö³ÌÐò±ÀÀ££¬Ä£Ð;Ͳ»µÃ²»ÖØÍ·¿ªÊ¼ÑµÁ·£¬Õâ»á¶Ô¹¤³ÌʦµÄÉíÐÄÔì³É¾Þ´ó´ò»÷¡­¡­ËùÒÔÕâ¸ö´æµµ»úÖÆ¼«´óµØÌá¸ßÁËÄ£ÐÍѵÁ·µÄ¿É¿¿ÐÔ¡£

´ÓÁíÒ»¸ö·½Ã濼ÂÇ£¬Èç¹ûÄ£ÐÍѵÁ·³¹µ×½áÊø£¬ÕâЩÀúÊ·ÐÅÏ¢¾Í±äµÃÎÞÓÃÁË¡£caffemodelÎļþÐèÒª±£´æÏÂÀ´£¬¶øsolverstateÕâ¸öÎļþ¿ÉÒÔ±»Ö±½Ó¶ªÆú¡£Òò´ËÕâÖÖ·ÖÀë´æ´¢µÄ·½Ê½Ìر𷽱ã²Ù×÷¡£

´Ó¸Õ²ÅÌáµ½µÄ¡°¶ÏµãѵÁ·¡±¿ÉÒÔ¿´³ö£¬Éî¶ÈѧϰÆäʵ°üº¬ÁË¡°ÔÙѵÁ·¡±Õâ¸ö¸ÅÄî¡£Ò»°ãÀ´Ëµ¡°ÔÙѵÁ·¡±°üº¬Á½ÖÖģʽ£¬ÆäÖÐÒ»ÖÖ¾ÍÊÇÉÏÃæÌáµ½µÄ¡°¶ÏµãѵÁ·¡±¡£´ÓÇ°ÃæµÄÅäÖÃÎļþÖпÉÒÔ¿´³ö£¬ÑµÁ·µÄ×ܵü´úÂÖÊýÊÇ10000ÂÖ£¬Ã¿ÑµÁ·5000ÂÖ£¬Ä£Ð;ͻᱻ±£´æÒ»´Î¡£Èç¹ûÄ£ÐÍÔÚѵÁ·µÄ¹ý³ÌÖб»Ò»Ð©²»¿É¿¹Á¦´ò¶ÏÁË£¨±È·½Ëµ»úÆ÷¶ÏµçÁË£©£¬ÄÇô´ó¼Ò¿ÉÒÔ´Ó5000ÂÖµü´úʱ±£´æµÄÄ£ÐͺÍÀúÊ·¸üвÎÊý»Ö¸´³öÀ´£¬ÃüÁîÈçÏÂËùʾ£º

ÕâÀï²»·ÁÔÙÉîÈëÒ»µã·ÖÎö¡£ËäȻģÐ͵ÄÀúÊ·¸üÐÂÐÅÏ¢±»±£´æÁËÏÂÀ´£¬µ«µ±Ê±µÄѵÁ·³¡¾°ÕæµÄ±»ÍêÈ«»Ö¸´ÁËô£¿ËƺõûÓУ¬»¹ÓÐÒ»¸öÓ°ÏìѵÁ·µÄ¹Ø¼üÒòËØÃ»Óлָ´¡ª¡ªÊý¾Ý£¬Õâ¸öÊDz»ÈÝÒ×±»ÑµÁ·¹ý³Ì¾«È·¿ØÖƵġ£Ò²¾ÍÊÇ˵£¬Ê×´ÎѵÁ·Ê±µÚ5001ÂÖµü´úѵÁ·µÄÊý¾ÝºÍÏÖÔÚ¡°¶ÏµãѵÁ·¡±µÄÊý¾ÝÊDz»Ò»ÑùµÄ¡£µ«ÊÇÒ»°ãÀ´Ëµ£¬Ö»Òª±£Ö¤Ã¿¸öѵÁ·Åú´Î£¨batch£©ÄÚÊý¾ÝµÄ·Ö²¼Ïà½ü£¬²»»áÓÐÌ«´óµÄ²îÒ죬Á½ÖÖѵÁ·¶¼¿ÉÒÔ³¯×ÅÕýÈ·µÄ·½Ïòǰ½ø£¬ÆäÖдæÔÚµÄ΢С²î¾à¿ÉÒÔºöÂÔ²»¼Æ¡£

µÚ¶þÖÖ¡°ÔÙѵÁ·¡±µÄ·½Ê½ÔòÊÇÓÐÀíÂÛ»ù´¡Ö§³ÅµÄѵÁ·Ä£Ê½¡£Õâ¸öģʽ»áÔÚ֮ǰѵÁ·µÄ»ù´¡ÉÏ£¬¶ÔÄ£Ðͽṹ×öÒ»¶¨µÄÐ޸ģ¬È»ºóÓ¦Óõ½ÆäËûµÄÄ£ÐÍÖС£ÕâÖÖѧϰ·½Ê½±»³Æ×÷Ç¨ÒÆÑ§Ï°£¨Transfer Learning£©¡£ÕâÀï¾ÙÒ»¸ö¼òµ¥µÄÀý×Ó£¬ÔÚµ±Ç°Ä£ÐÍѵÁ·Íê³ÉÖ®ºó£¬Ä£ÐͲÎÊý½«±»Ö±½Ó¸³Öµµ½Ò»¸öеÄÄ£ÐÍÉÏ£¬È»ºóÈÃÕâ¸öÐÂÄ£ÐÍÖØÍ·¿ªÊ¼ÑµÁ·¡£Õâ¸ö²Ù×÷¿ÉÒÔͨ¹ýÏÂÃæÕâ¸öÃüÁîÍê³É£º

Ö´ÐÐÃüÁîºóCaffe»áÏñÍù³£Ò»Ñù¿ªÊ¼ÑµÁ·²¢Êä³ö´óÁ¿ÈÕÖ¾£¬µ«ÊÇÔÚÍê³É³õʼ»¯Ö®ºó£¬Ëü»áÊä³öÕâÑùÒ»ÌõÈÕÖ¾£º

ÕâÌõÈÕÖ¾¾ÍÊÇÔÚ¸æËßÎÒÃÇ£¬µ±Ç°µÄѵÁ·ÊÇÔÚÕâ¸ö·¾¶ÏµÄÄ£ÐÍÉϽøÐÐ"Finetune"¡£

4 ѵÁ·ÈÕÖ¾·ÖÎö

ѵÁ·¹ý³ÌÖÐCaffe²úÉúÁË´óÁ¿µÄÈÕÖ¾£¬ÕâЩÈÕÖ¾°üº¬ºÜ¶àѵÁ·¹ý³ÌµÄÐÅÏ¢£¬·Ç³£ºÜÖµµÃ·ÖÎö¡£·ÖÎöµÄÄÚÈÝÓкܶ࣬ÆäÖÐÖ®Ò»¾ÍÊÇ·ÖÎöѵÁ·¹ý³ÌÖÐÄ¿±êº¯ÊýlossµÄ±ä»¯ÇúÏß¡£ÔÚÕâ¸öÀý×ÓÖУ¬¿ÉÒÔ·ÖÎöËæ×ŵü´úÂÖÊý²»¶ÏÔö¼Ó£¬Softmax LossµÄ±ä»¯Çé¿ö¡£Ê×ÏȽ«ÑµÁ·¹ý³ÌµÄÈÕÖ¾ÐÅÏ¢±£´æÏÂÀ´£¬±È·½ËµÈÕÖ¾ÐÅÏ¢±»±£´æµ½mnist.logÎļþÖУ¬È»ºóÓÃÏÂÃæµÄÃüÁî¿ÉÒÔ½«IterationºÍLossµÄÐÅÏ¢ÌáÈ¡²¢±£´æÏÂÀ´£º

ÌáÈ¡ºóµÄÐÅÏ¢¿ÉÒÔÓÃÁíÒ»¸ö½Å±¾Íê³ÉLossÇúÏߵĻæÍ¼¹¤×÷£º

import matplotlib.pyplot as plt
x = []
y = []
with open('loss_data') as f:
for line in f:
sps = line[:-1].split()
x.append(int(sps[0]))
y.append(float(sps[1]))
plt.plot(x,y)
plt.show()

½á¹ûÈçͼ1Ëùʾ£¬¿É¼ûLossºÜ¿ì¾Í½µµ½Á˺ܵ͵ĵط½£¬Ä£Ð͵ÄѵÁ·ËٶȺܿ졣Õâ¸öÓÅÒìµÄ±íÏÖ¿ÉÒÔ˵Ã÷ºÜ¶àÎÊÌ⣬µ«ÕâÀï¾Í²»×ö¹ý¶àµØ·ÖÎöÁË¡£

³ý´ËÖ®Í⣬ÈÕÖ¾ÖÐÊä³öµÄÆäËûÐÅÏ¢Ò²¿ÉÒÔ±»¹Û²ì·ÖÎö£¬±È·½Ëµ²âÊÔ»·½ÚµÄ¾«È·¶ÈµÈ£¬ËüÃÇÒ²¿ÉÒÔͨ¹ýÉÏÃæµÄ·½·¨½âÎö³öÀ´¡£ÓÉÓÚ²ÉÓõķ½·¨»ù±¾Ïàͬ£¬ÕâÀïÓв»È¥×¸ÊöÁË£¬¸÷λ¿ÉÒÔ×ÔÐг¢ÊÔ¡£

Õý³£ÑµÁ·¹ý³ÌÖУ¬ÈÕÖ¾ÀïÖ»»áÏÔʾÿһ×éµü´úºóÄ£ÐÍѵÁ·µÄÕûÌåÐÅÏ¢£¬Èç¹ûÏëÒªÁ˽â¸ü¶àÏêϸµÄÐÅÏ¢£¬¾ÍÒª½«solver.prototxtÖеĵ÷ÊÔÐÅÏ¢´ò¿ª£¬ÕâÑù¾Í¿ÉÒÔ»ñµÃ¸ü¶àÓÐÓõÄÐÅÏ¢¹©´ó¼Ò·ÖÎö£º

debug_info:true

µ÷ÊÔÐÅÏ¢´ò¿ªºó£¬Ã¿Ò»×éµü´úºóÿһ²ãÍøÂçµÄǰÏòºóÏò¼ÆËã¹ý³ÌÖеÄÏêϸÐÅÏ¢¶¼¿ÉÒÔ±»¹Û²âµ½¡£ÕâÀï½ØÈ¡ÆäÖÐÒ»×éµü´úºóµÄÈÕÖ¾ÐÅϢչʾ³öÀ´£º

Èç¹ûÏëÒª¶ÔÍøÂçµÄ±íÏÖ×ö¸ü¶àµØÁ˽⣬ÄÇô·ÖÎöÕâЩÄÚÈݱز»¿ÉÉÙ¡£

5 Ô¤²â¼ìÑéÓë·ÖÎö

Ä£ÐÍÍê³ÉѵÁ·ºó£¬¾ÍÒª¶ÔËüµÄѵÁ·±íÏÖ×öÑéÖ¤£¬¿´¿´ËüÔÚÆäËû²âÊÔÊý¾Ý¼¯ÉϵÄÕýÈ·ÐÔ¡£CaffeÌṩÁËÁíÍâÒ»¸ö¹¦ÄÜÓÃÓÚÊä³ö²âÊԵĽá¹û¡£ÒÔϾÍÊÇËüµÄ½Å±¾£º

½Å±¾µÄÊä³ö½á¹ûÈçÏÂËùʾ£º

³ýÁËÍê³É²âÊÔµÄÑéÖ¤£¬ÓÐʱ´ó¼Ò»¹ÐèÒªÖªµÀÄ£Ð͸ü¶àµÄÔËËãϸ½Ú£¬Õâ¾ÍÐèÒªÉîÈëÄ£ÐÍÄÚ²¿È¥¹Û²ìÄ£ÐͲúÉúµÄÖмä½á¹û¡£Ê¹ÓÃCaffeÌṩµÄ½è¿Ú£¬Ã¿Ò»²ãÍøÂçÊä³öµÄÖмä½á¹û¶¼¿ÉÒÔÓÿÉÊÓ»¯µÄ·½·¨ÏÔʾ³öÀ´£¬¹©´ó¼Ò¹Û²â¡¢·ÖÎöÄ£ÐÍÿһ²ãµÄ×÷Óá£ÆäÖеĴúÂëÈçÏÂËùʾ£º

Ö´ÐÐÉÏÃæµÄ´úÂë¾Í¿ÉÒÔÉú³ÉÈçͼ2µ½Í¼5Õ⼸ÕÅͼÏñ£¬ËüÃǸ÷´ú±íÒ»¸öÄ£ÐͲãµÄÊä³öͼÏñ£º

ÕâÒ»×éͼչʾÁ˾í»ýÉñ¾­ÍøÂçÊÇÈçºÎ°ÑÒ»¸öÊý×Öת±ä³ÉÌØÕ÷±àÂëµÄ¡£ÕâÑùµÄ·½·¨ËäÈ»¿ÉÒԺܺõؿ´µ½Ä£ÐÍÄÚ²¿µÄ±íÏÖ£¬±È·½Ëµconv1µÄ½á¹ûͼÖÐÓеÄÌáÈ¡ÁËÊý×ֵı߽磬ÓеÄÃ÷È·ÁËǰ¾°ÏñËØËùÔÚµÄλÖã¬Õâ¸öÏÖÏóºÍµÚ3ÕÂÖоÙÀýµÄ¾í»ýЧ¹ûÓм¸·ÖÏàËÆ¡£µ«Êǵ½ÁËconv2µÄ½á¹ûͼÖУ¬Ä£Ð͵ÄÊä³ö¾Í±äµÃÈÃÈËÓÐЩ¿´²»¶®ÁË¡£Êµ¼ÊÉÏÏëÒªÕæÕý¿´¶®ÕâЩͼÏñÏë±í´ïµÄÄÚÈÝȷʵÓÐЩÀ§Äѵġ£

6 ÐÔÄܲâÊÔ

³ýÁËÔÚ²âÊÔÊý¾ÝÉϵÄ׼ȷÂÊ£¬Ä£Ð͵ÄÔËÐÐʱ¼äÒ²·Ç³£ÖµµÃ¹ØÐÄ¡£Èç¹ûÄ£Ð͵ÄÔËÐÐʱ¼äÌ«³¤£¬ÉõÖÁµ½Á˲»¿ÉÓõij̶ȣ¬ÄÇô¼´Ê¹Ëü¾«¶ÈºÜ¸ßҲûÓÐʵ¼ÊÒâÒå¡£²âÊÔʱ¼äµÄ½Å±¾ÈçÏÂËùʾ£º

Caffe»áÕý³£µÄÍê³ÉǰÏòºóÏòµÄ¼ÆË㣬²¢¼Ç¼ÆäÖеÄʱ¼ä¡£ÒÔÏÂÊÇʹһ´Î²âÊÔ½á¹ûµÄʱ¼ä¼Ç¼£º

¿ÉÒÔ¿´³öÔÚÐÔÄܲâÊԵĹý³ÌÖУ¬LenetÄ£ÐÍÖ»ÐèÒª²»µ½1ºÁÃëµÄʱ¼ä¾Í¿ÉÒÔÍê³ÉǰÏò¼ÆË㣬Õâ¸öËÙ¶È»¹ÊǺܿìµÄ¡£µ±È»ÕâÊÇÔÚÒ»¸öÏà¶Ô²»´íµÄGPUÉÏÔËÐеģ¬ÄÇôÈç¹ûÔÚÒ»¸öÌõ¼þ²îµÄGPUÉÏÔËÐУ¬½á¹ûÈçºÎÄØ£¿

¿ÉÒÔ¿´µ½²»Í¬µÄ»·¾³¶ÔÓÚÄ£ÐÍÔËÐеÄʱ¼äÓ°ÏìºÜ´ó¡£

ÒÔÉϾÍÊÇÄ£ÐÍѵÁ·µÄÒ»¸öÍêÕû¹ý³Ì¡£ÏÖÔÚÏàÐÅ´ó¼Ò¶ÔÉî¶ÈѧϰģÐ͵ÄѵÁ·ºÍʹÓÃÓÐÁË»ù±¾µÄÁ˽⡣ʵ¼ÊÉÏ¿´µ½ÕâÀï´ó¼ÒÉõÖÁ¿ÉÒÔÈÓÏÂÊéÈ¥Ç××Ôʵ¼ù²»Í¬Ä£Ð͵ÄЧ¹û£¬¿ªÊ¼Éî¶ÈѧϰµÄʵս֮Âá£

×îºó·ÅÒ»ÕÅCaffeÔ´´úÂëµÄ¼Ü¹¹Í¼£¬ÒÔ·½±ã´ó¼ÒÑо¿CaffeÔ´Âë¡£

´ðÒÉ»·½Ú

Q1. CaffeºÍÆäËûÉî¶Èѧϰ¿ò¶È(ÈçMxNet, TensorflowµÈ)±ÈÓÐʲôÓÅȱµã£¿

·ë³¬£ºCaffe×÷Ϊ¡°ÀÏÒ»´ú¡±µÄÉî¶Èѧϰ¿ò¼Ü£¬´Ó¼Ü¹¹ÉÏÀ´ËµÓÐÒ»¸öºÜ´óµÄ²»Í¬Ö®´¦£¬ÄǾÍÊÇËü²»ÊDzÉÓ÷ûºÅÔËËãµÄ·½Ê½½øÐÐÉè¼ÆµÄ£¬ÕâÑù´øÀ´ÁËһЩÓŵãºÍȱµã¡£

ÓŵãÊÇCaffeÔÚ¼ÆËã¹ý³ÌÖУ¬ÔÚÄÚ´æÊ¹ÓúÍÔËËãËÙ¶È·½Ãæ¶¼ÓÐÒ»¶¨µÄÓÅÊÆ£¬ÄÚ´æÊ¹ÓýÏС£¬ËÙ¶ÈÒ²±È½ÏÓб£Ö¤£¬Ïà¶Ô¶øÑÔ£¬»ùÓÚ·ûºÅ¼ÆËãµÄ¿ò¼ÜÔÚÕâÁ½·½Ãæ»áÉÔÈõһЩ¡£

ȱµãÊÇCaffeÄ£ÐÍÁé»îÐÔ½ÏÈõ¡£¶ÔÓÚһЩгöÏÖµÄÍøÂçÄ£Ðͽṹ£¬CaffeÊÊÅäÆðÀ´ÐèҪһЩ¼¼ÇÉ£¬ÐèÒªÒ»¶¨µÄ¾­Ñ飬¶øMXNet£¬TensorFlowÕâÑùµÄÄ£Ð;ͼòµ¥ºÜ¶à¡£

ËùÒÔÒ»°ãÀ´Ëµ£¬MXNet¡¢Tensorflow¸üÊʺÏʵÑé»·¾³£¬Caffe±È½ÏÊʺϹ¤Òµ½çÏßÉÏʹÓá£ÆäËû·½Ã棬ÏÖÔÚCaffeµÄÉçÇøÏà±ÈTensorflow¿ÉÄÜÒªÈõЩ£¬µ«ÒÀÈ»ÊǷdz£Ö÷Á÷µÄ¿ªÔ´¿ò¼Ü¡£

Q2. ÈçºÎ¿´´ýfacebookз¢²¼µÄcaffe2Éî¶Èѧϰ¿ò¼Ü£¿Ëü±ÈÏÖÓеÄcaffeÓÐʲôÑùµÄ¸Ä½ø£¿¸úÏÖÔÚµÄTensorFlowÏà±ÈÈçºÎ£¿

·ë³¬£ºcaffe2×î½ü±È½ÏÈÈ£¬Ö®Ç°ÎÒûÓж࿴¹ý£¬ÕâÁ½Ì켯Öп´ÁË¿´£¬´ó¸ÅÓÐÒÔÏÂһЩ¸ÐÊÜ£º

ÓÐÁËCaffe2ºÍCaffeÏà±È±ä»¯´óô£¿prototxtºÍcaffemodelº£¶·¿ÉÒÔÓ㬻ù±¾ÉÏËãÏòϼæÈÝ£¬CaffeµÄһЩ֪ʶ¼¼ÄÜ»¹¿ÉÒÔÓá£

Caffe2µÄ²Ù×÷·½Ê½£¿´Ó¹Ù·½ÎĵµÖп´£¬Caffe2µÄpython½Ó¿ÚÓÐÁ˺ܴóµÄ½ø²½¡£¸ø³öµÄʾÀýÖ÷ÒªÊÇÓÃpython´úÂëÃèÊöÍøÂç½á¹¹£¨ºÍtfºÜÏñ£¬Ò²ÓÐcheckpointµÈ¸ÅÄ->Éú³ÉÄÚ´æ°æµÄÍøÂçÄ£ÐÍ->¹¹½¨netºÍÏà¹Ø»·¾³->Ö´ÐдúÂ룬ËùÒÔ³ýÁËÇ°ÃæµÄpython½Ó¿Ú£¬ºóÃæµÄÁ÷³ÌºÍcaffe1ºÜÏñ¡£

ÄÚ²¿¼Ü¹¹Éϵı仯£¿Caffe2½è¼øÁËTensorflowµÄһЩ¸ÅÄ½«¹ýÈ¥µÄNet²ð³ÉÁ½²¿·Ö£ºÊý¾ÝºÍÍøÂçͼ¡£Êý¾Ý²¿·ÖÊÇWorkspace£¬ºÍtfµÄsessionºÜÏñ£¬ÁíÍâÒ»²¿·ÖÊÇÍøÂçͼnet¡£ÁíÍ⣬Caffe2ÄÚ²¿Ò²½«Layer¸Ä³ÉÁËOp¡£

ÏÖÔÚ¾ÍÉÏÊÖCaffe2£¿¼¸ºõÓеãÔ磬Ŀǰ¹Ù·½¸ø³öµÄÄÚÈÝ»¹±È½ÏÉÙ£¬´ó¼ÒÒ²²»±ØÌ«Ðﱡ£

×îºó˵˵Caffe2¹Ù·½¸ø³öµÄһЩÁÁµã¹¦ÄÜ£º¿çƽ̨¡£ÕâÒ»´ÎµÄCaffe2¿ÉÒÔÔÚ¸÷ÖÖ²»Í¬µÄƽ̨Éϲ¿ÊðÔËÐУ¬ÕâËãÊÇÒ»¸öÁÁµã¡£

Q3. caffeeºÍpytorch¶¼ÊÇfacebookÔÚÍÆ£¬ÄÇÕâÁ½¸ö¿ò¼ÜÓÐʲô²»Í¬ÄØ£¿

·ë³¬£º»ù±¾ÉÏʵÑé»·¾³ÏÂÖ÷ÒªÓÃpytorch,ÏßÉÏ»·¾³ÓÃCaffe¡£

Q4. caffeÓÐûÓÐÌṩһЩpreTrainingµÄһЩģÐÍ ·½±ã¸ü¿ìµØµ÷ÓÃÍøÂçÄØ£¿

·ë³¬£ºCaffeÓÐ×Ô¼ºµÄModel zoo£¬ÏêÇé¿ÉÒÔÉÏÈ¥¿´Ò»¿´¡£

Q5. caffeÔÚÒÆ¶¯¶Ëʵ¼ùµÄʵ¼Ê°¸ÀýÂð£¿

·ë³¬£º¾ÍÎÒÉí±ßÓÐÏÞµÄÁ˽⣬һЩ¹«Ë¾×öÒÆ¶¯¶Ë³¢ÊÔ»¹ÊÇʹÓÃÁËTensorflow£¬²¢Ã»ÓÐÓÃCaffe¡£

   
5306 ´Îä¯ÀÀ       29
Ïà¹ØÎÄÕÂ

»ùÓÚͼ¾í»ýÍøÂçµÄͼÉî¶Èѧϰ
×Ô¶¯¼ÝÊ»ÖеÄ3DÄ¿±ê¼ì²â
¹¤Òµ»úÆ÷ÈË¿ØÖÆÏµÍ³¼Ü¹¹½éÉÜ
ÏîĿʵս£ºÈçºÎ¹¹½¨ÖªÊ¶Í¼Æ×
 
Ïà¹ØÎĵµ

5GÈ˹¤ÖÇÄÜÎïÁªÍøµÄµäÐÍÓ¦ÓÃ
Éî¶ÈѧϰÔÚ×Ô¶¯¼ÝÊ»ÖеÄÓ¦ÓÃ
ͼÉñ¾­ÍøÂçÔÚ½»²æÑ§¿ÆÁìÓòµÄÓ¦ÓÃÑо¿
ÎÞÈË»úϵͳԭÀí
Ïà¹Ø¿Î³Ì

È˹¤ÖÇÄÜ¡¢»úÆ÷ѧϰ&TensorFlow
»úÆ÷ÈËÈí¼þ¿ª·¢¼¼Êõ
È˹¤ÖÇÄÜ£¬»úÆ÷ѧϰºÍÉî¶Èѧϰ
ͼÏñ´¦ÀíËã·¨·½·¨Óëʵ¼ù