Éî¶ÈѧϰÒòÆä¸ß׼ȷÂʼ°Í¨ÓÃÐÔ£¬³ÉΪ»úÆ÷ѧϰÖÐ×îÊܹØ×¢µÄÁìÓò¡£ÕâÖÖËã·¨ÔÚ2011¡ª2012ÄêÆÚ¼ä³öÏÖ£¬²¢³¬¹ýÁ˺ܶྺÕù¶ÔÊÖ¡£×ʼ£¬Éî¶ÈѧϰÔÚÒôƵ¼°Í¼Ïñʶ±ð·½ÃæÈ¡µÃÁ˳ɹ¦¡£´ËÍ⣬Ïñ»úÆ÷·ÒëÖ®ÀàµÄ×ÔÈ»ÓïÑÔ´¦Àí»òÕ߻ͼҲÄÜʹÓÃÉî¶ÈѧϰËã·¨À´Íê³É¡£Éî¶ÈѧϰÊÇ×Ô1980ÄêÒÔÀ´¾Í¿ªÊ¼±»Ê¹ÓõÄÒ»ÖÖÉñ¾ÍøÂç¡£Éñ¾ÍøÂç±»¿´×÷ÄܽøÐÐÆÕÊʽüËÆ£¨universal
approximation£©µÄÒ»ÖÖ»úÆ÷¡£»»¾ä»°Ëµ£¬ÕâÖÖÍøÂçÄÜÄ£·ÂÈÎºÎÆäËûº¯Êý¡£ÀýÈ磬Éî¶ÈѧϰËã·¨ÄÜ´´½¨Ò»¸öʶ±ð¶¯ÎïͼƬµÄº¯Êý£º¸øÒ»ÕŶ¯ÎïµÄͼƬ£¬ËüÄÜ·Ö±æ³öͼƬÉϵ͝ÎïÊÇһֻ軹ÊÇÒ»Ö»¹·¡£Éî¶Èѧϰ¿ÉÒÔ¿´×÷ÊÇ×éºÏÁËÐí¶àÉñ¾ÍøÂçµÄÒ»ÖÖÉî¶È½á¹¹¡£
ÓëÆäËûÒÑÓеĻúÆ÷ѧϰËã·¨Ïà±È£¬Éî¶ÈѧϰÐèÒª´óÁ¿²ÎÊý¼°ÑµÁ·Êý¾Ý¡£ÕâÒ²ÊÇÎÒÃǽéÉÜÄÜÔÚSparkÉÏÔËÐеÄÉî¶Èѧϰ¿ò¼ÜµÄÔÒò¡£ÒªÏëÔÚÆóÒµ»·¾³ÖÐÎȶ¨µØ½øÐÐÉî¶ÈѧϰµÄѵÁ·£¬±ØÐëÒªÓÐÒ»¸ö¿É¿¿¶ø¿ìËٵķֲ¼Ê½ÒýÇæ¡£
Spark±»ÊÓΪĿǰ×îÊʺÏÔËÐÐÉî¶ÈѧϰËã·¨µÄƽ̨£¬ÊÇÒòΪ£º
1.»ùÓÚÄÚ´æµÄ´¦Àí¼Ü¹¹¶ÔÓÚʹÓûúÆ÷ѧϰµÄµü´ú¼ÆËã£¬ÌØ±ðÊÇÉî¶Èѧϰ£¬Ê®·ÖÊʺϡ£
2.SparkµÄ¼¸¸öÉú̬ϵͳÈçMLlib¼°Tachyon¶ÔÓÚ¿ª·¢Éî¶ÈѧϰģÐͺÜÓÐÓá£
±¾ÎÄÎÒÃǽ«½éÉÜһЩSparkÄÜÓõÄÉî¶Èѧϰ¿ò¼Ü¡£ÕâЩ¿ò¼ÜºÍÉî¶ÈѧϰһÑù£¬¶¼ÊDZȽÏеĿ⡣ºÜ¿ÉÄÜÄãÔÚʹÓÃËüÃǵĹý³ÌÖÐÓöµ½Ò»Ð©bug»òÕßȱÉÙһЩ²Ù×÷¹¤¾ß£¬µ«ÊDZ¨¸æÎÊÌ⣨issue£©¼°·¢ËͲ¹¶¡½«»áʹËü¸ü¼Ó³ÉÊì¡£
H2O
H2OÊÇÓÃh2o.ai¿ª·¢µÄ¾ßÓпÉÀ©Õ¹ÐԵĻúÆ÷ѧϰ¿ò¼Ü£¬Ëü²»ÏÞÓÚÉî¶Èѧϰ¡£H2OÖ§³ÖÐí¶àAPI£¨ÀýÈ磬R¡¢Python¡¢ScalaºÍJava£©¡£µ±È»ËüÊÇ¿ªÔ´Èí¼þ£¬ËùÒÔÒªÑо¿ËüµÄ´úÂë¼°Ëã·¨Ò²ºÜÈÝÒס£H2O¿ò¼ÜÖ§³ÖËùÓг£¼ûµÄÊý¾Ý¿â¼°ÎļþÀàÐÍ£¬¿ÉÒÔÇáËɽ«Ä£Ð͵¼³öΪ¸÷ÖÖÀàÐ͵Ĵ洢¡£Éî¶ÈѧϰËã·¨ÊÇÔÚÁíÒ»¸ö½Ð×÷sparkling-waterµÄ¿âÖÐʵÏֵģ¨http://h2o.ai/product/sparkling-water/£©¡£ËüÖ÷ÒªÓÉh2o.ai¿ª·¢¡£ÒªÔËÐÐsparkling-water£¬ÐèҪʹÓÃSpark
1.3»òÒÔÉϵİ汾¡£
°²×°
1£®Ê×ÏÈÐèÒª´Óh2oÍøÕ¾ÏÂÔØ×îеÄsparking-water¡£
http://h2o-release.s3.amazonaws.com/sparkling-water/rel-1.3/1/index.html£©
|
2£®°ÑËüÖ¸ÏòSparkµÄ°²×°Ä¿Â¼¡£
$
export Spark_HOME=/path/to/your/spark |
3£®Æô¶¯sparkling-shell£¬Õâ¸ö½Ó¿ÚÓëspark-shellÀàËÆ¡£
$
cd ~/Downloads
$ unzip Sparkling-water-1.3.1.zip
$ cd Sparkling-water-1.3.1
$ bin/Sparkling-shell |
sparkling-waterÔ´ÂëÖаüº¬¼¸¸öÀý×Ó¡£²»ÐÒµÄÊÇ£¬ÓÐЩÀý×ÓÔÚSpark
1.5.2°æ±¾ÉÏÎÞ·¨Õý³£ÔËÐС£Éî¶ÈѧϰµÄdemoÒ²ÓÐÏàͬµÄÎÊÌâ¡£ÄãµÃµÈ´ýÕâЩÎÊÌâ±»½â¾ö£¬»òÕß×Ô¼ºÐ´¼¸¸öÄÜÔÚSparkÔËÐеIJ¹¶¡¡£
deeplearning4j
deeplearning4jÊÇÓÉSkymind¿ª·¢µÄ£¬SkymindÊÇÒ»¼ÒÖÂÁ¦ÓÚΪÆóÒµ½øÐÐÉÌÒµ»¯Éî¶ÈѧϰµÄ¹«Ë¾¡£deeplearning4j¿ò¼ÜÊÇ´´½¨À´ÔÚHadoop¼°SparkÉÏÔËÐеġ£Õâ¸öÉè¼ÆÓÃÓÚÉÌÒµ»·¾³¶ø²»ÊÇÐí¶àÉî¶Èѧϰ¿ò¼Ü¼°¿âĿǰËù´óÁ¿Ó¦ÓõÄÑо¿ÁìÓò¡£SkymindÊÇÖ÷ÒªµÄÖ§³ÖÕߣ¬µ«deeplearning4jÊÇ¿ªÔ´Èí¼þ£¬Òò´ËÒ²»¶Ó´ó¼ÒÌá½»²¹¶¡¡£deeplearning4j¿ò¼ÜÖÐʵÏÖÁËÈçÏÂËã·¨£º
1.ÊÜÏÞ²£¶û×ÈÂü»ú£¨Restricted Boltzmann Machine£©
2.¾í»ýÉñ¾ÍøÂ磨Convolutional Neural Network£©
3.Ñ»·Éñ¾ÍøÂ磨Recurrent Neural Network£©
4.µÝ¹é×Ô±àÂëÆ÷£¨Recursive Autoencoder£©
5.Éî¶ÈÐÅÄîÍøÂ磨Deep-Belief Network£©
6.Éî¶È×Ô±àÂëÆ÷£¨Deep Autoencoder£©
7.ջʽ½µÔë×Ô±àÂ루Stacked Denoising Autoencoder£©
ÕâÀïҪעÒâµÄÊÇ£¬ÕâЩģÐÍÄÜÔÚϸÁ£¶È¼¶±ð½øÐÐÅäÖá£Äã¿ÉÒÔÉèÖÃÒþ²ØµÄ²ãÊý¡¢Ã¿¸öÉñ¾ÔªµÄ¼¤»îº¯ÊýÒÔ¼°µü´úµÄ´ÎÊý¡£deeplearning4jÌṩÁ˲»Í¬ÖÖÀàµÄÍøÂçʵÏÖ¼°Áé»îµÄÄ£ÐͲÎÊý¡£SkymindÒ²¿ª·¢ÁËÐí¶à¹¤¾ß£¬¶ÔÓÚ¸üÎȶ¨µØÔËÐлúÆ÷ѧϰËã·¨ºÜÓаïÖú¡£ÏÂÃæÁгöÁËÆäÖеÄһЩ¹¤¾ß¡£
Canova £¨https://github.com/deeplearning4j/Canoba£©ÊÇÒ»¸öÏòÁ¿¿â¡£»úÆ÷ѧϰËã·¨ÄÜÒÔÏòÁ¿¸ñʽ´¦ÀíËùÓÐÊý¾Ý¡£ËùÓеÄͼƬ¡¢ÒôƵ¼°Îı¾Êý¾Ý±ØÐëÓÃijÖÖ·½·¨×ª»»ÎªÏòÁ¿¡£ËäȻѵÁ·»úÆ÷ѧϰģÐÍÊÇÊ®·Ö³£¼ûµÄ¹¤×÷£¬µ«Ëü»áÖØÐÂÔìÂÖ×Ó»¹»áÒýÆðbug¡£CanovaÄÜΪÄã×öÕâÖÖת»»¡£Canovaµ±Ç°Ö§³ÖµÄÊäÈëÊý¾Ý¸ñʽΪ£º
¨C CSV
¨CÔʼÎı¾¸ñʽ£¨ÍÆÎÄ¡¢Îĵµ£©
¨CͼÏñ£¨Í¼Æ¬¡¢Í¼»£©
¨C¶¨ÖÆÎļþ¸ñʽ£¨ÀýÈçMNIST£©
1.ÓÉÓÚCanovaÖ÷ÒªÊÇÓÃJava±àдµÄ£¬ËùÒÔËüÄÜÔËÐÐÔÚËùÓеÄJVMƽ̨ÉÏ¡£Òò´Ë£¬¿ÉÒÔÔÚSpark¼¯ÈºÉÏʹÓÃËü¡£¼´Ê¹Äã²»×ö»úÆ÷ѧϰ£¬Canova¶ÔÄãµÄ»úÆ÷ѧϰÈÎÎñ¿ÉÄÜÒ²»áÓÐËùñÔÒæ¡£
2.nd4j£¨https://github.com/deeplearning4j/nd4j£©ÓеãÏñÊÇÒ»¸önumpy£¬PythonÖеÄSciPy¹¤¾ß¡£´Ë¹¤¾ßÌṩÁËÏßÐÔ´úÊý¡¢ÏòÁ¿¼ÆËã¼°²Ù×ÝÖ®ÀàµÄ¿ÆÑ§¼ÆËã¡£ËüÒ²ÊÇÓÃJava±àдµÄ¡£Äã¿ÉÒÔ¸ù¾Ý×Ô¼ºµÄʹÓó¡¾°À´´îÅäʹÓÃÕâЩ¹¤¾ß¡£ÐèҪעÒâµÄÒ»µãÊÇ£¬nd4jÖ§³ÖGPU¹¦ÄÜ¡£ÓÉÓÚÏÖ´ú¼ÆËãÓ²¼þ»¹ÔÚ²»¶Ï·¢Õ¹£¬ÓÐÍû´ïµ½¸ü¿ìËٵļÆËã¡£
3.dl4j-spark-ml £¨https://github.com/deeplearning4j/dl4j-spark-ml£©ÊÇÒ»¸öSpark°ü£¬Ê¹ÄãÄÜÔÚSparkÉÏÇáËÉÔËÐÐdeeplearning4j¡£Ê¹ÓÃÕâ¸ö°ü£¬¾ÍÄÜÇáËÉÔÚSparkÉϼ¯³Édeeplearning4j£¬ÒòΪËüÒѾ±»ÉÏ´«µ½ÁËSpark°üµÄ¹«¹²´úÂë¿â£¨http://spark-packages.org/package/deeplearning4j/dl4j-Spark-ml£©¡£
Òò´Ë£¬Èç¹ûÄãÒªÔÚSparkÉÏʹÓÃdeeplearning4j£¬ÎÒÃÇÍÆ¼öͨ¹ýdl4j-spark-ml°üÀ´ÊµÏÖ¡£ÓëÍù³£Ò»Ñù£¬±ØÐëÏÂÔØ»ò×Ô¼º±àÒëSparkÔ´Âë¡£ÕâÀï¶ÔSpark°æ±¾Ã»ÓÐÌØ±ðÒªÇ󣬾ÍËãʹÓÃ×îÔçµÄ°æ±¾Ò²¿ÉÒÔ¡£deeplearning4jÏîĿ׼±¸ÁËÑùÀý´æ´¢¿â¡£ÒªÔÚSparkÉÏʹÓÃdeeplearning4j£¬dl4j-Spark-ml-examplesÊǿɲο¼µÄ×î¼ÑʾÀý£¨https://
github.com/deeplearning4j/dl4j-Spark-ml-examples£©¡£ÏÂÃæÁгöÈçºÎÏÂÔØ¼°±àÒëÕâ¸ö´úÂë¿â¡£
$
git clone git@github.com:deeplearning4j/dl4j-spark-mlexamples.git
$ cd dl4j-Spark-ml-examples
$ mvn clean package -DSpark.version=1.5.2 \
-DHadoop.version=2.6.0 |
±àÒëÀàλÓÚtargetĿ¼Ï£¬µ«ÊÇ¿ÉÒÔͨ¹ýbin/run-example½Å±¾ÔËÐÐÕâЩÀý×Ó¡£µ±Ç°ÓÐÈýÖÖÀàÐ͵ÄÀý×Ó£º
1.ml.JavaIrisClassfication¡ª¡ªð°Î²»¨£¨iris
flower£©Êý¾Ý¼¯·ÖÀà¡£
2.ml.JavaLfwClassfication¡ª¡ªLFWÈËÁ³Êý¾Ý¿â·ÖÀà¡£
3.ml.JavaMnistClassfication¡ª¡ªMNISTÊÖдÊý¾Ý·ÖÀà¡£
ÎÒÃÇÑ¡ÔñµÚ3¸öÀý×Ó£¬¶ÔMNISTÊÖдÊý¾Ý¼¯ÔËÐзÖÀàÄ£Ð͵ÄѵÁ·¡£ÔÚÔËÐÐÕâ¸öʾÀý֮ǰ£¬ÐèÒª´ÓMNISTÕ¾µãÏÂÔØÑµÁ·Êý¾Ý£¨http://yann.lecun.com/exdb/
mnist/£©¡£»òÕߣ¬Äã¿ÉÒÔʹÓÃÏÂÃæµÄÃüÁîÏÂÔØ£º
##
ÏÂÔØÊÖдÊý¾ÝµÄͼÏñ
$ wget http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz
$ gunzip train-images-idx3-ubyte
## ÏÂÔØÓëÉÏÊöͼÏñ¶ÔÓ¦µÄ±êÇ©
$ wget http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz
$ gunzip train-labels-idx1-ubyte
And the put the two files on data direcotry
under dj4j-spark-ml-examples.
$ mv train-images-idx3-ubyte \
/path/to/dl4j-spark-ml-examples/data
$ mv train-labels-idx1-ubyte \
/path/to/dj4j-spark-ml-examples/data |
²î²»¶à¿ÉÒÔ¿ªÊ¼ÔËÐÐѵÁ·½ø³ÌÁË¡£ÄãÐèҪעÒâµÄ×îºóÒ»µãÊÇSpark
executor¼°driverµÄÄÚ´æ´óС£¬ÒòΪ MNISTÊý¾Ý¼¯ºÍËüµÄѵÁ·Ä£Ðͽ«»áºÜ´ó¡£ËüÃÇÒªÓõ½´óÁ¿Äڴ棬Òò´ËÎÒÃǽ¨ÒéÄãÌáǰÐÞ¸Äbin/run-example½Å±¾ÖÐÉèÖõÄÄÚ´æ´óС¡£¿ÉÒÔͨ¹ýÈçÏÂÃüÁîÐÞ¸Äbin/run-example½Å±¾µÄ×îºóÒ»ÐУº
exec
spark-submit \
--packages "deeplearning4j:dl4j-spark-ml:0.4-rc0"
\
--master $EXAMPLE_MASTER \
--class $EXAMPLE_CLASS \
--driver-memory 8G \ # <- Changed from 1G
--executor-memory 8G \ # <- Changed from
4G
"$SPARK_EXAMPLES_JAR" \
"$@" |
ÏÖÔÚ¿ªÊ¼ÑµÁ·£º
$
MASTER=local[4] bin/run-example ml.JavaMnistClassfication |
ΪÁËÖ¸¶¨±¾µØSparkµÄmasterÅäÖã¬ÎÒÃÇÒѾÔÚbin/run-example½Å±¾µÄÇ°ÃæÉèÖÃÁËMASTER»·¾³±äÁ¿¡£ÕâÖÖѵÁ·ÐèÒª»¨Ò»Ð©Ê±¼ä£¬ÓÉÄãµÄ»·¾³¼°»úÆ÷¹æ¸ñ¾ö¶¨¡£Õâ¸öÀý×ÓÔËÐÐÁËÒ»ÖÖ½Ð×÷¡°¾í»ýÉñ¾ÍøÂ硱µÄÉñ¾ÍøÂç¡£Æä²ÎÊýϸ½ÚÊÇͨ¹ýMultiLayerConfigurationÀàÉèÖõġ£ÓÉÓÚdeeplearning4jÓÐÒ»¸öJava½Ó¿Ú£¬¾ÍËãÄ㲻ϰ¹ßSparkµÄScalaÓïÑÔҲû¹ØÏµ£¬ËüÊǺÜÈÝÒ×ÒýÈëµÄ¡£ÏÂÃæ¼òµ¥½âÊÍÒ»ÏÂÕâ¸öÀý×ÓÖеľí»ýÉñ¾ÍøÂç²ÎÊý¡£
1.seed¡ª¡ª´ËÉñ¾ÍøÂç»áʹÓÃÏñ³õÊ¼ÍøÂç²ÎÊýÕâÑùµÄËæ»ú²ÎÊý£¬Õâ¸öÖÖ×Ó¾ÍÓÃÓÚ²úÉúÕâЩ²ÎÊý¡£ÓÐÁËÕâ¸öÖÖ×Ó²ÎÊý£¬ÔÚ¿ª·¢»úÆ÷ѧϰģÐ͵Ĺý³ÌÖиüÈÝÒ×½øÐвâÊÔÓëµ÷ÊÔ¡£
2.batchSize¡ª¡ªÏñµÝ¶ÈϽµÖ®ÀàµÄµü´úËã·¨£¬ÔÚ¸üÐÂÄ£ÐÍ֮ǰ»á»ã×ÜһЩ¸üÐÂÖµ£¬batchSizeÖ¸¶¨½øÐиüÐÂÖµ¼ÆËãµÄÑù±¾Êý¡£
3.iterations¡ª¡ªÓÉÒ»¸öµü´ú½ø³Ì±£³ÖÄ£ÐͲÎÊýµÄ¸üС£Õâ¸ö²ÎÊý¾ö¶¨Á˴˵ü´ú´¦ÀíµÄ´ÎÊý¡£Í¨³£À´Ëµ£¬µü´úÔ½³¤£¬ÊÕÁ²µÄ¸ÅÂÊÔ½¸ß¡£
4.optimizationAlgo¡ª¡ªÔËÐÐǰÊöµÄµü´ú½ø³Ì£¬±ØÐëÓõ½¼¸ÖÖ·½·¨¡£Ëæ»úÌݶÈϽµ£¨Stochastic
Gradient
Descent£¬SGD£©ÊÇĿǰΪֹ×îÏȽøµÄ·½·¨£¬ÕâÖÖ·½·¨Ïà¶ÔÀ´½²²»»áÂäÈë¾Ö²¿×îСֵ£¬»¹ÄܳÖÐøËÑË÷È«¾Ö×îСֵ¡£
5.layer¡ª¡ªËüÊÇÉî¶ÈѧϰËã·¨µÄºËÐÄÅäÖá£Õâ¸öÉî¶ÈѧϰÉñ¾ÍøÂçÓм¸¸öÃûΪlayerµÄÍøÂç×é¡£Õâ¸ö²ÎÊý¾ö¶¨ÁËÔÚÿһ²ãÖÐʹÓÃÄÄÖÖÀàÐ͵IJ㡣ÀýÈ磬ÔÚ¾í»ýÉñ¾ÍøÂçµÄ°¸ÀýÖУ¬ConvolutionLayer±»ÓÃÓÚ´ÓÊäÈëµÄͼÏñÖÐÌáÈ¡³öÌØÕ÷¡£Õâ¸ö²ãÄÜѧϰһ¸ö¸ø¶¨µÄͼƬÓÐÄÄÖÖÀàÐ͵ÄÌØÕ÷¡£ÔÚÒ»¿ªÊ¼¾Í·ÅÖÃÕâ¸ö²ã£¬½«¸ÄÉÆÕû¸öÉñ¾ÍøÂçÔ¤²âµÄ¾«È·ÐÔ¡£Ã¿¸ö²ãÒ²ÄÜÓøø¶¨µÄ²ÎÊý½øÐÐÅäÖá£
new
ConvolutionLayer.Builder(10, 10)
.nIn(nChannels) // ÊäÈëÔªËØµÄÊýÄ¿
.nOut(6) // Êä³öÔªËØµÄÊýÄ¿
.weightInit(WeightInit.DISTRIBUTION)
// ²ÎÊý¾ØÕóµÄ³õʼ»¯·½·¨
.activation("sigmoid") // ¼¤»îº¯ÊýµÄÀàÐÍ
*build()) |

ÉÏͼչÏÖÁËÉñ¾ÍøÂçµÄͨÓýṹ¡£ÓÉÓÚConvolutionalLayerÒ²ÊÇÒ»ÖÖÉñ¾ÍøÂ磬Á½ÖÖÍøÂçµÄ²¿¼þ»ù±¾ÉÏÊÇÏàͬµÄ¡£Éñ¾ÍøÂçÓÐÒ»¸öÊäÈ루x£©¼°Êä³ö£¨y£©¡£ËüÃǶ¼ÊÇÏòÁ¿¸ñʽµÄÊý¾Ý¡£ÔÚÉÏͼÖУ¬ÊäÈëΪһ¸öËÄάÏòÁ¿£¬¶øÊä³öÒ²ÊÇÒ»¸öËÄάÏòÁ¿¡£Êä³öÏòÁ¿yÊÇÔõÑù¼ÆËã³öÀ´µÄÄØ£¿Ã¿²ã¶¼ÓÐÒ»¸ö²ÎÊý¾ØÕó¡£ÔÚ±¾ÀýÖУ¬ËüÃÇÓÃW±íʾ¡£xÓëWÏà³ËµÃµ½ÏÂÒ»¸öÏòÁ¿¡£ÎªÁËÔöÇ¿Õâ¸öÄ£Ð͵ıí´ï£¬Õâ¸öÏòÁ¿±»´«¸øÄ³¸ö·ÇÏßÐÔ¼¤»îº¯Êý£¨¦Ò£©£¬ÀýÈçÂß¼sigmoidº¯Êý£¨logistic
sigmoid function£©¡¢Softmaxº¯Êý¡£Ê¹ÓÃÕâ¸ö·ÇÏßÐÔº¯Êý£¬Éñ¾ÍøÂç¾ÍÄܱƽüÈÎÒâÀàÐ͵ĺ¯Êý¡£È»ºóÓÃzÓëÁíÒ»¸ö²ÎÊý¾ØÕóWÏà³Ë£¬²¢ÔÙ´ÎÓ¦Óü¤»îº¯Êý¦Ò
¡£
Äã¿ÉÒÔ¿´µ½ConvolutionLayerµÄÿ¸öÅäÖá£nIn¼°nOutÊÇÊäÈëÏòÁ¿vector(x)¼°Êä³öÏòÁ¿vector(z)µÄά¶È¡£activationÊÇÕâ¸ö²ãµÄ¼¤»îº¯Êý£¬ÓÉÂß¼sigmoidº¯ÊýÓëÐÞÕýÏßÐÔµ¥ÔªËùÑ¡Ôñ¡£¸ù¾ÝÄãµÄÎÊÌ⣬ÊäÈë¼°Êä³öµÄά¶ÈÄܱ»Á¢¼´È·¶¨¡£ÆäËû²ÎÊýÓ¦µ±Í¨¹ýÍø¸ñËÑË÷À´ÓÅ»¯£¬ÕâÒ»µã½«ÔÚºóÃæ½²Êö¡£
ÿһ²ã£¨layer£©µÄÑ¡ÔñÎÒÃÇ×Ô¼º³£³£ÊǺÜÄѾö¶¨µÄ¡£ÕâÐèÒªÁ˽âһЩ֪ʶ£¬¶øÇÒ¶ÔÒª½â¾öµÄÌØ¶¨ÎÊÌâÒªÓÐÒ»¶¨µÄÑо¿¡£deeplearning4jÏîĿҲÌṩÁËÒ»·Ý½éÉÜÐÔÎĵµ£¨http://deeplearning4j.org/convolutionalnets.html£©¡£ËäÈ»Àí½âÕâ·ÝÎĵµÐèÒªÒ»µãÊýѧ¼°ÏßÐÔ´úÊý֪ʶ£¬µ«ËüÈÔÈ»ÊÇÃèÊö¾í»ýÉñ¾ÍøÂ繤×÷ÔÀíµÄ×î¼òµ¥µÄÎĵµ¡£
1.backprop¡ª¡ª·´Ïò´«²¥£¨backpropagation£©ÊÇĿǰÓÃÓÚ¸üÐÂÄ£ÐͲÎÊý£¨W£©×îÏȽøµÄ·½·¨¡£Òò´Ë£¬Õâ¸ö²ÎÊýÓ¦µ±×ÜÊÇtrue¡£
2.pretrain¡ª¡ªÓÉÓÚÓÐԤѵÁ·£¨pretraining£©£¬¶à²ãÍøÂçÄÜ´ÓÊäÈëÊý¾ÝÌáÈ¡³öÌØÕ÷£¬»ñµÃ¾¹ýÓÅ»¯µÄ³õʼ²ÎÊý¡£Ò²ÍƼö°ÑËüÉèΪtrue¡£
ÔÚÕâÀïÎÒÃÇÎÞ·¨ÃèÊö»úÆ÷ѧϰµÄÈ«²¿Ï¸½Ú¡£µ«ÊÇͨ³£À´Ëµ£¬ÕâЩËã·¨Ö÷ÒªÓÃÓÚͼÏñʶ±ð¡¢Îı¾´¦Àí¼°À¬»øÓʼþ¹ýÂ˵ȳ¡¾°¡£deeplearning4jµÄ¹Ù·½Õ¾µãÉÏ£¨http://deeplearning4j.org£©²»½öÓжÔÈçºÎdeeplearning4jµÄ½éÉÜ£¬Ò²ÓжÔÉî¶ÈѧϰµÄÒ»°ãÌÖÂÛ£¬Ä㻹ÄÜѧµ½Ç°Ñصļ¼ÊõÓë¸ÅÄî¡£
SparkNet
SparkNetÓɼÓÖÝ´óѧ²®¿ËÀû·ÖУAMPʵÑéÊÒÓÚ2015Äê11Ô·¢²¼¡£¶øSpark×îÔç¾ÍÊÇÓÉAMPʵÑéÊÒ¿ª·¢µÄ¡£Òò´Ë£¬ËµSparkNet
ÊÇ¡°ÔËÐÐÔÚSparkÉϵĹٷ½»úÆ÷ѧϰ¿â¡±Ò»µã¶ùÒ²²»Îª¹ý¡£´Ë¿âÌṩÁ˶ÁÈ¡RDDµÄ½Ó¿Ú£¬ÒÔ¼°¼æÈÝÉî¶Èѧϰ¿ò¼ÜCaffe£¨http://caffe.berkeleyvision.org/£©µÄ½Ó¿Ú¡£SparkNetͨ¹ý²ÉÓÃËæ»úÌݶÈϽµ£¨Stochastic
Gradient Descent£©»ñµÃÁ˼òµ¥µÄ²¢ÐÐģʽ¡£SparkNet jobÄÜͨ¹ýSpark-submitÌá½»¡£Äã¿ÉÒÔºÜÇáËɵØÊ¹ÓÃÕâ¸öп⡣
SparkNetµÄ¼Ü¹¹ºÜ¼òµ¥¡£SparkNet¸ºÔð·Ö²¼Ê½´¦Àí£¬¶øºËÐĵÄѧϰ¹ý³ÌÔòίÍиøCaffe¿ò¼Ü¡£SparkNetͨ¹ýJava
native·ÃÎÊCaffee¿ò¼ÜÌṩµÄC API¡£CaffeeÊÇÓÃC++ʵÏֵģ¬CaffeµÄC°ü×°Æ÷дÔÚSparkNetµÄlibcaffeĿ¼Ï¡£ËùÒÔSparkNetµÄÕûÌå´úÂë¿âÏà¶Ô½ÏС¡£Java´úÂ루CaffeLibrary.java£©½øÒ»²½°ü×°ÁËÕâ¸ö¿â¡£ÎªÁËÔÚScalaÊÀ½çÀïʹÓÃCaffeLibrary£¬Caffe»¹ÌṩÁËCaffeNet¡£ÏÂͼչÏÖÁËCaffeNetµÄ²ã¼¶¡£

Èç¹ûÄãÊìϤScala£¬ÄÇô¿ª·¢SparkNetµÄÓ¦ÓóÌÐòʱֻÐèÒª¿¼ÂÇCaffeNet¡£¶øÇÒÄãÒ²¿ÉÒÔʹÓÃSpark
RDD¡£ËüÊÇͨ¹ýÒ»¸öJavaDataLayer C++´úÂëµÄ°ü×°Æ÷À´ÊµÏֵġ£³ý´ËÖ®Í⣬SparkNetÄܼÓÔØCaffe¸ñʽµÄÄ£ÐÍÎļþ¡£Õâ¸öÀ©Õ¹Í¨³£ÊÇͨ¹ý.prototxtÀ´ÉèÖõģº
val
netParameter
= ProtoLoader.loadNetPrototxt(sparkNetHome
+ "your-caffemodel.prototxt") |
Ìæ»»Ä£Ð͵ÄÊäÈ룬Äã¿ÉÒÔÔÚSparkÉÏѵÁ·×Ô¼ºµÄÊý¾Ý¡£SparkNet»¹ÌṩÁËʵÓóÌÐò£º
val
newNetParameter =
ProtoLoader.replaceDataLayers(netParameter,
trainBatchSize, testBatchSize,
numChannels, height, width) |
¹ËÃû˼Ò壬ÿ¸ö²ÎÊýµÄº¬Ò嶨ÒåÁËÿ¸ö½×¶ÎµÄÅúÁ¿´óСºÍÊäÈë´óС£¨ÑµÁ·¡¢²âÊԵȣ©¡£ÕâЩ²ÎÊýµÄϸ½Ú¶¼¿ÉÒÔÔÚCaffe¹Ù·½ÎĵµÖнøÐÐÈ·ÈÏ£¨http://caffe.
berkeleyvision.org/tutorial/net_layer_blob.html£©¡£»»¾ä»°Ëµ£¬Ê¹ÓÃSparkNet£¬Äã¾Í¿ÉÒÔÔÚSparkÉÏͨ¹ýScalaÓïÑÔÇáËÉʹÓÃCaffe¡£Èç¹ûÄãÒѾÄÜÊìÁ·Ê¹ÓÃCaffe£¬ÄÇôSparkNet¶ÔÄã¶øÑÔ¿ÉÄÜ»áºÜÈÝÒ×ÉÏÊÖ¡£
|