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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÈçºÎÓÃ×Ô¶¯»úÆ÷ѧϰʵÏÖÉñ¾­ÍøÂç½ø»¯
 
À´Ô´£º51cto ·¢²¼ÓÚ£º 2017-8-7
  2227  次浏览      29
 

¶Ô´ó¶àÊý´ÓÊ»úÆ÷ѧϰ¹¤×÷µÄÈËÀ´Ëµ£¬Éè¼ÆÒ»¸öÉñ¾­ÍøÂçÎÞÒìÓÚÖÆ×÷Ò»ÏîÒÕÊõ×÷Æ·¡£Éñ¾­ÍøÂçͨ³£Ê¼ÓÚÒ»¸ö³£¼ûµÄ¼Ü¹¹£¬È»ºóÎÒÃÇÐèÒª¶Ô²ÎÊý²»¶ÏµØ½øÐе÷ÕûºÍÓÅ»¯£¬Ö±µ½ÕÒµ½Ò»¸öºÃµÄ×éºÏ²ã¡¢¼¤»îº¯Êý¡¢ÕýÔò»¯Æ÷ºÍÓÅ»¯²ÎÊý¡£ÔÚһЩ֪ÃûµÄÉñ¾­ÍøÂç¼Ü¹¹£¬ÈçVGG¡¢Inception¡¢ResNets¡¢DenseNetsµÈµÄÖ¸µ¼Ï£¬ÎÒÃÇÐèÒª¶ÔÍøÂçµÄ±äÁ¿½øÐÐÖØ¸´µÄ²Ù×÷£¬Ö±µ½ÍøÂç´ïµ½ÎÒÃÇÆÚÍûµÄËÙ¶ÈÓë׼ȷ¶È¡£Ëæ×ÅÍøÂç´¦ÀíÄÜÁ¦µÄ²»¶ÏÌá¸ß£¬½«ÍøÂçÓÅ»¯´¦Àí³ÌÐò×Ô¶¯»¯±äµÃÔ½À´Ô½¿ÉÐС£

ÔÚÏñRandom ForestsºÍSVMsÕâÑùµÄdzģÐÍÖУ¬ÎÒÃÇÒѾ­Äܹ»Ê¹³¬²ÎÊýÓÅ»¯µÄ²Ù×÷×Ô¶¯»¯½øÐÐÁË¡£Ò»Ð©³£ÓõŤ¾ß°ü£¬±ÈÈçsk-learn£¬ÏòÎÒÃÇÌṩÁËËÑË÷³¬²ÎÊý¿Õ¼äµÄ·½·¨¡£ÔÚÆä×î¼òµ¥µÄ¡¢×î»ù´¡µÄ¸ñʽÖУ¬¡°³¬²ÎÊý¡±ÊÇÎÒÃÇÔÚËùÓпÉÄܵIJÎÊýÖÐËÑË÷µÃµ½µÄ£¬»òÕßÊÇͨ¹ý´Ó²ÎÊý·Ö²¼ÖÐÈÎÒâ²ÉÑùµÃµ½µÄ¡££¨ÏêÇéÇëµã»÷´ËÁ´½Ó²é¿´¡££©ÕâÁ½ÖÖ·½·¨¶¼ÃæÁÙ×ÅÁ½¸öÎÊÌ⣺µÚÒ»£¬ÔÚ´íÎó²ÎÊýÇøÓò½øÐÐËÑË÷ʱ»áÔì³É×ÊÔ´ÀË·Ñ£»µÚ¶þ£¬´¦Àí´óÁ¿µÄ¶¯Ì¬ÌØÕ÷²ÎÊý¼¯½«µ¼ÖÂЧÂʹýµÍ¡£Òò´Ë£¬¸Ä±ä´¦ÀíÆ÷µÄ¼Ü¹¹±äµÃÏ൱À§ÄÑ¡£ËäÈ»ÏÖÔÚÓÐºÜ¶à¿´ËÆ¸ßЧµÄ·½·¨£¬±ÈÈçBayesianÓÅ»¯·½·¨¡£µ«BayesianÓÅ»¯·¨ËäÈ»Äܹ»½â¾öÁ˵ÚÒ»¸öÎÊÌ⣬ȴ¶ÔµÚ¶þ¸öÎÊÌâÎÞÄÜΪÁ¦£»ÁíÍ⣬ÔÚBayesianÓÅ»¯ÉèÖÃÖÐÒ²ºÜÄѽøÐÐ̽Ë÷Ä£ÐÍ¡£

×Ô¶¯Ê¶±ð×î¼ÑÄ£Ð͵ÄÏë·¨¾ÍÏÖÔÚÀ´ËµÒѾ­²»ËãÐÂÏÊÁË£¬ÔÙ¼ÓÉÏ×î½ü´ó·ù¶ÈÌáÉýµÄ´¦ÀíÄÜÁ¦£¬ÊµÏÖÕâÒ»Ïë·¨±ÈÒÔÍùÈκÎʱºò¶¼ÒªÈÝÒס£

ÎÊÌâÉ趨

¿¼Âdz¬²ÎÊýÓÅ»¯µÄ·½Ê½Ö®Ò»£¬¾ÍÊǽ«Ëü¿´×öÒ»¸ö¡°ÔªÑ§Ï°ÎÊÌ⡱¡£

ÎÒÃǾ¿¾¹ÄÜ·ñ´òÔì³öÒ»¸ö¿ÉÒÔÓÃÓÚÅжÏÍøÂçÐÔÄܺûµµÄËã·¨ÄØ£¿

×¢Ò⣺½ÓÏÂÀ´ÎÒ½«¼ÌÐøÊ¹Óá°ÔªÑ§Ï°¡±Õâ¸öÊõÓ¼´Ê¹½«Õâ¸öÎÊÌâÃèÊöΪ¡°ÔªÑ§Ï°¡±Óеã»ìÏýÊÓÌý£¬µ«ÎÒÃÇǧÍò²»ÄܰÑËüÓ롰ѧϰ¡±Ïà¹ØµÄһЩ·½·¨Åª»ìÁË¡£

ÎÒÃǵÄÄ¿±êÊǶ¨ÒåÍøÂçÒþº¬²ã£¨ÂÌÉ«£©µÄÊýÁ¿ÒÔ¼°Ã¿¸öÒþº¬²ãµÄ²ÎÊý¡£

¾ßÌå¶øÑÔ£¬¾ÍÊÇ̽¾¿Ä£Ðͼܹ¹ºÍÄ£Ð͵IJÎÊý¿Õ¼ä£¬´Ó¶øÔÚ¸ø¶¨µÄÊý¾Ý¼¯ÉÏÓÅ»¯ÆäÐÔÄÜ¡£Õâ¸öÎÊÌ⸴ÔÓÄѽ⣬¶ø»Ø±¨Ï¡±¡¡£Ö®ËùÒÔ˵Ëü»Ø±¨Ï¡±¡£¬ÊÇÒòΪÎÒÃÇÐèÒª¶ÔÍøÂç½øÐÐ×ã¹»µÄѵÁ·£¬»¹Òª¶ÔËü½øÐÐÆÀ¹À£»¶øÔÚѵÁ·¡¢ÆÀ¹ÀÍê³Éºó£¬ÎÒÃǵõ½»Ø±¨µÄ½ö½öÊÇһЩµÃ·Ö¡£ÕâЩµÃ·Ö·´Ó³ÁËÕû¸öϵͳµÄÐÔÄܱíÏÖ£¬¶øÕâÖÖÀàÐ͵Ļر¨²¢²»Êǿɵ¼º¯Êý£¡Ëµµ½Õ⣬ÊDz»ÊÇÈÃÄãÏëÆðÁËÊ²Ã´ÄØ£¿Ã»´í£¬Õâ¾ÍÊÇÒ»¸öµäÐ͵ġ°Ç¿»¯Ñ§Ï°¡±Çé¾³£¡

ά»ù°Ù¿Æ¶Ô¡°Ç¿»¯Ñ§Ï°¡±µÄ¶¨Ò壺

¡°Ç¿»¯Ñ§Ï°¡±£¨RL£©ÊÇÒ»ÖÖÖØÒªµÄ»úÆ÷ѧϰ·½·¨£¬ËüµÄÁé¸ÐÀ´×ÔÓÚÐÄÀíѧµÄÐÐΪÖ÷ÒåÀíÂÛ¡£¾ßÌåÀ´Ëµ£¬¡°Ç¿»¯Ñ§Ï°¡±ÊǹØÓÚÓлúÌ壨agent£©ÈçºÎÔÚ»·¾³£¨environment£©µÄ´Ì¼¤Ï£¬½«Àۼƽ±Àø×î´ó»¯µÄ·½·¨¡£

¡°Ç¿»¯Ñ§Ï°¡±Óë±ê×¼µÄ¼à¶½Ê½Ñ§Ï°Ö®¼äµÄÇø±ðÔÚÓÚËü²»ÐèÒª³öÏÖÕýÈ·µÄÊäÈë»òÊä³ö¶Ô£¬Ò²²»ÐèÒª¾«×¼Ð£ÕýÆä´ÎÓÅ»¯ÐÐΪ¡£ÁíÍ⣬¡°ÔÚÏßÐÔÄÜ¡±Ò²ÊÇ¡°Ç¿»¯Ñ§Ï°¡±¹Ø×¢µÄ½¹µã£¬¼´ÔÚδ֪ÁìÓòµÄ̽Ë÷ÓëÏÖÓÐ֪ʶµÄ¿ª·¢Ö®¼äÕÒµ½Æ½ºâ¡£

ÉÏͼÇé¾³ÖеÄÓлúÌ壨agent£©ÊÇÒ»¸öÄ£ÐÍ£¬»·¾³£¨environment£©¾ÍÊÇÎÒÃÇÓÃÓÚѵÁ·ºÍÆÀ¹ÀµÄÊý¾Ý¼¯¡£½âÊÍÆ÷£¨interpreter£©ÊǶÔÿһÐÐΪ½øÐзÖÎöÒÔ¼°ÉèÖÃÓлúÌå״̬£¨ÔÚÎÒÃÇÕâ¸öÇé¾³ÖУ¬½âÊÍÆ÷ÉèÖõÄÊÇÍøÂç²ÎÊý£©µÄ¹ý³Ì¡£

ͨ³£Çé¿öÏ£¬¡°Ç¿»¯Ñ§Ï°¡±ÎÊÌâ¶¼±»¶¨ÒåΪһ¸öMarkov¾ö²ß¹ý³Ì¡£ÆäÄ¿µÄ¾ÍÊÇÓÅ»¯ÓлúÌåµÄ×ܻر¨¡£Ã¿Ò»²½£¬ÄãÐèÒª¶ÔÓÅ»¯Ä£ÐÍÊä³ö×÷³ö¾ö²ß£¬»òÕßÊÇ̽Ë÷³öÒ»¸öеÄÐÐΪ¡£ÔÚ»·¾³µÄ´Ì¼¤Ï£¬ÓлúÌ彫¸ù¾ÝµÃµ½µÄ·´À¡£¬ÐγÉÒ»¸öµ÷ÕûÕþ²ß£¬²»¶Ï¸Ä½øÆäÐÐΪ¡£

×¢Ò⣺Õâ¸ö»°Ìⳬ³öÁ˱¾ÎÄÌÖÂ۵ķ¶Î§£¬R.SuttonºÍA. BartoµÄ¡¶Ç¿»¯Ñ§Ï°½éÉÜ¡·¿ÉÄÜÊǹØÓÚÕâ¸öÖ÷ÌâµÄ×î¼ÑÈëÃÅÖ¸µ¼Êé¡£

½ø»¯Ëã·¨

½â¾ö¡°Ç¿»¯Ñ§Ï°¡±ÎÊÌâµÄÁíÒ»ÖÖ·½·¨ÊÇ¡°½ø»¯Ëã·¨¡±¡£ÔÚÉúÎï½ø»¯µÄÆô·¢Ï£¬½ø»¯Ë㷨ͨ¹ý´´½¨Ò»¸ö½â¾ö·½°¸µÄ¼¯ºÏ£¬Ñ°ÕÒ½â¾ö·½°¸µÄ¿Õ¼ä£»È»ºó£¬Ëü»á¶Ôÿһ½â¾ö·½°¸½øÐÐÆÀ¹À£¬²¢¸ù¾ÝÆÀ¹ÀµÃ·Ö²»¶Ïµ÷ÕûÕâ¸ö·½°¸¼¯ºÏ¡£ÉúÎï½ø»¯ÂÛÖÐËù½²µÄ¡°½ø»¯¡±Éæ¼°µ½Ò»¸öÖÖȺÖÐ×î¼Ñ³ÉÔ±µÄÑ¡ÔñºÍ±äÒì¡£Òò´Ë£¬ÎÒÃǵĽâ¾ö·½°¸¼¯ºÏÒ²»á²»¶Ï½ø»¯·¢Õ¹£¬ÒÔÌá¸ßÆäÕûÌåÊÊÓ¦ÐÔ£¬²¢ÎªÎÊÌâÕÒµ½Ìṩ¿ÉÐеĽâ¾ö·½°¸¡£

½ø»¯Ëã·¨Öеġ°½ø»¯¡±

ÉÏͼµÄ×ó±ß½éÉÜÁ˽ø»¯µÄ¹ý³Ì£¬Éè¼ÆÒ»¸ö¡°½ø»¯Ëã·¨¡±Éæ¼°µ½Á½¸ö²¿·Ö¡ª¡ª¡°Ñ¡Ôñ¡±£¬ÒÔ¼°ÐèÒª×ñÑ­µÄ¡°¿ç½ç¡±»ò¡°±äÒ족²ßÂÔ¡£

¡°Ñ¡Ôñ¡±£º¶ÔÓÚ¡°Ñ¡Ôñ¡±£¬ÎÒÃÇͨ³£µÄ×ö·¨ÊÇÌôÑ¡×î¼ÑµÄ¸öÌåºÍһЩÈÎÒâµÄ¸öÌ壬ÒÔ´ïµ½¶àÑùÐÔ¡£¸üÏȽøµÄÑ¡Ôñ·½·¨ÊÇÔÚÖÖȺÏÂÉèÁ¢²»Í¬µÄ¡°´ÎȺ¡±£¬¼´¡°ÎïÖÖ¡±£»È»ºóÔÚÎïÖÖÖÐÑ¡Ôñ×î¼ÑµÄ¸öÌ壬ÒÔ±£»¤Æä¶àÑùÐÔ¡£ÁíÒ»ÖֱȽÏÊÜ»¶Ó­µÄ×ö·¨ÊÇ¡°¾ºÈüÑ¡Ôñ¡±£¬¼´ÈÎÒâÑ¡ÔñһЩ¸öÌå²ÎÓ뾺Èü£¬ÌôÑ¡³öʤÕߣ¨»ùÒòÓÅʤµÄ¸öÌ壩¡£

¡°¿ç½ç¡±£º¡°¿ç½ç¡±Ò²³Æ¡°½»²æ¿ç½ç¡±£¬Ö¸µÄÊÇÁ½×é»òÁ½×éÒÔÉÏÇ×±¾½»²æ»ìºÏ£¬²úÉúºó´ú¡£¡°½»²æ¿ç½ç¡±¸ß¶ÈÒÀÀµÓÚÎÊÌâ½á¹¹µÄ·½Ê½¡£³£¼ûµÄ·½·¨ÊÇÓÃÒ»¸öÏîÄ¿ÁÐ±í£¨Ò»°ãÊÇÊýÖµ£©¶ÔÇ×±¾½øÐÐÃèÊö£¬È»ºó´ÓÇ×±¾ÖÐÌôÑ¡ÈÎÒⲿ·ÖÀ´Éú³ÉеĻùÒò×éºÏ¡£

¡°±äÒ족£º¡°±äÒ족»ò¡°Í»±ä¡±Ö¸µÄÊÇÈÎÒâ¸Ä±ä»ùÒò×éµÄ¹ý³Ì¡£ÕâÊÇÖ÷ÒªµÄ¿ª·¢ÒòËØ£¬ÓÐÖúÓÚ±£³ÖÖÖȺµÄ¶àÑùÐÔ¡£

ʵʩÆôÓÃ

¡°½ø»¯Ëã·¨¡±µÄʵʩÆôÓÃʹÓÃÁËPyTorchÀ´½¨Á¢´úÀí£¬Õâ¸ö´úÀí½«»á̽Ë÷ÓÃÓÚÍê³É¼òµ¥·ÖÀàÈÎÎñµÄDNNs¡£Õâ¸öʵÑéʹÓõÄÊÇMNIST£¬ÒòΪËüСÇҿ죬¼´Ê¹ÔÚCPUÉÏÒ²ÄÜÍê³ÉѵÁ·¡£ÎÒÃǽ«½¨Á¢Ò»×éDNNÄ£ÐÍ£¬²¢½«Æä·¢Õ¹½ø»¯ÎªN¸ö²½Öè¡£

ÎÒÃÇËù½²µÄ¡°½ø»¯¡±Ö÷Ìâʵ¼ÊÉϾÍÊÇ¡°ÎᄎÌìÔñ¡±µÄʵʩ£¬ÍêÕûµÄ¸ßˮƽ¡°½ø»¯Ëã·¨¡±ÈçÏÂËùʾ£º


new_population = []
while size(new_population) < population_size:
choose k(tournament) individuals from the population at random
choose the best from pool/tournament with probability p1
choose the second best individual with probability p2
choose the third best individual with probability p3
mutate and append selected to the new_population

¸½×¢£ºµ±Éæ¼°µ½¼Ü¹¹ºÏ²¢Ê±£¬¿ç½çÎÊÌâ¾Í±äµÃÏ൱¸´ÔÓÁË¡£¾¿¾¹¸ÃÈçºÎ½«Á½¸öÇ×±¾µÄ¼Ü¹¹ºÏ²¢ÄØ£¿È±ÏÝͼÑù¼°»·¾³ÕûºÏѵÁ·½«¶Ô´Ë²úÉúʲôӰÏìÄØ£¿½üÆÚµÄһƪÀ´×ÔMiikkulainenµÈÈ˵ÄÂÛÎÄÌá³öÁËÒ»ÖÖ±»³ÆÎªCoDeepNEATµÄ½â¾ö·½°¸¡£»ùÓÚEvolino½ø»¯ÀíÂÛ£¬Ò»¸ö¼Ü¹¹Óɲ¿·Öµ¥ÔªÄ£¿é×é³É£¬ÆäÖеÄÿһµ¥ÔªÄ£¿é¶¼ÊÇ·þ´ÓÓÚ½ø»¯ÀíÂ۵ġ£Õâ¸ö¼Ü¹¹ÊÇÒ»¸öºÏ²¢ÁËËùÓÐ×é³É³É·ÖµÄÀíÏëÀ¶Í¼¡£ÔÚÕâÑùµÄÇ龳ϣ¬½«Ç×±¾µÄ×é³É³É·Ö»ìºÏÊÇÊ®·ÖºÏÀíµÄ£¬ÒòΪÆä³É·ÖÊÇÒ»¸öÍêÕûµÄ΢ÐÍÍøÂ硣ΪÁËʹÎÄÕ¸ü¼ò½àÒ×¶®£¬ÎÒÔÚÕâ¸öË㷨ʵʩ¹ý³ÌÖбܿªÁË¿ç½ç½»²æµÄÎÊÌ⣬¶øÊǼòµ¥½éÉÜÁËÀàËÆNEAT£¨»òCoDeepNEAT£©ÕâÑùµÄ½â¾ö·½°¸¡££¨ÎÒ´òËãÔÚÏÂһƪÎÄÕÂÖÐÏêϸ½éÉÜÕâЩ½â¾ö·½°¸¡££©

»ù±¾µÄ¹¹¼þ

ÎÒÃÇÐèÒª¶¨ÒåµÄµÚÒ»¼þÊÂÇé¾ÍÊÇÿһģÐ͵Ľâ¾ö·½°¸¿Õ¼ä£¬Ã¿Ò»¸ö¸öÌå¶¼´ú±í×ÅÒ»¸ö¼Ü¹¹¡£¼ò½àÆð¼û£¬ÎÒÃǶѵþÁËn²ã£¬Ã¿Ò»²ã¶¼°üº¬Èý¸ö²ÎÊý£ºa)Òþ²Øµ¥ÔªµÄÊýÁ¿£»b)¼¤»îÀàÐÍ£»c)¶ªÊ§ÂÊ¡£¶ÔÓÚͨÓòÎÊý£¬ÎÒÃÇÔÚ²»Í¬µÄÓÅ»¯Æ÷¡¢Ñ§Ï°ÂÊ¡¢È¨ÖØË¥¼õºÍ²ãÊýÁ¿ÖнøÐÐÑ¡Ôñ¡£

# definition of a space
# lower bound - upper bound, type param, mutation rate
LAYER_SPACE = dict()
LAYER_SPACE['nb_units'] = (128, 1024, 'int', 0.15)
LAYER_SPACE['dropout_rate'] = (0.0, 0.7, 'float', 0.2)
LAYER_SPACE['activation'] =\
(0, ['linear', 'tanh', 'relu', 'sigmoid', 'elu'], 'list', 0.2)

NET_SPACE = dict()
NET_SPACE['nb_layers'] = (1, 3, 'int', 0.15)
NET_SPACE['lr'] = (0.0001, 0.1, 'float', 0.15)
NET_SPACE['weight_decay'] = (0.00001, 0.0004, 'float', 0.2)
NET_SPACE['optimizer'] =\
(0, ['sgd', 'adam', 'adadelta', 'rmsprop'], 'list', 0.2)

Íê³ÉÒÔÉϲÙ×÷ÒÔºó£¬ÎÒÃÇÒѾ­¶¨ÒåÁËÄ£Ð͵Ŀռ䡣½Ó×ÅÎÒÃÇ»¹ÐèÒª½¨Á¢Èý¸ö»ù±¾¹¦ÄÜ£º

Ëæ»úÑ¡ÔñÒ»¸öÍøÂç

def random_value(space):
"""Sample random value from the given space."""
val = None
if space[2] == 'int':
val = random.randint(space[0], space[1])
if space[2] == 'list':
val = random.sample(space[1], 1)[0]
if space[2] == 'float':
val = ((space[1] - space[0]) * random.random()) + space[0]
return {'val': val, 'id': random.randint(0, 2**10)}


def randomize_network(bounded=True):
"""Create a random network."""
global NET_SPACE, LAYER_SPACE
net = dict()
for k in NET_SPACE.keys():
net[k] = random_value(NET_SPACE[k])

if bounded:
net['nb_layers']['val'] = min(net['nb_layers']['val'], 1)

layers = []
for i in range(net['nb_layers']['val']):
layer = dict()
for k in LAYER_SPACE.keys():
layer[k] = random_value(LAYER_SPACE[k])
layers.append(layer)
net['layers'] = layers
return net

Ê×ÏÈ£¬ÎÒÃÇÈÎÒâµØ¶Ô²ãÊýÁ¿ºÍÿһ²ãµÄ²ÎÊý½øÐвÉÑù£¬Ñù±¾Öµ»áÔÚÔ¤Ïȶ¨ÒåºÃµÄ·¶Î§±ßÔµÄÚ³öÏÖϽµ¡£ÔÚ³õʼ»¯Ò»¸ö²ÎÊýµÄͬʱ£¬ÎÒÃÇ»¹»á²úÉúÒ»¸öÈÎÒâµÄ²ÎÊýid¡£ÏÖÔÚËü»¹²»ÄÜʹÓ㬵«ÎÒÃÇ¿ÉÒÔ×·×ÙËùÓеIJ㡣µ±Ò»¸öеÄÄ£ÐÍ·¢ÉúÍ»±äʱ£¬¾ÉµÄ²ã»á½øÐÐ΢µ÷£¬Í¬Ê±½ö¶Ô·¢ÉúÍ»±äµÄ²ã½øÐгõʼ»¯¡£ÕâÑùµÄ×ö·¨Ó¦¸ÃÄܹ»ÏÔÖøµØ¼Ó¿ìËÙ¶È£¬²¢Îȶ¨½â¾ö·½°¸¡£

×¢Ò⣺¸ù¾ÝÎÊÌâÐÔÖʵIJ»Í¬£¬ÎÒÃÇ¿ÉÄÜÐèÒª²»Í¬µÄÏÞÖÆÌõ¼þ£¬±ÈÈç²ÎÊýµÄ×ÜÁ¿»ò²ãµÄ×ÜÊýÁ¿¡£

Ê¹ÍøÂç·¢Éú±äÒì

def mutate_net(net):
"""Mutate a network."""
global NET_SPACE, LAYER_SPACE

# mutate optimizer
for k in ['lr', 'weight_decay', 'optimizer']:

if random.random() < NET_SPACE[k][-1]:
net[k] = random_value(NET_SPACE[k])

# mutate layers
for layer in net['layers']:
for k in LAYER_SPACE.keys():
if random.random() < LAYER_SPACE[k][-1]:
layer[k] = random_value(LAYER_SPACE[k])
# mutate number of layers -- RANDOMLY ADD
if random.random() < NET_SPACE['nb_layers'][-1]:
if net['nb_layers']['val'] < NET_SPACE['nb_layers'][1]:
if random.random()< 0.5:
layer = dict()
for k in LAYER_SPACE.keys():
layer[k] = random_value(LAYER_SPACE[k])
net['layers'].append(layer)
# value & id update
net['nb_layers']['val'] = len(net['layers'])
net['nb_layers']['id'] +=1
else:
if net['nb_layers']['val'] > 1:
net['layers'].pop()
net['nb_layers']['val'] = len(net['layers'])
net['nb_layers']['id'] -=1
return net

ÿһ¸öÍøÂçÔªËØ¶¼´æÔÚ±äÒìµÄ¿ÉÄÜÐÔ£¬Ã¿Ò»´Î±äÒì¶¼½«ÖØÐ²ÉÑù²ÎÊý¿Õ¼ä£¬½ø¶øÊ¹²ÎÊý·¢Éú±ä»¯¡£

½¨Á¢ÍøÂç

class CustomModel():

def __init__(self, build_info, CUDA=True):

previous_units = 28 * 28
self.model = nn.Sequential()
self.model.add_module('flatten', Flatten())
for i, layer_info in enumerate(build_info['layers']):
i = str(i)
self.model.add_module(
'fc_' + i,
nn.Linear(previous_units, layer_info['nb_units']['val'])
)
self.model.add_module(
'dropout_' + i,
nn.Dropout(p=layer_info['dropout_rate']['val'])
)
if layer_info['activation']['val'] == 'tanh':
self.model.add_module(
'tanh_'+i,
nn.Tanh()
)
if layer_info['activation']['val'] == 'relu':
self.model.add_module(
'relu_'+i,
nn.ReLU()
)
if layer_info['activation']['val'] == 'sigmoid':
self.model.add_module(
'sigm_'+i,
nn.Sigmoid()
)
if layer_info['activation']['val'] == 'elu':
self.model.add_module(
'elu_'+i,
nn.ELU()
)
previous_units = layer_info['nb_units']['val']

self.model.add_module(
'classification_layer',
nn.Linear(previous_units, 10)
)
self.model.add_module('sofmax', nn.LogSoftmax())
self.model.cpu()

if build_info['optimizer']['val'] == 'adam':
optimizer = optim.Adam(self.model.parameters(),
lr=build_info['weight_decay']['val'],
weight_decay=build_info['weight_decay']['val'])

elif build_info['optimizer']['val'] == 'adadelta':
optimizer = optim.Adadelta(self.model.parameters(),
lr=build_info['weight_decay']['val'],
weight_decay=build_info['weight_decay']['val'])

elif build_info['optimizer']['val'] == 'rmsprop':
optimizer = optim.RMSprop(self.model.parameters(),
lr=build_info['weight_decay']['val'],
weight_decay=build_info['weight_decay']['val'])
else:
optimizer = optim.SGD(self.model.parameters(),
lr=build_info['weight_decay']['val'],
weight_decay=build_info['weight_decay']['val'],
momentum=0.9)
self.optimizer = optimizer
self.cuda = False
if CUDA:
self.model.cuda()
self.cuda = True

ÉÏÃæµÄÀà±ð½«»áʵÀý»¯Ä£Ð͵ġ°»ùÒò×顱¡£

ÏÖÔÚ£¬ÎÒÃÇÒѾ­¾ß±¸Á˽¨Á¢Ò»¸öÈÎÒâÍøÂç¡¢±ä¸üÆä¼Ü¹¹²¢¶ÔÆä½øÐÐѵÁ·µÄ»ù±¾¹¹¼þ£¬ÄÇô½ÓÏÂÀ´µÄ²½Öè¾ÍÊǽ¨Á¢¡°ÒÅ´«Ëã·¨¡±£¬¡°ÒÅ´«Ëã·¨¡±½«»á¶Ô×î¼Ñ¸öÌå½øÐÐÑ¡ÔñºÍ±äÒ졣ÿ¸öÄ£Ð͵ÄѵÁ·¶¼ÊǶÀÁ¢½øÐе쬲»ÐèÒªÆäËûÓлúÌåµÄÈκÎÐÅÏ¢¡£Õâ¾ÍʹµÃÓÅ»¯¹ý³Ì¿ÉÒÔËæ×Å¿ÉÓõĴ¦Àí½Úµã½øÐÐÏßÐÔÀ©Õ¹¡£

"""Genetic programming algorithms."""
from __future__ import absolute_import

import random
import numpy as np
from operator import itemgetter
import torch.multiprocessing as mp
from net_builder import randomize_network
import copy
from worker import CustomWorker, Scheduler


class TournamentOptimizer:
"""Define a tournament play selection process."""

def __init__(self, population_sz, init_fn, mutate_fn, nb_workers=2, use_cuda=True):
"""
Initialize optimizer.

params::

init_fn: initialize a model
mutate_fn: mutate function - mutates a model
nb_workers: number of workers
"""

self.init_fn = init_fn
self.mutate_fn = mutate_fn
self.nb_workers = nb_workers
self.use_cuda = use_cuda

# population
self.population_sz = population_sz
self.population = [init_fn() for i in range(population_sz)]
self.evaluations = np.zeros(population_sz)

# book keeping
self.elite = []
self.stats = []
self.history = []

def step(self):
"""Tournament evolution step."""
print('\nPopulation sample:')
for i in range(0,self.population_sz,2):
print(self.population[i]['nb_layers'],
self.population[i]['layers'][0]['nb_units'])
self.evaluate()
children = []
print('\nPopulation mean:{} max:{}'.format(
np.mean(self.evaluations), np.max(self.evaluations)))
n_elite = 2
sorted_pop = np.argsort(self.evaluations)[::-1]
elite = sorted_pop[:n_elite]

# print top@n_elite scores
# elites always included in the next population
self.elite = []
print('\nTop performers:')
for i,e in enumerate(elite):
self.elite.append((self.evaluations[e], self.population[e]))
print("{}-score:{}".format( str(i), self.evaluations[e]))
children.append(self.population[e])
# tournament probabilities:
# first p
# second p*(1-p)
# third p*((1-p)^2)
# etc...
p = 0.85 # winner probability
tournament_size = 3
probs = [p*((1-p)**i) for i in range(tournament_size-1)]
# a little trick to certify that probs is adding up to 1.0
probs.append(1-np.sum(probs))

while len(children) < self.population_sz:
pop = range(len(self.population))
sel_k = random.sample(pop, k=tournament_size)
fitness_k = list(np.array(self.evaluations)[sel_k])
selected = zip(sel_k, fitness_k)
rank = sorted(selected, key=itemgetter(1), reverse=True)
pick = np.random.choice(tournament_size, size=1, p=probs)[0]
best = rank[pick][0]
model = self.mutate_fn(self.population[best])
children.append(model)

self.population = children

# if we want to do a completely completely random search per epoch
# self.population = [randomize_network(bounded=False) for i in range(self.population_sz) ]

def evaluate(self):
"""evaluate the models."""

workerids = range(self.nb_workers)
workerpool = Scheduler(workerids, self.use_cuda )
self.population, returns = workerpool.start(self.population)

self.evaluations = returns
self.stats.append(copy.deepcopy(returns))
self.history.append(copy.deepcopy(self.population))

GPÓÅ»¯Æ÷µÄ±àÂë

¡°½ø»¯Ëã·¨¡±¿´ÆðÀ´·Ç³£¼òµ¥£¬¶ÔÂð£¿Ã»´í£¡Õâ¸öËã·¨¿ÉÒԷdz£³É¹¦£¬ÓÈÆäÊǵ±ÄãΪ¸öÌ嶨ÒåÁ˺õıäÒì»ò¿ç½ç¹¦ÄÜʱ¡£

´æ´¢¿âÖл¹°üº¬ÁËһЩ¶îÍâµÄʹÓÃÀà±ð£¬±ÈÈ繤×÷Æ÷ÀàºÍµ÷¶ÈÆ÷À࣬ʹGPÓÅ»¯Æ÷Äܹ»¶ÀÁ¢Æ½ÐеØÍê³ÉÄ£ÐÍѵÁ·ºÍÆÀ¹À¡£

ÔËÐдúÂë

°´ÕÕÉÏÊö²½Öè²Ù×÷ÔËÐС£

"""Tournament play experiment."""
from __future__ import absolute_import
import net_builder
import gp
import cPickle
# Use cuda ?
CUDA_ = True

if __name__=='__main__':
# setup a tournament!
nb_evolution_steps = 10
tournament = \
gp.TournamentOptimizer(
population_sz=50,
init_fn=net_builder.randomize_network,
mutate_fn=net_builder.mutate_net,
nb_workers=3,
use_cuda=True)

for i in range(nb_evolution_steps):
print('\nEvolution step:{}'.format(i))
print('================')
tournament.step()
# keep track of the experiment results & corresponding architectures
name = "tourney_{}".format(i)
cPickle.dump(tournament.stats, open(name + '.stats','wb'))
cPickle.dump(tournament.history, open(name +'.pop','wb'))

½ÓÏÂÀ´£¬ÈÃÎÒÃÇÒ»ÆðÀ´¿´¿´ÔËÐеĽá¹û£¡

ÕâÊÇ50¸ö½â¾ö·½°¸µÄµÃ·Ö½á¹û£¬±ÈÈü¹æÄ£Îª3¡£ÕâЩģÐͽö½ÓÊÜÁË10000¸öÑù±¾µÄѵÁ·£¬È»ºó¾Í±»ÆÀ¹ÀÁË¡£Õ§Ò»¿´£¬½ø»¯Ëã·¨ËÆºõ²¢Ã»ÓÐÆðµ½Ì«´óµÄ×÷Óã¬ÒòΪ½â¾ö·½°¸ÔÚµÚÒ»´Î½ø»¯ÖоÍÒѾ­½Ó½ü×î¼Ñ״̬ÁË£»¶øÔÚµÚÆß½×¶Î£¬½â¾ö·½°¸´ïµ½ÁËËüµÄ×î¼Ñ±íÏÖ¡£ÔÚÏÂͼÖУ¬ÎÒÃÇÓÃÁËÒ»¸öºÐʽͼÀ´ÒÀ´ÎÃèÊöÕâЩ½â¾ö·½°¸µÄËÄ·ÖÖ®Ò»¡£ÎÒÃÇ·¢ÏÖ£¬´ó¶àÊý·½°¸¶¼±íÏֵĺܺ㬵«ÔÚ·½°¸½ø»¯µÄͬʱ£¬Õâ¸öºÐÊ½Í¼Ò²ËæÖ®½ôËõÁË¡£

ͼÖеÄÕâ¸öºÐ×ÓչʾÁË·½°¸µÄËÄ·ÖÖ®Ò»£¬¶øÆäºÐÐëÔòÑÓÉìչʾÁËÊ£ÓàËÄ·ÖÖ®ÈýµÄ·½°¸·Ö²¼¡£ÆäÖеĺڵã´ú±í×Å·½°¸µÄƽ¾ùÖµ£¬´ÓͼÖÐÎÒÃǻᷢÏÖÆ½¾ùÖµµÄÉÏÉýÇ÷ÊÆ¡£

ΪÁ˽øÒ»²½Àí½âÕâÒ»·½·¨µÄÐÔÄܺͱíÏÖ£¬ÎÒÃÇ×îºÃ½«ÆäÓëÒ»¸öÍêÈ«Ëæ»úµÄÖÖȺËÑ×öÏà±È½Ï¡£Ã¿¸ö½×¶ÎÖ®¼ä¶¼²»ÐèÒª½ø»¯£¬Ã¿¸ö½â¾ö·½°¸¶¼Òª±»ÖØÐÂÉèÖÃΪһ¸öËæ»úµÄ״̬¡£

ÔÚÒ»¸öÏà¶Ô½ÏСµÄ£¨93.66% vs 93.22%£©Àï½ø»¯Ëã·¨µÄÐÔÄܽϺ᣶øËæ»úÖÖȺËÑË÷ËÆºõÉú³ÉÁËһЩºÃµÄ½â¾ö·½°¸£¬µ«Ä£Ð͵ķ½²îÈ´´ó´óÔö¼ÓÁË¡£Õâ¾ÍÒâζ×ÅÔÚËÑË÷´ÎÓżܹ¹µÄʱºò³öÏÖÁË×ÊÔ´ÀË·Ñ¡£½«Õâ¸öÓë½ø»¯Í¼Ïà±È½Ï£¬ÎÒÃǻᷢÏÖ½ø»¯È·ÊµÉú³ÉÁ˸ü¶àÓÐÓõĽâ¾ö·½°¸£¬Ëü³É¹¦µØÊ¹ÄÇЩ½á¹¹½ø»¯ÁË£¬½ø¶øÊ¹Ö®´ïµ½Á˸üºÃµÄÐÔÄܱíÏÖ¡£

1.MNISTÊÇÒ»¸öÏ൱¼òµ¥µÄÊý¾Ý¼¯£¬¼´Ê¹Êǵ¥²ãÍøÂçÒ²ÄÜ´ïµ½ºÜ¸ßµÄ׼ȷ¶È¡£

2.ÏñADAMÕâÑùµÄÓÅ»¯Æ÷¶ÔѧϰÂʵÄÃô¸Ð¶È±È½ÏµÍ£¬Ö»ÓÐÔÚËüÃǵÄÍøÂç¾ß±¸×ã¹»µÄ²ÎÊýʱ£¬ËüÃDzÅÄÜÕÒµ½±È½ÏºÃµÄ½â¾ö·½°¸¡£

3.ÔÚѵÁ·¹ý³ÌÖУ¬Ä£ÐÍÖ»»á²é¿´10000¸ö£¨ÑµÁ·×ÜÊý¾ÝµÄ1/5£©Ñù±¾Ê¾Àý¡£Èç¹ûÎÒÃÇѵÁ·µÃʱ¼äÔÙ³¤Ò»Ð©£¬ºÃµÄ¼Ü¹¹¿ÉÄÜ»á´ïµ½¸ü¸ßµÄ׼ȷ¶È¡£

4.ÏÞÖÆÑù±¾ÊýÁ¿¶ÔÓÚÎÒÃÇѧϰµÄ²ãµÄÊýÁ¿Í¬Ñù·Ç³£ÖØÒª£¬Ô½Éî²ãµÄÄ£ÐÍÐèÒªÔ½¶àÑù±¾¡£ÎªÁ˽â¾öÕâ¸öÎÊÌ⣬ÎÒÃÇ»¹Ôö¼ÓÁËÒ»¸öÒÆ³ýÍ»±ä²ã£¬Ê¹ÖÖȺµ÷½Ú²ãµÄÊýÁ¿¡£

Õâ¸öʵÑéµÄ¹æÄ£»¹²»×ãÒÔÍ»³öÕâÖÖ·½·¨µÄÓÅÊÆ£¬ÕâЩÎÄÕÂÖÐʹÓõÄʵÑ鹿ģ¸ü´ó£¬Êý¾Ý¼¯Ò²¸ü¸´ÔÓ¡£

ÎÒÃǸոÕÍê³ÉÁËÒ»¸ö¼òµ¥µÄ½ø»¯Ëã·¨£¬Õâ¸öËã·¨ºÜºÃµØÚ¹ÊÍÁË¡°ÎᄎÌìÔñ¡±µÄÖ÷Ìâ¡£ÎÒÃǵÄËã·¨Ö»»áÑ¡Ôñ×îÖÕʤÀûµÄ½â¾ö·½°¸£¬È»ºó½«Æä±äÒìÀ´²úÉú¸ü¶àµÄºó´ú¡£½ÓÏÂÀ´£¬ÎÒÃÇÐèÒª×öµÄ¾ÍÊÇʹÓøüÏȽøµÄ·½·¨£¬Éú³ÉºÍ·¢Õ¹·½°¸Èº¡£ÒÔÏÂÊÇһЩ¸Ä½øµÄ½¨Ò飺

1.ΪͨÓòãÖØÐÂʹÓÃÇ×±¾µÄÈ¨ÖØ

2.½«À´×ÔÁ½¸öDZÔÚÇ×±¾µÄ²ãºÏ²¢

3.¼Ü¹¹²»Ò»¶¨ÒªÁ¬ÐøµÄ£¬Äã¿ÉÒÔ̽Ë÷²ãÓë²ãÖ®¼ä¸ü¶à²»Ò»ÑùµÄÁªÏµ£¨·ÖÉ¢»òºÏ²¢µÈ£©

4.ÔÚ¶¥²¿Ôö¼Ó¶îÍâµÄ²ã£¬È»ºó½øÐÐ΢µ÷Õû¡£

ÒÔÉÏÄÚÈݶ¼ÊÇÈ˹¤ÖÇÄÜÑо¿ÁìÓòµÄÒ»¸ö¿ÎÌâ¡£ÆäÖÐÒ»¸ö±È½ÏÊÜ»¶Ó­µÄ·½·¨¾ÍÊÇNEAT¼°ÆäÀ©Õ¹¡£EAT±äÁ¿Ê¹Óýø»¯Ëã·¨ÔÚ¿ª·¢ÍøÂçµÄͬʱ£¬»¹¶ÔÍøÂçµÄÈ¨ÖØ½øÐÐÁËÉèÖá£ÔÚÒ»¸öµäÐ͵ÄÇ¿»¯Ñ§Ï°³¡¾°Ï£¬´úÀíÈ¨ÖØµÄ½ø»¯ÊǷdz£ÓпÉÄÜʵÏֵġ£µ«ÊÇ£¬µ±(x,y)ÊäÈë¶Ô¿ÉÓÃʱ£¬ÌݶÈϽµµÄ·½·¨Ôò±íÏֵøüºÃ¡£

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

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

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

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