±à¼ÍƼö: |
±¾ÎÄÊ×ÏȽéÉÜKeras»ù´¡¡¢KerasµÄÄ£¿é½á¹¹¡¢Ê¹ÓÃKeras´î½¨Ò»¸öÉñ¾ÍøÂç¡¢Ö÷Òª¸ÅÄîµÈÏà¹ØÄÚÈÝ¡£
±¾ÎÄÀ´×ÔÓÚ²©¿ÍÔ°£¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼¡¢ÍƼö¡£ |
|
1.¾í»ýÓëÉñ¾Ôª
1.1 ʲôÊǾí»ý£¿
¼òµ¥À´Ëµ£¬¾í»ý(»òÄÚ»ý)¾ÍÊÇÒ»ÖÖÏȰѶÔӦλÖÃÏà³ËÈ»ºóÔٰѽá¹ûÏà¼ÓµÄÔËËã¡£(¾ßÌ庬Òå»òÕßÊýѧ¹«Ê½¿ÉÒÔ²éÔÄÏà¹Ø×ÊÁÏ)
ÈçÏÂͼ¾Í±íʾ¾í»ýµÄÔËËã¹ý³Ì£º

£¨Í¼1£©
¾í»ýÔËËãÒ»¸öÖØÒªµÄÌØµã¾ÍÊÇ£¬Í¨¹ý¾í»ýÔËË㣬¿ÉÒÔʹÔÐźÅÌØÕ÷ÔöÇ¿£¬²¢ÇÒ½µµÍÔëÒô.
1.2 ¼¤»îº¯Êý
ÕâÀïÒÔ³£Óõļ¤»îº¯ÊýsigmoidΪÀý£º

°ÑÉÏÊöµÄ¼ÆËã½á¹û269´øÈë´Ë¹«Ê½£¬µÃ³öf(x)=1
1.3 Éñ¾Ôª
ÈçͼÊÇÒ»¸öÈ˹¤Éñ¾ÔªµÄÄ£ÐÍ£º

£¨Í¼2£©
¶ÔÓÚÿһ¸öÉñ¾Ôª£¬¶¼°üº¬ÒÔϼ¸²¿·Ö£º
x:±íʾÊäÈë
w:±íÊ¾È¨ÖØ
¦È:±íʾƫÖÃ
¡Æwx:±íʾ¾í»ý(ÄÚ»ý)
f :±íʾ¼¤»îº¯Êý
o:±íʾÊä³ö
1.4 ͼÏñµÄÂ˲¨²Ù×÷
¶ÔÓÚÒ»¸ö»Ò¶ÈͼƬ(ͼ3) ÓÃsobelËã×Ó(ͼ4)½øÐйýÂË£¬½«µÃµ½Èçͼ5ËùʾµÄͼƬ¡£

1.5С½á
ÉÏÃæµÄÄÚÈÝÖ÷ÒªÊÇΪÁËͳһһϸÅÄîÉϵÄÈÏʶ£º
ͼ1µÄÀ¶É«²¿·Ö¡¢Í¼2ÖеÄxn¡¢Í¼3µÄͼÏñ¶¼ÊÇÉñ¾ÔªµÄÊäÈ벿·Ö;ͼ1µÄºìÉ«²¿·ÖÊýÖµÖµ¡¢Í¼2µÄwnÖµ¡¢Í¼4µÄ¾ØÕóÖµ¶¼¿ÉÒÔ½Ð×öÈ¨ÖØ(»òÕßÂ˲¨Æ÷»òÕß¾í»ýºË£¬ÏÂÎÄͳ³ÆÈ¨ÖØ)¡£¶øÈ¨ÖØ(»ò¾í»ýºË)µÄ´óС(Èçͼ4µÄ3¡Á3)½Ð×ö½ÓÊÜÓò(Ò²½Ð¸ÐÖªÒ°»òÕßÊý¾Ý´°¿Ú£¬ÏÂÎÄͳ³Æ½ÓÊÜÓò)
2.¾í»ýÉñ¾ÍøÂç
ÔÚ½éÉܾí»ýÉñ¾ÍøÂ綨Òå֮ǰ£¬ÏÈ˵¼¸ÖֱȽÏÁ÷Ðеľí»ýÉñ¾ÍøÂçµÄ½á¹¹Í¼¡£
2.1 ³£¼ûµÄ¼¸ÖÖ¾í»ýÉñ¾ÍøÂç½á¹¹Í¼

(ͼ6)

(ͼ7)

£¨Í¼8£©

(ͼ9)
ͼ8ÖеÄC-²ã¡¢S-²ãÊÇ6ÖеÄConvolutions²ãºÍsubsampling²ãµÄ¼òд£¬C-²ãÊǾí»ý²ã£¬S-²ãÊÇ×Ó³éÑùºÍ¾Ö²¿Æ½¾ù²ã¡£ÔÚͼ6ºÍͼ7ÖÐC-²ã¡¢S-²ã²»ÊÇÖ¸¾ßÌåµÄij
Ò»¸ö²ã£¬¶øÊÇÖ¸ÊäÈë²ãºÍÌØÕ÷Ó³Éä²ã¡¢ÌØÕ÷Ó³Éä²ãºÍÌØÕ÷Ó³Éä²ãÖ®¼äµÄ¼ÆËã¹ý³Ì£¬¶øÌØÕ÷Ó³Éä²ãÔò±£³ÖµÄÊǾí»ý¡¢×Ó³éÑù(»òϲÉÑù)ºÍ¾Ö²¿Æ½¾ùµÄÊä³ö½á¹û¡£¶øÍ¼
6ºÍͼ7µÄÇø±ðÔÚÓÚ×îÖÕ½á¹ûÊä³ö֮ǰÊÇ·ñÓÐÈ«Á¬½Ó²ã£¬¶øÓÐûÓÐÈ«Á¬½Ó²ã»áÓ°Ïìµ½ÊÇ·ñ»¹ÐèÒªÒ»¸ö±âƽ²ã(±âƽ²ãÔÚ¾í»ý²ãºÍÈ«Á¬½Ó²ãÖ®¼ä£¬×÷ÓÃÊǶàάÊý¾Ýһά»¯)¡£
ͼ9ÖÐCONV²ãÊǾí»ý²ã(¼´C-²ã)£¬µ«ÊÇгöÏÖµÄRELU²ãºÍPOOL²ãÊÇÊ²Ã´ÄØ£¿RELU²ãÆäʵÊǼ¤»î²ã£¨reluÖ»ÊǼ¤»îº¯ÊýµÄÒ»ÖÖ£¬sigmoid/tanh±È½Ï³£¼ûÓÚÈ«Á¬½Ó²ã,relu³£¼ûÓÚ¾í»ý²ã)£¬ÎªÊ²Ã´»á¶à³öÀ´Ò»¸ö¼¤»î²ãÄØ£¿Çë¿´ÏÂͼ£º

£¨Í¼10£©

£¨Í¼2£¬·½±ã¶Ô±È¸´ÖÆÁ˹ýÀ´£©
Éñ¾ÔªµÄÍêÕûµÄÊýѧ½¨Ä£Ó¦¸ÃÊÇͼ10Ëùʾ£¬Óëͼ2Ïà±È£¬°ÑÔÀ´ÔÚÒ»ÆðµÄ²Ù×÷²ð³ÉÁËÁ½¸ö¶ÀÁ¢µÄ²Ù×÷£º¡Æwx(¾í»ý)ºÍf(¼¤»î)£¬Òò´Ë¶à³öÁËÒ»¸ö¼¤»î²ã¡£ËùÒÔ£¬ÔÚKerasÖÐ×齨¾í»ýÉñ¾ÍøÂçµÄ»°£¬¼´¿ÉÒÔ²ÉÓÃÈçͼ2µÄ·½Ê½(¼¤»îº¯Êý×÷Ϊ¾í»ýº¯ÊýµÄÒ»¸ö²ÎÊý)Ò²¿É²ÉÓÃͼ10ËùʾµÄ·½Ê½(¾í»ý²ãºÍ¼¤»î²ã·Ö¿ª)¡£¼¤»î²ã²»ÐèÒª²ÎÊý¡£
Pool²ã£¬¼´³Ø»¯²ã£¬Æä×÷ÓúÍS-²ãÒ»Ñù£º½øÐÐ×Ó³éÑùÈ»ºóÔÙ½øÐоֲ¿Æ½¾ù¡£ËüûÓвÎÊý£¬Æðµ½½µÎ¬µÄ×÷Ó᣽«ÊäÈëÇзֳɲ»ÖصþµÄһЩ
n¡Án ÇøÓò¡£Ã¿Ò»¸öÇøÓò¾Í°üº¬¸öÖµ¡£´ÓÕâ¸öÖµ¼ÆËã³öÒ»¸öÖµ¡£¼ÆËã·½·¨¿ÉÒÔÊÇÇ󯽾ù¡¢È¡×î´ó max µÈµÈ¡£¼ÙÉè
n=2£¬ÄÇô4¸öÊäÈë±ä³ÉÒ»¸öÊä³ö¡£Êä³öͼÏñ¾ÍÊÇÊäÈëͼÏñµÄ1/4´óС¡£Èô°Ñ2άµÄ²ãչƽ³ÉһάÏòÁ¿£¬ºóÃæ¿ÉÔÙÁ¬½ÓÒ»¸öÈ«Á¬½ÓǰÏòÉñ¾ÍøÂç¡£
´Óͼ7¿ÉÒÔ¿´³ö£¬ÎÞÂÛÊǾí»ý²ã»¹Êdzػ¯²ã¶¼¿ÉÒÔ½Ð×öÌØÕ÷Ó³Éä²ã£¬¶øÁ½²ãÖ®¼äµÄ¼ÆËã¹ý³Ì½Ð×ö¾í»ý»òÕ߳ػ¯£¬µ«ÊÇÕâô±íÊöÈÝÒ×ÔÚ¸ÅÄîÉϲúÉú»ìÏý£¬ËùÒÔ±¾ÎIJ»²ÉÓÃÕâÖÖ±íÊö·½Ê½£¬Ö»ÊÇÄÃÀ´×÷Ϊ¶Ô±ÈÀí½âʹÓá£
ÏÂÃæ¶ÔÉÏÃæµÄÄÚÈÝ×öÒ»ÏÂ×ܽ᣺
¾í»ý²ã(C-²ã»òConvolutions²ã»òCONV²ã»òÌØÕ÷ÌáÈ¡²ã£¬ÏÂÎÄͳ³Æ¾í»ý²ã)£ºÖ÷Òª×÷ÓþÍÊǽøÐÐÌØÕ÷ÌáÈ¡¡£
³Ø»¯²ã(S-²ã»ò×Ó³éÑù¾Ö²¿Æ½¾ù²ã»òϲÉÑù¾Ö²¿Æ½¾ù²ã»òPOOL²ã£¬ÏÂÎÄͳ³Æ³Ø»¯²ã)£ºÖ÷Òª×÷ÓÃÊǼõÐ¡ÌØÕ÷ͼ£¬Æðµ½½µÎ¬µÄ×÷Óᣳ£Óõķ½·¨ÊÇѡȡ¾Ö²¿ÇøÓòµÄ×î´óÖµ»òÕ߯½¾ùÖµ¡£ÈçÏÂͼËùʾ£º

(ͼ11)
¶ÔÓÚµÚÒ»¸ö¾í»ý²ãÀ´Ëµ(ͼ6µÄC1-²ã)£¬Ò»¸öÌØÕ÷¶ÔÓ¦Ò»¸öͨµÀ(»ò½Ðfeature map»òÌØÕ÷Ó³Éä»òÕß½ÐÂ˲¨Æ÷£¬ÏÂÎÄͳ³ÆÌØÕ÷Ó³Éä)£¬ÀýÈçÈýÔÉ«(RGB)µÄͼÏñ¾ÍÐèÒªÈý¸öÌØÕ÷Ó³Éä²ã¡£µ«ÊǾ¹ýµÚÒ»¸ö³Ø»¯²ã(ͼ6µÄS2-²ã£¬PS:ͼÖдí±ê³ÉÁËS1-²ã)Ö®ºó£¬ÏÂÒ»¸öÌØÕ÷ÌáÈ¡²ã
(ͼ6µÄC3-²ã)µÄÌØÕ÷Ó³Éä (feature map)¸öÊý²¢²»Ò»¶¨Ó뿪ʼµÄÏàͬÁË(ͼ6ÖдÓ8ÌØÕ÷±ä³ÉÁË20ÌØÕ÷)£¬Ò»°ãÇé¿öÏ»á±È³õʼµÄÌØÕ÷Ó³Éä¸öÊý¶à£¬ÒòΪ¸ù¾ÝÊÓ¾õϵͳÔÀí----µ×²ãµÄ½á¹¹¹¹³ÉÉϲã¸ü³éÏóµÄ½á¹¹£¬ËùÒÔµ±Ç°²ãµÄÌØÕ÷Ó³ÉäÊÇÉÏÒ»²ãµÄÌØÕ÷Ó³ÉäµÄ×éºÏ£¬Ò²¾ÍÊÇÒ»¸öÌØÕ÷Ó³Éä»á¶ÔÓ¦ÉÏÒ»²ãµÄÒ»¸ö»ò¶à¸öÌØÕ÷Ó³Éä¡£
2.2 ½ÓÊÜÓòºÍ²½³¤
2.2.1 ½ÓÊÜÓò

(ͼ12)
ÈçͼËùʾ£¬ÖмäµÄÕý·½Ðζ¼±íʾ½ÓÊÜÓò£¬Æä´óСΪ5*5¡£ÕâÀïÔÙÖØ¸´Ò»Ï£ºÈ¨ÖØ(¾í»ýºË)Ö¸µÄÊÇÊý×Ö£¬½ÓÊÜÓòÖ¸µÄÊÇÈ¨ÖØ(¾í»ýºË)µÄ´óС¡£
2.2.2 ²½³¤

£¨Í¼13£©
½ÓÊÜÓòµÄ¶ÔÓ¦·¶Î§´ÓÊäÈëµÄÇøÓò1ÒÆµ½ÇøÓò2µÄ¹ý³Ì£¬»òÕß´ÓÇøÓò3ÒÆ¶¯µ½ÇøÓò4¶¼Éæ¼°µ½Ò»¸ö²ÎÊý£º²½³¤£¬¼´Ã¿´ÎÒÆ¶¯µÄ·ù¶È¡£ÔÚ´ËÀýÖеIJ½³¤¿ÉÒÔ±íʾ³É3»ò
Õß(3,3)£¬µ¥¸ö3±íʾºá×Ý×ø±ê·½Ïò¶¼Òƶ¯3¸ö×ø±êµã£¬Èç¹û(3,2)Ôò±íʾºáÏòÒÆ¶¯3¸ö×ø±êµã£¬×ÝÏòÒÆ¶¯2¸ö×ø±êµã¡£Ã¿´ÎÒÆ¶¯Êǰ´Ò»¸ö·½ÏòÒÆ¶¯£¬²»ÊÇÁ½¸ö·½Ïò¶¼ÒÆ
¶¯(ͼ13ÖУ¬´ÓÇøÓò1ÒÆ¶¯µ½ÇøÓò2¡¢ÇøÓò3£¬È»ºó²ÅÒÆ¶¯µ½ÇøÓò4£¬Èç¹ûÁ½¸ö·½Ïò¶¼Òƶ¯Èý¸ö×ø±êµãÔò´ÓÇøÓò1µ½ÁËÇøÓò5£¬ÊDz»¶ÔµÄ)¡£
2.3¾í»ýÉñ¾ÍøÂç
2.3.1¾í»ýÉñ¾ÍøÂ綨Òå
¾í»ýÉñ¾ÍøÂçÊÇÒ»¸ö¶à²ãµÄÉñ¾ÍøÂ磬ÿ²ãÓɶà¸ö¶þÎ¬Æ½Ãæ(ÌØÕ÷Ó³Éä)×é³É£¬¶øÃ¿¸öÆ½ÃæÓɶà¸ö¶ÀÁ¢Éñ¾Ôª×é³É¡£
2.3.2¾í»ýÉñ¾ÍøÂçÌØµã
¾í»ýÉñ¾ÍøÂçÊÇΪʶ±ð¶þάÐÎ×´¶øÌØÊâÉè¼ÆµÄÒ»¸ö¶à²ã¸ÐÖªÆ÷£¬ÕâÖÖÍøÂç½á¹¹¶Ô¶þάÐÎ×´µÄÆ½ÒÆ¡¢±ÈÀýËõ·Å¡¢Çãб»òÕß¹²ËûÐÎʽµÄ±äÐξßÓи߶Ȳ»±äÐÔ¡£
¾í»ýÉñ¾ÍøÂçÊÇǰÀ¡ÐÍÍøÂç¡£
2.3.3 ¾í»ýÉñ¾ÍøÂçµÄÐÎʽµÄÔ¼Êø
2.3.3.1 ÌØÕ÷ÌáÈ¡
ÿһ¸öÉñ¾Ôª´ÓÉÏÒ»²ãµÄ¾Ö²¿½ÓÊÜÓòµÃµ½Í»´¥ÊäÈË£¬Òò¶øÆÈʹËüÌáÈ¡¾Ö²¿ÌØÕ÷¡£Ò»µ©Ò»¸öÌØÕ÷±»ÌáÈ¡³öÀ´£¬Ö»ÒªËüÏà¶ÔÓÚÆäËûÌØÕ÷µÄλÖñ»½üËÆµØ±£ÁôÏÂÀ´£¬ËüµÄ¾«È·Î»ÖþͱäµÃûÓÐÄÇÃ´ÖØÒªÁË¡£
ÏÂͼÁ½¸öXËäÈ»ÓеãÉÔ΢±äÐΣ¬µ«ÊÇ»¹ÊÇ¿ÉÒÔʶ±ð³öÀ´¶¼ÊÇX¡£

(ͼ14)
2.3.3.2 ÌØÕ÷Ó³Éä
ÍøÂçµÄÿһ¸ö¼ÆËã²ã¶¼ÊÇÓɶà¸öÌØÕ÷Ó³Éä×é³ÉµÄ£¬Ã¿¸öÌØÕ÷Ó³Éä¶¼ÊÇÆ½ÃæÐÎʽµÄ¡£Æ½ÃæÖе¥¶ÀµÄÉñ¾ÔªÔÚÔ¼ÊøÏ¹²ÏíÏàͬµÄÍ»´¥È¨Öµ¼¯(È¨ÖØ)£¬ÕâÖֽṹÐÎʽ¾ßÓÐÈçϵÄÓÐÒæÐ§¹û£º
a.Æ½ÒÆ²»±äÐÔ(ͼ14µÄÁ½¸öX)
b.×ÔÓɲÎÊýÊýÁ¿µÄËõ¼õ(ͨ¹ýȨֵ¹²ÏíʵÏÖ)
ÕâÀïÖØµã˵Ϲ²ÏíȨֵ£¬ÒÔ¼°¾í»ý²ãÉñ¾µ¥Ôª¸öÊýµÄÈ·¶¨ÎÊÌâ¡£
ÒÔͼ12µÄ½á¹¹Îª»ù´¡£¬×öÒÔϼÙÉ裺
¼ÙÉèÒ»£ºÊäÈ뷶ΧÔÚºá×Ý·½ÏòÓë½ÓÊÜÓòÕýºÃÊDZ¶Êý¹ØÏµ

(ͼ15)
ÏÈ˵ûÓнÓÊÜÓòµÄÇé¿ö£¬Èç¹ûÌØÕ÷Ó³ÉäÓÐ9¸öÉñ¾Ôª£¬Õâ9¸öÉñ¾ÔªÓë9*9µÄÊäÈë×öÈ«Á¬½Ó£¬ÄÇôÐèÒªµÄÈ¨ÖØ¸öÊýΪ9*9*9=729¸ö¡£Ìí¼ÓÁ˽ÓÊÜÓòºó£¬9¸öÉñ¾Ôª
·Ö±ðÓë½ÓÊÜÓò×öÁ´½Ó£¬ÕâÖÖÇé¿öÏÂÈç¹ûÒ»¸öÉñ¾Ôª¶ÔÓ¦Ò»×éÈ¨ÖØ£¬ÔòÓÐ9*9=81¸öÈ¨ÖØÖµ£¬ÔÙ¼ÙÈçÕâÒ»×éÈ¨ÖØµÄÖµÊǹ̶¨µÄ(¿É²Î¿¼Í¼12µÄ½ÓÊÜÓòÖµ£¬Õâ×éÖµ²»±ä£¬¶ø²»ÊÇÿ¸öÖµÏàµÈ)£¬ÄÇô¾ÍֻʣÏÂÁË9¸öÈ¨ÖØÖµ¡£´Ó729¸öÈ¨ÖØÖµ¼õÉÙµ½9¸öÈ¨ÖØÖµ£¬Õâ¸ö¹ý³Ì¾ÍÊÇȨֵ¹²ÏíµÄ¹ý³Ì¡£Ò²Ðí´Ó729¼õÉÙµ½9¸ö£¬²î±ð²»ÊÇÌØ±ð´ó£¬Èç¹ûÊäÈëÊÇ1000*1000£¬Éñ¾Ôª¸öÊýÊÇ1000ÍòÄØ£¿ÕâÑùµÄ»°ÓÉȨֵ¹²Ïíµ¼ÖµļõÉٵļÆËãÁ¿¾ÍºÜ¿Í¹ÛÁË¡£
¼ÙÉè¶þ£ºÊäÈ뷶ΧÔÚºá×Ý·½ÏòÓë½ÓÊÜÓò²»ÊÇÊDZ¶Êý¹ØÏµ

(ͼ16 )

(ͼ17)
ÒÔͼ15Ϊ²Î¿¼£¬Ö»ÊǰÑÊäÈëÓò±ä³Éͼ16ËùʾµÄ8*8µÄÇé¿ö£¬Èô²½³¤»¹ÊÇ(3,3)£¬ÄÇôºá×ÝÏò¸÷ÒÆ¶¯Ò»´Îºó¾ÍÎÞ·¨Òƶ¯ÁË£¬¼´½ÓÊÜÓòµÄ¿ÉÊÓ·¶Î§Îª·ÛÉ«±ß¿òÄÚµÄ6*6µÄÇøÓò(ͼ16µÄ·Ûºì¿òAÇøÓòºÍBÇøÓò)£¬Íâ²àµÄ2ÐÐ2ÁеÄÊý¾ÝÊǶÁ²»µ½µÄ¡£ÕâÖÖÇé¿öÓÐÁ½ÖÖ´¦Àí·½Ê½£¬Ò»ÊÇÖ±½Ó·ÅÆú£¬µ«ÊÇÕâÖÖ·½Ê½¼¸ºõ²»Óã¬ÁíÍâÒ»ÖÖ·½Ê½ÔÚÖÜΧ²¹0(ͼ17Ëùʾ)£¬Ê¹ÊäÈëÓò±ä³É(3,3)µÄ±¶Êý¡£
ͨ¹ýÉÏÊöÄÚÈÝ£¬¿ÉÒÔÖªµÀÿ¸öÌØÕ÷Ó³ÉäµÄÉñ¾ÔªµÄ¸öÊýÊÇÓÉÊäÈëÓò´óС¡¢½ÓÊÜÓò¡¢²½³¤¹²Í¬¾ö¶¨µÄ¡£Èçͼ15£¬9*9µÄÊäÈëÓò¡¢3*3µÄ½ÓÊÜÓò¡¢(3,3)µÄ²½³¤£¬¿É
ÒÔ¼ÆËã³öÌØÕ÷Ó³ÉäµÄÉñ¾Ôª¸öÊýΪ9¸ö¡£
2.3.3.3 ×Ó³éÑù
ÿ¸ö¾í»ý²ãºóÃæ¸ú×ÅÒ»¸öʵÏÖ¾Ö²¿Æ½¾ùºÍ×Ó³éÑùµÄ¼ÆËã²ã(³Ø»¯²ã)£¬ÓÉ´ËÌØÕ÷Ó³ÉäµÄ·Ö±æÂʽµµÍ¡£ÕâÖÖ²Ù×÷¾ßÓÐÊ¹ÌØÕ÷Ó³ÉäµÄÊä³ö¶ÔÆ½ÒÆºÍÆäËûÐÎʽµÄ±äÐÎ
µÄÃô¸Ð¶ÈϽµµÄ×÷Óá£
3.ÓÃKeras¹¹½¨Ò»¸ö¾í»ýÉñ¾ÍøÂç
3.1 ¾í»ýÉñ¾ÍøÂç½á¹¹Í¼

(ͼ18)
3.2 KerasÖеÄÊäÈë¼°È¨ÖØ
3.2.1 ʾÀý´úÂë(СÊý×Ö·½±ã´òÓ¡ÑéÖ¤)
PS£ºConvolution2D ǰ×îºÃ¼ÓZeroPadding2D£¬·ñÔòÐèÒª×Ô¼º¼ÆËãÊäÈë¡¢kernel_size¡¢stridesÈýÕßÖ®¼äµÄ¹ØÏµ£¬Èç¹û²»ÊDZ¶Êý¹ØÏµ£¬»áÖ±½Ó±¨´í¡£
model = Sequential()
model.add(ZeroPadding2D((1, 1), batch_input_shape=(1,
4, 4, 1)))
model.add(Convolution2D (filters=1,kernel_size=(3,3),
strides=(3,3), activation='relu', name='conv1_1'))
model.layers[1].get_weights()
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(filters=1, kernel_size=(2,3),strides=(2,3),
activation='relu', name='conv1_2'))
model.layers[3].get_weights() |
3.2.2 ´úÂë½âÊÍ
1) batch_input_shape=(1, 4, 4, 1)
±íʾ£ºÊäÈë1ÕÅ1ͨµÀ(»òÌØÕ÷Ó³Éä)µÄ4*4µÄÊý¾Ý.ÒòΪÎÒ²ÉÓõÄÊÇÓÃTensorflow×öºó¶Ë£¬ËùÒÔ²ÉÓá°channels_last¡±Êý¾Ý¸ñʽ¡£
2) filters = 1
±íʾ£ºÓÐ1¸öͨµÀ(»òÌØÕ÷Ó³Éä)
3) kernel_size = (2,3)
±íʾ£ºÈ¨ÖØÊÇ2*3µÄ¾ØÕó
4) striders = (2,3)
±íʾ£º²½³¤ÊÇ(2,3)
3.2.3 È¨ÖØ(ĬÈÏ»á³õʼ»¯È¨ÖØ)
3.2.3.1 µÚÒ»¸ömodel.layers[1].get_weights()Êä³ö(¸ñʽÕûÀíºó)

(ͼ19)
3.2.3.2 µÚ¶þ¸ömodel.layers[1].get_weights()Êä³ö

(ͼ20)
3.2.3.3 ÁíÍâÁ½¸öÊä³ö(ûÓÐдµÄ²ÎÊýֵͬÉÏ)
1)batch_input_shape=(1, 4, 4, 3),filters = 1, kernel_size
= (3,3)

(ͼ21)
2) batch_input_shape=(1, 4, 4, 3),filters = 3, kernel_size
= (2,3)

(ͼ22)
3.2.4 С½á
ͼ19µ½Í¼22µÄÄÚÈÝÊÇΪÁË˵Ã÷ÔÚKerasÖÐÈ¨ÖØµÄ±íʾ·½Ê½£¬ÎªÏÂÃæµÄʵÑé×ö×¼±¸¡£
ͨ¹ýÒÔÉϲÎÊýµÃ³öµÄÈ¨ÖØ¶Ô±È£¬µ±È¨ÖØÊǶþά¾ØÕó(n*n)ʱ£º
1) [[[¡]]]£º±íʾºáÖáÊýÄ¿
2) [[¡]]:±íʾ×ÝÖáÊýÄ¿
3) [¡]:±íʾͨµÀµÄ¸öÊý¡£Í¼21ºÍͼ22µÄÇø±ð£ºÒòΪͼ22ÊÇ3ͨµÀ3filter£¬ËùÒÔÿ¸öͨµÀ¶ÔÓ¦Ò»¸öfilter(ͼ20)£¬¶øÍ¼22Ï൱ÓÚ°Ñ3¸öͼ20ºÏÒ»ÆðÁË¡£
4) [¡]ÄÚ¶ººÅ¸ô¿ªµÄÊý£ºfilterµÄ¸öÊý
5) [[[[¡]]]]£ºÕâ¸ö¿ÉÄÜ´ú±í²ãÊý(Ç°Ãæ¼¸¸ö²ÎÊýÊÇÆ½ÃæµÄ£¬Õâ¸ö²ÎÊýÊÇÁ¢ÌåµÄ¡£ÔÚÏÂÃæµÄʵÑéÖÐûÓеõ½¾ßÌåÑéÖ¤£¬Ö»ÊǸù¾Ý×îÍâ²ãÊÇ5¸ö·½À¨ºÅÍÆ²âµÄ)
3.3 sobelËã×Óת»¯³ÉÈ¨ÖØ
ÓÉ3.2.4µÄ½áÂÛ£¬¿ÉÒÔ°Ñͼ4µÄsobelËã×Óת»»³ÉKerasÖеÄÈ¨ÖØ£º
weights = [[[[[-1]],[[0]],[[1]]],
[[[-2]],[[0]],[[2]]],[[[-1]],[[0]],[[1]]]]]
weights =np.array(weights)
PS£º×¢Òâ×îÍâΧÊÇ5¸ö·½À¨ºÅ
3.4 ʵÑé´úÂë
from PIL import
Image
import numpy as np
from keras.models import Sequential
from keras.layers import Convolution2D, ZeroPadding2D,
MaxPooling2D
from keras.optimizers import SGD
'''
µÚÒ»²½£º¶ÁȡͼƬÊý¾Ý
˵Ã÷£ºÕâ¸ö¹ý³ÌÐèÒª°²×°pillowÄ£¿é£ºpip install pillow
'''
##1ÕÅ1ͨµÀµÄ256*256µÄ»Ò¶ÈͼƬ
##data[0,0,0,0]£º±íʾµÚÒ»ÕÅͼƬµÄµÚÒ»¸öͨµÀµÄ×ø±êΪ(0,0)µÄÏñËØÖµ
img_width, img_height = 256, 256
data = np.empty((1,1,img_width,img_height),dtype="float32")
##´ò¿ªÍ¼Æ¬
img = Image.open("D:\\keras\\lena.jpg")
##°ÑͼƬת»»³ÉÊý×éÐÎʽ
arr = np.asarray(img,dtype="float32")
data[0,:,:,:] = arr
'''
µÚ¶þ²½£ºÉèÖÃÈ¨ÖØ
˵Ã÷£º×¢Òâ×îÍâΧÊÇ5¸ö·½À¨ºÅ
'''
weights = [[[[[-1]],[[0]],[[1]]],[[[-2]],[[0]],[[2]]],[[[-1]],[[0]],[[1]]]]]
weights =np.array(weights)
'''
µÚÈý²½£º×éÖ¯¾í»ýÉñ¾ÍøÂç
˵Ã÷£º
1.ÒòΪʵÑé²ÉÓõÄÊÇĬÈϵÄtensorflowºó¶Ë£¬¶øÊäÈëͼÏñÊÇchannels_firstģʽ£¬ËùÒÔ×¢Òâdata_format²ÎÊýµÄÉèÖÃ
2.ΪÁËʵÑéµÄЧ¹û£¬ËùÒÔstrides¡¢pool_sizeµÈ²ÎÊýÉèÖóÉÁË1
'''
##µÚÒ»´Î¾í»ý
model = Sequential()
model.add(ZeroPadding2D(padding=(2, 2), data_format='channels_first',
batch_input_shape=(1, 1,img_width, img_height)))
model.add(Convolution2D(filters=1,kernel_size=(3,3),strides=(1,1),
activation='relu', name='conv1_1', data_format='channels_first'))
model.set_weights(weights)
##µÚ¶þ´Î¾í»ý
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D (filters=1,kernel_size=(3,3),strides=(1,1),
activation='relu', name='conv1_2',data_format='channels_first'))
model.set_weights(weights)
##³Ø»¯²Ù×÷
model.add(ZeroPadding2D((0, 0)))
model.add(MaxPooling2D(pool_size=1, strides=None,data_format='channels_first'))
'''
µÚËIJ½£º ÉèÖÃÓÅ»¯²ÎÊý²¢±àÒëÍøÂç
'''
# ÓÅ»¯º¯Êý£¬É趨ѧϰÂÊ£¨lr£©µÈ²ÎÊý
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9,
nesterov=True)
# ʹÓÃmse×÷Ϊlossº¯Êý
model.compile(loss='mse', optimizer=sgd, class_mode='categorical')
'''
µÚÎå²½£ºÔ¤²â½á¹û
'''
result = model.predict(data,batch_size=1,verbose=0)
'''
µÚÁù²½£º±£´æ½á¹ûµ½Í¼Æ¬
'''
img_new=Image.fromarray(result[0][0]).convert('L')
img_new.save("D:\\keras\\tt123.jpg") |
3.5 ʵÑéЧ¹û

(ͼ23)

(ͼ24)
ͼ24Êdzػ¯²ã²ÎÊý¸ÄΪpool_size=2ʱµÄЧ¹û¡£
|