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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÈçºÎÓà Keras ´î½¨Éî¶ÈѧϰģÐÍ
 
  2998  次浏览      29
 2019-7-21 
 
±à¼­ÍƼö:

±¾ÎÄÀ´×Ô360doc£¬±¾ÎÄÖ÷Òª½éÉÜÈçºÎʹÓÃKERASÕâ¸öÏÖÔÚ×îеÄÉî¶Èѧϰ¿ò¼ÜÀ´¹¹ÔìʵÓõÄÉî¶ÈѧϰģÐÍ¡£

Éî¶ÈѧϰÊÇĿǰ×îÈÈÃŵĸ߼¶·ÖÎö¼¼ÊõÖ®Ò»£¬ÔÚºÜ¶à·½Ãæ±íÏÖ³öÁ˳¬Ô½´«Í³»úÆ÷ѧϰ·½·¨µÄÓÐЧÐÔ¡£µ«ÊÇÔÚ³£ÓõÄTensorFlow£¬CNTK£¬TheanoµÈ¼ÆËã»·¾³ÖÐʵÏÖ²»Í¬µÄÉî¶ÈѧϰģÐÍÈÔÈ»ÐèÒªºÄ·ÑºÜ¶àʱ¼äÀ´±àд³ÌÐò¡£KERASµÄ³öÏÖÌṩÁËÒ»¸ö¸ß¶È³éÏóµÄ»·¾³À´´î½¨Éî¶ÈѧϰģÐÍ£¬ÌرðÊÇÆä¼òµ¥Ò×Ó㬸úÍøÂç½á¹¹Ò»Ò»¶ÔÓ¦µÄÌØµãʹµÃÆäѸËÙÔÚÊý¾Ý¿ÆÑ§¼ÒÕâ¸öʹÓÃÈËȺÖÐÁ÷ÐÐÆðÀ´¡£

ʲôÊÇKERAS

KEARSÊÇGoogle¹¤³ÌʦFranois CholletΪÖ÷´´ÈËÔ±£¬»ùÓÚPython¿ª·¢ºÍά»¤µÄÒ»¸ö³éÏóµÄÉñ¾­ÍøÂ罨ģ»·¾³£¬ÌṩÁËһϵÁеÄAPI¹©Óû§µ÷Óù¹Ôì×Ô¼ºµÄÉî¶ÈÑ§Ï°ÍøÂç¡£KERASµÄ³ö·¢µã¾ÍÊÇΪÓû§Ìṩһ¸öÄܹ»¿ìËÙʵÏÖÄ£Ð͵ÄÊֶΣ¬´Ó¶øËõ¶Ì½¨Ä£µü´úµÄʱ¼ä£¬¼Ó¿ìÄ£ÐÍÊÔÑéµÄƵÂÊ¡£ÓÃKERAS¿ª·¢ÕߵĻ°Ëµ£¬¾ÍÊÇÒª×öºÃµÄ¿ÆÑбØÐ뾡¿ÉÄܵØËõ¶Ì´ÓÏë·¨µ½ÊµÏÖ½á¹ûµÄʱ¼ä¡£ÔÚÒµ½ç¹¤×÷ÖÐÕâÒ²Êdzɹ¦µÄ¹Ø¼üÒªËØÖ®Ò»¡£

Ïà±È½ÏÓÚ³£¼ûµÄÉî¶Èѧϰ»·¾³£¬±ÈÈçTensorFlow£¬CNTK£¬Theano£¬CaffeµÈ£¬KERASÓÐÒÔϼ¸¸ö²»Í¬£º

Éè¼Æ³õÖÔ¾ÍÊÇ·½±ãÒÔÄ£¿é»¯µØ·½Ê½¿ìËÙ¹¹ÔìÉî¶ÈѧϰģÐ͵ÄÔ­ÐÍ¡£

¿ÉÒԺܷ½±ãµØÔÚCPUºÍGPUÖ®¼äÇл»¡£

KERAS±¾ÉíÖ»ÊÇÃèÊöÄ£Ð͵Ļ·¾³£¬Æä¼ÆËãÆ½Ì¨Ä¿Ç°ÒÀÀµÓÚTensorFlow£¬CNTKºÍTheanoÕâÈýÖÖ£¬ÒÔºó»áÍØÕ¹µ½ÆäËûÁ÷ÐеļÆËãÆ½Ì¨ÉÏ£¬±ÈÈçmxNetµÈ¡£

KERASµÄÍØÕ¹ÐԼȿÉÒÔͨ¹ý×Ô¶¨ÒåKERASÀïµÄ¼¤»îº¯Êý»òÕßËðʧº¯ÊýµÈÄÜ×Ô¶¨ÒåµÄ²¿·Ö½øÐУ¬Ò²¿ÉÒÔͨ¹ýÒýÓöÔÓ¦µÄ¼ÆËãÆ½Ì¨µÄ×Ô¶¨Ò岿·Ö½øÐУ¬¾ßÓÐÒ»¶¨µÄÁé»îÐÔ¡£

¸úÕâЩÁ÷ÐеļÆËãÆ½Ì¨Ò»Ñù£¬KERASÒ²Ö§³Ö³£¼ûµÄÉî¶ÈѧϰģÐÍ£¬±ÈÈç¾í»ýÉñ¾­ÍøÂ磬ѭ»·Éñ¾­ÍøÂçÒÔ¼°¶þÕßµÄ×éºÏµÈ¡£

ʹÓÃKERAS¹¹ÔìÉî¶ÈÉñ¾­ÍøÂçÓÐһϵÁÐÏà¶Ô¹Ì¶¨µÄ²½Ö裺

Ê×ÏÈÒª½«Ô­Ê¼Êý¾Ý´¦Àí³ÉKERASµÄAPIÄܹ»½ÓÊܵĸñʽ£¬Ò»°ãÊÇÒ»¸öÕÅÁ¿µÄÐÎʽ£¬Í¨³£ÔÚά¶ÈÉϱíʾΪ£¨ÅúÁ¿Êý£¬[µ¥Ò»Ñù±¾¶ÔÓ¦ÕÅÁ¿µÄά¶È]£©¡£ÕâÀï[µ¥Ò»Ñù±¾¶ÔÓ¦ÕÅÁ¿µÄά¶È] ÊÇÒ»¸öͨÓõÄ˵·¨£¬¶ÔÓ¦ÓÚ²»Í¬ÀàÐ͵ÄÄ£ÐÍ£¬Êý¾ÝÓв»Í¬µÄÒªÇó¡£

ͨ³££¬Èç¹ûÊÇÒ»¸ö¼òµ¥µÄÈ«Á´½ÓÄ£ÐÍ£¬Ôòµ¥Ò»Ñù±¾¶ÔÓ¦ÕÅÁ¿µÄά¶È¾ÍÊÇÌØÕ÷¸öÊý£»Èç¹ûÊÇһάµÄʱ¼äÐòÁÐÊý¾Ý£¬²¢ÒªÓÃÑ­»·Éñ¾­ÍøÂçÄ£ÐÍѵÁ·µÄ»°£¬Ôòµ¥Ò»Ñù±¾¶ÔÓ¦ÕÅÁ¿µÄά¶ÈÊÇʱ¼ä²½ºÍÿ¸öʱ¼ä²½¶ÔÓ¦µÄ»Ø¿´ÐòÁг¤¶È£»Èç¹ûÊäÈëÊý¾ÝÊÇͼÏñ£¬²¢Ê¹Óþí»ýÉñ¾­ÍøÂçÄ£ÐͽøÐÐѵÁ·£¬Ôòµ¥Ò»Ñù±¾ÕÅÁ¿¶ÔӦͼÏñµÄ¸ß£¬¿íºÍÉ«²ÊƵµÀÈý¸öά¶È¡£µ«ÊÇÈç¹ûÊÇʹÓÃÈ«Á¬½ÓÄ£ÐÍѵÁ·Í¼ÏñÊý¾Ý£¬Ôòµ¥Ò»Ñù±¾¶ÔÓ¦ÕÅÁ¿ÊǸÃͼÏñ±â»¯£¨Flatten£©ÒÔºóµÄÏòÁ¿³¤¶È£¬ÆäΪ¸ß£¬¿íºÍÉ«²ÊƵµÀ¸÷¸öά¶ÈÊýÁ¿µÄ³Ë»ý¡£Ò»°ã¾í»ýÉñ¾­ÍøÂç×î¿¿½üÊä³ö²ãµÄÄDz㶼ÉèÖÃÒ»¸öÈ«Á¬½Ó²ã£¬Òò´ËÒ²ÐèÒª±â»¯ÊäÈëÕÅÁ¿¡£

Æä´ÎÒª¹¹ÔìÐèÒªµÄÉî¶ÈѧϰģÐÍ¡£ÕâÒ»²½ÓÖ·ÖΪÒÔÏÂÁ½¸ö²½Ö裺

Ñ¡ÔñÄ£Ð͵ÄÀàÐÍ¡£KERASÀﶨÒåÁËÁ½´óÀàÄ£ÐÍ£º1£©ÐòÁÐÄ£ÐÍ£¨Sequential£©£» 2£©Í¨ÓÃÄ£ÐÍ£¨Model£©¡£

ÐòÁÐÄ£ÐÍÖ¸µÄÊÇÉî¶ÈÄ£ÐÍÿһ²ãÖ®¼ä¶¼ÊÇǰºóÐòÁйØÏµ£¬ÈçÏÂͼËùʾ£º

Figure 1£ºMLPÊÇÒ»¸öµäÐ͵ÄÐòÁÐÄ£ÐÍ

¿ÉÒÔ¿´µ½´Ó×óµ½ÓÒ£¬ÊäÈë²ãµ½Òþº¬²ãµ½Êä³ö²ãÿһ²ãÖ®¼ä¶¼ÊÇǰºóÒÀ´ÎÏàÁ¬µÄ¼òµ¥¹ØÏµ¡£Õâ¸ö¼òµ¥µÄÍøÂç½á¹¹¿ÉÒÔÓÃÈý¾äKERASÃüÁîʵÏÖ£º

model=Sequential()model.add(Dense(5, input_shape=(4,), activation=¡¯sigmoid¡¯))model.add(Dense(1, activation=¡¯sigmoid¡¯))

¶øÍ¨ÓÃÄ£ÐÍÔòÊǶÔÓ¦¸ü¹ãÒåµÄÄ£ÐÍ£¬¾ß±¸¸ü´óµÄÁé»îÐÔ¡£ÉÏÃæÌáµ½µÄÐòÁÐÄ£ÐÍÒ²¿ÉÒÔÓÃͨÓÃÄ£ÐÍÀ´±í´ï£¬Õâ¸öÎÒÃÇÔÚºóÒ»½ÚÏê½â¡£

µ±È»Í¨ÓÃÄ£Ð͸üÄÜÓÃÀ´ÃèÊö²ãÓë²ãÖ®¼äÓнϸ´ÔÓ¹ØÏµµÄÇé¿ö£¬±ÈÈç·ÇÏàÁڵIJãÖ®¼ä½øÐÐÁ¬½Ó£¬»òÕß¶à¸öÉñ¾­ÍøÂçµÄºÏ²¢µÈ¡£±ÈÈçÎÒÃÇ¿ÉÒÔʹÓÃͨÓÃÄ£ÐͽøÐоØÕó·Ö½â£º

user_in = Input(shape=(1,), dtype='int64', name='user_in')u = Embedding(n_users, n_factors, input_length=1)(user_in)movie_in = Input(shape=(1,), dtype='int64', name='movie_in')v = Embedding(n_movies, n_factors, input_length=1)(movie_in)x = merge([u, v], mode='dot')x = Flatten()(x)model = Model([user_in, movie_in], x)model.compile(Adam(0.001), loss='mse')

ÕâÀï¹¹ÔìÁËÒ»¸ö»ùÓÚ¾ØÕó·Ö½âµÄÍÆ¼öϵͳµÄÒ»¸öÉî¶ÈѧϰģÐÍ£¬Æä¶ÔÓ¦µÄÍøÂç½á¹¹ÈçÏÂͼËùʾ£º

Figure 2£º¾ØÕó·Ö½âµÄÉî¶ÈѧϰģÐÍ

ϸ»¯Ä£Ð͵Ľṹ¡£ÆäʵÉÏÃæÒѾ­Õ¹Ê¾ÁËÄ£Ðͽṹϸ»¯Ö®ºóµÄÇé¿ö¡£Ò»°ãÀ´Ëµ£¬È·¶¨ÁËÄ£ÐÍÀàÐÍÒÔºó£¬Æä½á¹¹²»Íâºõÿ²ãµÄÀàÐÍÊÇʲô£¬ÊÇÈ«Á¬½Ó²ã»¹ÊǾí»ý²ã»¹ÊÇ·ÅÆú£¨Dropout£©²ã£»Ã¿²ãµÄÆäËû²ÎÊýÊÇʲô£¬±ÈÈçÈç¹ûÐèÒªÖ¸¶¨¼¤»îº¯Êý£¬ÄÇôʹÓÃʲôÑùµÄ¼¤»îº¯Êý£¬Èç¹ûÊǾí»ý²ã£¬ÄÇôÐèÒª¶àÉÙ¹ýÂËÆ÷£¬Ã¿¸ö¹ýÂËÆ÷µÄ´óСÊÇÔõÑùµÄ£¿µÈµÈÕâЩ¶¼¿ÉÒÔͨ¹ýÉ趨²»Í¬µÄ²ÎÊý½øÐÐϸ»¯¡£

È»ºó¶ÔÄ£ÐͽøÐбàÒ룬±àÒëÍê³ÉÒÔºó¿ÉÒԲ鿴ģÐ͵Ļù±¾ÐÅÏ¢£¬ÌرðÊDzÎÊýµÄÊýÁ¿£»

×îºó´øÈëÊý¾Ý¶ÔÄ£ÐͽøÐÐÄâºÏ¡£Ò»°ãÀ´½²£¬Èç¹ûÊý¾ÝÊǾ²Ì¬µÄÕÅÁ¿Êý¾Ý£¬Í¨¹ýʹÓÃfit·½·¨¡£Èç¹ûÊý¾ÝÌØ±ð´ó£¬¿ÉÊÇʹÓÿɵü´úµÄdata generator¶ÔÏ󣬲¢Ê¹ÓÃfit_generator·½·¨À´ÄâºÏ¡£

KERASºÍÉî¶ÈѧϰģÐ͵ĶÔÓ¦¹ØÏµ

KERAS¼ÈÈ»ÊÇ¿ª·¢³öÀ´¿ìËÙ¹¹ÔìÉî¶ÈѧϰģÐ͵Ť¾ß£¬ÄÇôËüµÄAPIºÍÉî¶ÈѧϰģÐ͵ÄÒªËØ¶¼ÓкÜÇ¿µÄ¶ÔÓ¦¹ØÏµ¡£

ÕýÈçÉÏÃæËù˵£¬Ä¿Ç°µÄÉî¶ÈѧϰģÐͶ¼¿ÉÒÔÄÉÈëÐòÁÐÄ£ÐÍ»òÕßͨÓÃÄ£Ð͵ģ¬ÄÇôÎÒÃÇÓÃͼʾµÄ·½Ê½À´±íʾÕâ¸ö¶ÔÓ¦¹ØÏµ£¬·½±ã¶ÁÕßÀí½â¡£ÕâÀïÍøÂçͼΪÁË·½±ãÓë°´ÐÐÅÅÁеĴúÂë¶ÔÓ¦£¬¶Ôÿһ²ã¶¼½øÐÐÁ˱ê×¢¡£

ÏÂͼչʾµÄÊÇÒ»¸öµäÐ͵ÄÈ«Á¬½ÓÐòÁÐÄ£ÐÍ£º

Õâ¸öÐòÁÐÄ£ÐÍ¿ÉÒÔʹÓÃÈçϵÄKERASÃüÁî¿ìËٴ£º

Model = Sequential()Model.add(Dense(10, activation=¡¯sigmoid¡¯, input_shape=(8, )) ¡¾Òþº¬²ã1+ÊäÈë²ã¡¿Model.add(Dense(8, activation=¡¯relu¡¯)) ¡¾Òþº¬²ã2¡¿Model.add(Dense(10, activation=¡¯relu¡¯)) ¡¾Òþº¬²ã3¡¿Model.add(Dense(5, activation=¡¯softmax¡¯)) ¡¾Êä³ö²ã¡¿

ÉÏÃæµÄÐòÁÐÄ£ÐÍÒ²¿ÉÒÔÓÃͨÓÃÄ£Ð͵ÄAPIÃèÊöµÄ½á¹û£¬ÆäÓëͼÖеÄÍøÂç½á¹¹ÓиüÇ¿µÄ¶ÔÓ¦¹ØÏµ£º

x = Input(shape=(8,)) ¡¾ÊäÈë²ã¡¿b = Dense(10, activation=¡¯sigmoid¡¯)(x) ¡¾Òþº¬²ã1¡¿c = Dense(8, activation=¡¯relu¡¯)(b) ¡¾Òþº¬²ã2¡¿d = Dense(10, activation=¡¯relu¡¯)(c ) ¡¾Òþº¬²ã3¡¿out = Dense(5, activation=¡¯softmax¡¯)(d) ¡¾Êä³ö²ã¡¿model = Model(inputs=x, outputs=out)

ÉÏÃæÒ²¾ÙÁËÁíÍâµÄ±È½Ï¸´ÔÓµÄÀý×Ó¡£ÔÚºóÃæµÄ¾ßÌå°¸ÀýÖУ¬ÎÒÃÇÒ²»áÇ¿µ÷ÍøÂç½á¹¹ºÍ¶ÔÓ¦µÄKERASÃüÁʹ¶ÁÕßÄܽ¨Á¢Æð½ÏÇ¿µÄÁªÏµ¡£

ʹÓÃKERAS¹¹ÔìÉî¶ÈÍÆ¼öϵͳ

ÍÆ¼öϵͳÊÇ»úÆ÷ѧϰ×î¹ã·ºµÄÓ¦ÓÃÁìÓòÖ®Ò»£¬´ó¼ÒÊìϤµÄÑÇÂíÑ·¡¢µÏÊ¿Äá¡¢¹È¸è¡¢Netflix µÈ¹«Ë¾¶¼ÔÚÍøÒ³ÉÏÓÐÆäÍÆ¼öϵͳµÄ½çÃæ£¬°ïÖúÓû§¸ü¿ì¡¢¸ü·½±ãµØ´Óº£Á¿ÐÅÏ¢ÖÐÕÒµ½ÓмÛÖµµÄÐÅÏ¢¡£±ÈÈçÑÇÂíÑ·£¨www.amazon.com£©»á¸øÄãÍÆ¼öÊé¡¢ÒôÀֵȣ¬µÏÊ¿Äᣨvideo.disney.com£©¸øÄãÍÆ¼ö×îϲ»¶µÄ¿¨Í¨ÈËÎïºÍµÏÊ¿ÄáµçÓ°£¬¹È¸èËÑË÷¸ü²»ÓÃ˵ÁË£¬ Google Play¡¢ Youtube µÈÒ²ÓÐ×Ô¼ºµÄÍÆ¼öÒýÇæ¡¢ÍƼöÊÓÆµºÍÓ¦Óõȡ£ÏÂÃæÊÇÎҵǽÑÇÂíÑ·Ö®ºóµÄÒ»¸öÍÆ¼öÒ³Ãæ£¬¿É¼ûÎÒ֮ǰӦ¸ÃÊǹºÂòÁË¿§·È»ú£¬ËùÒÔ»áÓÐÏà¹ØµÄ²úÆ·ÍÆ¼ö³öÀ´¡£

Figure 4£ºÑÇÂíÑ·µÄÍÆ¼öÒ³Ãæ¾Ö²¿

ÍÆ¼öϵͳµÄ×îÖÕÄ¿µÄÊÇ´Ó°ÙÍòÉõÖÁÉÏÒÚÄÚÈÝ»òÕßÉÌÆ·ÖаÑÓÐÓõĶ«Î÷¸ßЧµØÏÔʾ¸øÓû§£¬ÕâÑù¿ÉÒÔΪÓû§½ÚÊ¡ºÜ¶à×ÔÐвéѯµÄʱ¼ä£¬Ò²¿ÉÒÔÌáʾÓû§¿ÉÄܺöÂÔµÄÄÚÈÝ»òÉÌÆ·£¬Ê¹Óû§¸üÓÐð¤ÐÔ£¬¸üÔ¸Ò⻨ʱ¼ä´ýÔÚÍøÕ¾ÉÏ£¬´Ó¶øÊ¹É̼ҿÉÒÔ´ÓÄÚÈÝ»òÕßÉÌÆ·ÖÐ׬ȡ¸ü¶àµÄÀûÈ󣬼´Ê¹Á÷Á¿±¾ÉíÒ²»áʹÉÌ¼Ò´Ó¹ã¸æÖÐÊÜÒæ¡£

´«Í³ÉÏ£¬ÍƼöϵͳÊÇ»ùÓÚ¾ØÕó·Ö½âµÄЭͬ¹ýÂËËã·¨£¬Ç°ÃæÒ²Õ¹Ê¾ÁËÕâÑùµÄÒ»¸ö¼òµ¥Ä£ÐÍ¡£ÏÂÃæÎÒÃÇ×ÅÖØ½éÉÜÉî¶ÈÑ§Ï°ÍÆ¼öϵͳ¡£Õâ¸öÄ£ÐͳýÁËÄܽ«Óû§ºÍ¿ÉÑ¡²úÆ·ÁªÏµÆðÀ´ÒâÍ⣬»¹Äܽ«ÆäËû¸¨ÖúÊý¾Ý£¬±ÈÈçÓû§ÄêÁ䣬µØÇø£¬ÉÏÍøÉ豸ÒÔ¼°¸÷ÖÖ²úÆ·ÊôÐÔ£¬ÁªÏµÆðÀ´¡£ÕâÀïͨ¹ýǶÈ루Embedding£©ÕâÖÖ¼¼Êõ½«²»Í¬µÄÐÅÏ¢´®ÔÚÒ»Æð×÷ΪÊäÈë²ã£¬ÔÙ¼ÌÐø´î½¨²»Í¬µÄÉñ¾­ÍøÂçÄ£ÐÍ£¬×îºóÒ»²ãÓÃÔ¤²âÆÀ·Ö×÷ΪÊä³ö²ã¡£ËäÈ»ÕâÀïµÄÊý¾ÝÖ»ÓÐÓû§±àÂëºÍµçÓ°²úÆ·±àÂ룬µ«ÊÇÕâÑùµÄ½á¹¹¿ÉÒÔÍØÕ¹µ½°üº¬ÆäËûÏà¹ØÊý¾Ý¡£ÏÂͼչʾÁËÕâÑùµÄÒ»¸öÉî¶ÈÄ£Ð͵ĽṹʾÒâͼ£º

Figure 5£ºÉî¶ÈÄ£ÐÍ

ÓÐÁËÕâ¸öʾÒâͼ£¬ÎÒÃǾͿÉÒԺܷ½±ãµØÓÃKERASÒÀ´Î¹¹Ôì¡£ÕâÀïÎÒÃǼÙÉèÒѾ­½«Óû§ºÍµçÓ°²úÆ·×öÁ˰´ÕÕOne Hot±àÂëÐÎʽ×éÖ¯ºÃÁË¡£

Ê×ÏÈÓÃǶÈë²ã¶ÔÓû§ºÍµçÓ°½øÐÐǶÈëÓ³É䣺

k = 128model1 = Sequential()model1.add(Embedding(n_users + 1, k, input_length = 1))model1.add(Reshape((k,)))model2 = Sequential()model2.add(Embedding(n_movies + 1, k, input_length = 1))model2.add(Reshape((k,)))

ÕâÀïµÄkÊÇÓ³Éäµ½µÄ¿Õ¼äµÄά¶È¡£ÔÚÒ»°ãµÄÒµÎñϵͳÖÐÎÒÃÇ¿ÉÄÜÓÐÉϰÙÍòµÄÓû§ºÍ²úÆ·£¬¾­¹ýǶÈëÓ³Éäµ½128άµÄʵÊýÓòÉÏÒÔºóÏÔÖøµØ½µµÍÁËÕû¸öϵͳµÄά¶ÈºÍ´óС¡£

ÒÔÉϼ¸¾äÃüÁîʵÏÖÁËÉÏͼ´Ó×îµÍϵ½¡°Óû§Ç¶È롱ºÍ¡°µçӰǶÈ롱ÕâÒ»½×¶ÎµÄ±à³Ì¡£

Æä´Î£¬ÎÒÃÇÐèÒªÓõÚÈý¸öÉñ¾­ÍøÂç°ÑÇ°ÃæµÄÁ½¸öǶÈëÍøÂçÓ³ÉäËùµÃµ½µÄÏòÁ¿µþ¼ÓÔÚÒ»Æð£º

model = Sequential()model.add(Merge([model1, model2], mode = 'concat'))

ÖÁ´ËÍê³ÉÁ˵½µÚÒ»¸ö´Ö¼ýÍ·µÄÍøÂç¹¹Ôì¡£Á½¸öÍøÂçÒѾ­ºÏ²¢ÎªÒ»¸öÍøÂç¡£

ÏÂÃæµÄÃüÁîÒÀ´ÎÍê³É¡°Òþº¬²ã128¡±ºÍ¡°Òþº¬²ã32¡±µÄ¹¹Ô죺

model.add(Dropout(0.2))model.add(Dense(k, activation = 'relu'))model.add(Dropout(0.5) )model.add(Dense(int(k/4), activation = 'relu'))model.add(Dropout(0.5))

ÏÂÃæ¼ÌÐø¹¹Ôì¡°Òþº¬²ã8¡±£º

model.add(Dense(int(k/16), activation = 'relu'))model.add(Dropout(0.5))

Òþº¬²ã¹¹ÔìÍê±ÏÖ®ºó£¬ÐèÒª¹¹ÔìÊä³ö²ã¡£ÒòΪÊÇÔ¤²âÁ¬Ðø±äÁ¿ÆÀ·Ö£¬×îºóÒ»²ãÖ±½ÓÉÏÏßÐԱ仯£º

model.add(Dense(1, activation = 'linear'))

ÖÁ´Ë£¬Ä£Ð͹¹ÔìÍê±Ï£¬¿ÉÒÔ±àÒëÁË£º

model.compile(loss = 'mse', optimizer = 'adam')

ÕâÀïʹÓÃÁ˾ù·½²î£¨MSE£©×÷ΪËðʧº¯Êý£¬²¢Ê¹ÓÃÁËADAMÓÅ»¯Ëã·¨¡£

ÏÂÃæ£¬ÎªÁËÄÜѵÁ·Ä£ÐÍ£¬ÐèÒª½«Êý¾Ý¹¹ÔìΪ[users, movies]µÄÐÎʽ£º

users = ratings['user_id'].valuesmovies = ratings['movie_id'].valuesX_train = [users, movies]

×îºóѵÁ·Ä£ÐÍ£º

model.fit(X_train, y_train, batch_size = 100, epochs = 50)

ʹÓÃmovielensµÄÓû§¹Û¿´µçÓ°ÆÀ·ÖÊý¾Ý½øÐÐѵÁ·ºÍÑéÖ¤£¬ÎÒÃÇ·¢ÏÖÕâ¸öÄ£Ð͵ÄÎó²îÔÚ0.8226×óÓÒ£¬´óÔ¼Ò»¸öÆÀ·ÖµÈ¼¶²»µ½¡£¼´Ê¹ÕâÑùÒ»¸ö¼òµ¥µÄÄ£ÐÍ£¬Ð§¹û»¹ÊDZȽϺõġ£Èç¹û½øÒ»²½ÓÅ»¯½á¹¹£¬»òÕßÒýÈëÆäËûÐÅÏ¢£¬Îó²î»¹¿ÉÒÔ½øÒ»²½½µµÍ¡£

ʹÓÃKERAS¹¹ÔìͼÏñʶ±ðϵͳ

ͼÏñʶ±ðÊÇÉî¶Èѧϰ×îµäÐ͵ÄÓ¦ÓÃÖ®Ò»¡£¹ØÓÚÉî¶ÈѧϰµÄͼÏñʶ±ð¿ÉÒÔ×·Ëݺܳ¤µÄÀúÊ·£¬ÆäÖÐ×î¾ßÓдú±íÐÔµÄÀý×ÓÊÇÊÖд×ÖÌåʶ±ðºÍͼƬʶ±ð¡£ÊÖд×ÖÌåʶ±ðÖ÷ÒªÊÇÓûúÆ÷ÕýÈ·Çø±ðÊÖдÌåÊý×Ö 0~9¡£ÒøÐÐ֧ƱÉϵÄÊÖдÌåʶ±ð¼¼Êõ¾ÍÊÇ»ùÓÚÕâ¸ö¼¼Êõ¡£Í¼Æ¬Ê¶±ðµÄ´ú±í×÷¾ÍÊÇ ImageNet¡£Õâ¸ö±ÈÈüÐèÒªÍŶÓʶ±ðͼƬÖе͝Îï»òÕßÎïÌ壬°ÑËüÃÇÕýÈ·µØ·Öµ½Ò»Ç§¸öÀà±ðÖÐµÄÆäÖÐÒ»¸ö¡£

ͼÏñʶ±ðÓкܶàÖÖ¼¼Êõ¿ÉÒÔʵÏÖ£¬Ä¿Ç°×îÖ÷Á÷µÄ¼¼ÊõÊÇÉî¶ÈÉñ¾­ÍøÂ磬ÆäÖÐÓÈÒÔ¾í»ýÉñ¾­ÍøÂ磨CNN£©×îΪ³öÃû¡£¾í»ýÉñ¾­ÍøÂ磨¼ûͼ1£©ÊÇÒ»ÖÖ×Ô¶¯»¯ÌØÕ÷ÌáÈ¡µÄ»úÆ÷ѧϰģÐÍ¡£´ÓÊýѧµÄ½Ç¶È¿´£¬ÈκÎÒ»ÕÅͼƬ¶¼¿ÉÒÔ¶ÔÓ¦µ½ 224 ¡Á 224 ¡Á 3 »òÕß 32 ¡Á 32 ¡Á 3 µÈÈýάÏòÁ¿£¬ÕâÈ¡¾öÓÚÏñËØ¡£ÎÒÃǵÄÄ¿±êÊǰÑÕâ¸öÈýάÏòÁ¿£¨ÓÖ±»³ÆÎªÕÅÁ¿£©Ó³Éäµ½ N¸öÀà±ðÖеÄÒ»Àà¡£Éñ¾­ÍøÂç¾ÍÊǽ¨Á¢ÁËÕâÑùÒ»¸öÓ³Éä¹ØÏµ£¬»òÕß³ÆÎªº¯Êý¡£Ëüͨ¹ý½¨Á¢Íø×´½á¹¹£¬¸¨ÒÔ¾ØÕóµÄ¼Ó¡¢³ËµÈÔËË㣬×îºóÊä³öÿ¸öͼÏñÊôÓÚÿ¸öÀà±ðµÄ¸ÅÂÊ£¬²¢ÇÒÈ¡¸ÅÂÊ×î¸ßµÄ×÷ΪÎÒÃǵľö²ßÒÀ¾Ý¡£ ÏÂÃæÊÇÒ»¸öµäÐ͵ÄÐòÁоí»ýÉñ¾­ÍøÂçÄ£Ð͵Ľṹ£º

Figure 6£º¾í»ýÉñ¾­ÍøÂç½á¹¹¡£À´Ô´ÓÚCNTK½Ì³Ì¡£

ÉÏÃæÕâ¸öÍøÂçÒÀ´ÎչʾÁ˾í»ýÍøÂçÄ£Ð͵ÄÖ÷ÒªÒªËØ£º

ÊäÈë²ãµÄͼÏñ£»

¾í»ý²Ù×÷£»

¼¤»îº¯ÊýµÄÓ¦Óã»

³Ø»¯²Ù×÷£»

½«Êý¾Ýչƽ£¨Flatten£©£¬ÎªÊä³öµ½È«Á¬½Ó²ã×ö×¼±¸£»

È«Á¬½Ó²ã×¼±¸Êä³ö£»

softmaxÓ¦ÓÃÓÚ·ÖÀàÎÊÌâµÄÈ«Á¬½Ó²ã×÷ΪÊä³ö²ã¡£

ÏÂÃæÏêϸ½éÉÜÒ»ÏÂÔÚKERASÖÐÈçºÎ¶ÔÓ¦µØ½øÐбà³Ì´¦Àí¡£

Ê×ÏÈ£¬ÕâÊÇÒ»¸öÐòÁÐÄ£ÐÍ£¬Òò´ËÏÈÒªÉùÃ÷Ò»¸öÐòÁÐÄ£Ð͵ĶÔÏó£º

model=Sequential()

¾í»ýÊÇÓ¦ÓÃÒ»¸ö¾Ö²¿µÄ¹ýÂËÆ÷µ½Ô­Ê¼Êý¾ÝµÄ¹ý³Ì£¬±ÈÈçÏÂͼ¾ÍչʾÁËÒ»¸ö3x3µÄ¹ýÂËÆ÷Ó¦ÓÃÔÚÒ»¸ö7x7µÄͼÏñÉϹý³Ì¡£¼ÙÉèÔÚµ±Ç°²½£¬Õâ¸ö¹ýÂËÆ÷µÄÈ¨ÖØ¾­¹ýѧϰµÃµ½ÈçͼËùʾµÄÈ¨ÖØ½á¹û£¬ÔÚµ±Ç°²½¼ÌÐø½øÐоí»ý²Ù×÷¾ÍÊǽ«Õâ¸ö3x3µÄ¹ýÂËÆ÷´Ó×óÉϽÇÿ´ÎҪôÏòÓÒҪôÏòÏÂÒÆ¶¯Ò»¸ñ£¬ºÍ¶ÔÓ¦µÄͼÏñ¾Ö²¿µÄ3x3µÄÇøÓò½øÐÐÒÀÔªËØµã³ËÇóºÍµÃµ½¾í»ýµÄ½á¹û¡£ÒòΪÒÀ´ÎÒÆ¶¯£¬µ½×î±ßÉϵÄʱºò¹ýÂËÆ÷»á³¬³öͼÏñµÄ±ß½ç£¬Ò»°ã»á½«ÕâЩ¶ÔÓ¦µÄ¾í»ý½á¹ûɾ³ý£¬´Ó¶ø¾í»ýºóµÄÕÅÁ¿Î¬¶È»áÉÙÓÚԭʼͼÏñ¡£±ÈÈçÕâ¸öÀý×ÓÖÐԭͼΪ7x7£¬Ê¹ÓÃÒ»¸ö3x3µÄ¹ýÂËÆ÷¾í»ýÖ®ºó×îºóÁ½ÁкÍÁ½ÐнøÐоí»ýµÄʱºò»áʹ¹ýÂËÆ÷³¬¹ý±ß½ç£¬Òò´Ë×îºóµÄ¾í»ý½á¹ûÊÇÒ»¸ö5x5µÄͼÏñ¡£ÕâÀï¿ÉÒÔʹÓöà¸ö¹ýÂËÆ÷£¬Ã¿¸ö¹ýÂËÆ÷Ó¦ÓÃÒ»´Î£¬Ã¿´ÎÓ¦ÓòúÉúµÄ¾í»ý½á¹û¹¹³ÉÒþº¬²ãµÄÒ»²ã¡£±ÈÈç²ÉÓÃ16¸ö¹ýÂËÆ÷£¬Èç¹û²»É¾³ý±ß½çµÄ¹ýÂ˽á¹û£¬ÔòµÃµ½ÐµÄ[7x7x16]µÄÕÅÁ¿¡£

Figure 7£º¾í»ýÑÝʾ£¬À´Ô´ÓÚCNTK½Ì³Ì¡£

ÔÚKERASÀ¶ÔÓÚͼÏñÕâÖÖ¶þάÊý¾Ý£¬Ò»°ãʹÓÃConv2DÕâ¸ö¶þά¾í»ý²ã¡£Conv2DÓм¸¸ö±Ø±¸µÄ²ÎÊý£º

Ê×ÏÈÖ¸¶¨¹ýÂËÆ÷ÊýÁ¿ filters£¬ÊÇÒ»¸öÕûÊý£»

µÚ¶þÊÇÒªÖ¸¶¨¶þά¹ýÂËÆ÷µÄ´óС£¬±ÈÈç(3,3)£»

µÚÈýÒªÖ¸¶¨²½³¤£¬¼´ÑÓijÖáÒÆ¶¯µÄʱºòÊÇÒÀ´ÎÒÆ¶¯Ò»¸öÏñËØ»¹ÊǶà¸öÏñËØ£¬Ä¬ÈÏΪ1£»

µÚËÄÒªÖ¸¶¨²¹Æë²ßÂÔpadding£¬¼´ÊÇ·ñÒª½«Ôڱ߽çµÄ¾í»ý½á¹ûÈ¥µô¡£Èç¹ûֵΪ¡±same¡±£¬Ôò²»È¥µô£¬¾í»ý½á¹ûºÍÊäÈëͼÏñÓÐͬÑùµÄ¸ßºÍ¿í£»Èç¹ûֵΪ¡±valid¡±£¬Ôò²»»á´¦Àí¹ýÂËÆ÷»á³¬³ö±ß½çµÄÏñËØ¡£

×îºó£¬Èç¹û¾í»ý²ãÊǵÚÒ»²ã£¬ÄÇô»¹ÐèÒªÖ¸Ã÷ÊäÈëÊý¾ÝµÄά¶Èinput\_shape¡£ÒòΪһ°ãÓÃTensorFlow»òÕßCNTK×öºǫ́£¬ÊäÈëÊý¾ÝÒªÇóÊÇchannel_last£¬Òò´ËÊäÈëµÄԭʼά¶ÈΪ[Ñù±¾Á¿£¬¸ß£¬¿í£¬ÆµµÀ]£¬ÄÇôÕâÀïµÄά¶ÈÖ»ÐèҪȥµôÑù±¾Á¿¼´¿É£¬¼´Îª[¸ß£¬¿í£¬ÆµµÀÊý]£¬Ò»°ãÓÃX.shape[1:]¼´¿ÉµÃµ½¡£

¶ÔÓÚÉÏÃæµÄÀý×Ó£¬KERASÀïµÄµäÐÍд·¨ÊÇ£º

model.add(Conv2D(filters=16, kernel_size=(3, 3), strides=1, padding=¡±valid¡±, input_shape=xtrain.shape[1:]))

ÔÙ´ÎÒªÌí¼Ó¼¤»î²ãÒýÈ뼤»îº¯Êý£¬Í¨³£ÊÇÒ»¸ö·ÇÏßÐԵĺ¯Êý¡£¼¤»îº¯Êý¼È¿ÉÒÔͨ¹ýÔÚConv2DÀïÃæÖ¸¶¨activation=²ÎÊýÒýÈ룬Ҳ¿ÉÒÔͨ¹ýµ¥¶ÀÌí¼ÓActivation²ãÒýÈë¡£¾í»ýÉñ¾­ÍøÂç³£Óõļ¤»îº¯ÊýÊÇRectified Linear Unit£¬ ¼ò³Ærelu¡£¸Ãº¯ÊýÆäʵ¾ÍÊÇmax(0, x)£¬ÔÚ²ã´Î½ÏÉîµÄÍøÂçÖбÈÒÔǰ³£ÓõÄÈ¡ÖµÇø¼äÔÚ£¨0£¬1£©»òÕߣ¨-1£¬ 1£©Ö®¼äµÄsigmoidÀ༤»îº¯ÊýЧ¹ûºÃ£¬ÒòΪ²»´æÔÚÌݶÈÏûʧµÄÎÊÌâ¡£

Èç¹ûÊÇͨ¹ý²ÎÊý£¬ÔòÉÏÃæµÄ´úÂë¸ÄдΪ£º

model.add(Conv2D(filters=16, kernel\_size=(3, 3), strides=1, padding=¡±valid¡±, activation=¡¯relu¡¯)

Èç¹ûͨ¹ýÌí¼Ó¼¤»î²ãÒýÈ룬ÔòÔÚÉÏÃæµÄ´úÂëºóÌí¼Ó£º

model.add(Activation(¡®relu¡¯))

È»ºó½øÐеijػ¯²Ù×÷ÊÇÔÚ¾í»ýÉñ¾­ÍøÂçÖжÔͼÏñÌØÕ÷µÄÒ»ÖÖ´¦Àí£¬Í¨³£ÔÚ¾í»ý²Ù×÷ºÍ¼¤»îº¯ÊýÖ®ºó½øÐС£³Ø»¯²Ù×÷Êǽ«Ô­ÓÐÊäÈë°´ÕÕÒ»¶¨´óСÇзֳɻ¥²»½»²æµÄ¾Ö²¿ÇøÓò£¬Ä¿µÄÊÇΪÁ˼ÆËãÌØÕ÷ÔÚ¾Ö²¿µÄ³ä·Öͳ¼ÆÁ¿£¬´Ó¶ø½µµÍ×ÜÌåµÄÌØÕ÷ÊýÁ¿£¬·ÀÖ¹¹ý¶ÈÄâºÏºÍ¼õÉÙ¼ÆËãÁ¿¡£ÏÂͼչʾÁË×î´ó³Ø»¯·½·¨µÄÓ¦Óá£ÔÚÒ»¸ö6x6µÄͼÏñÉÏÓ¦ÓÃ3x3µÄ³Ø»¯²Ù×÷£¬½«Ô­ÊäÈë¾ØÕóÇиîΪ²»Ïཻ²æµÄ2x2ÇøÓò£¬Ã¿¸öÇøÓòµÄȡֵÊǶÔÓ¦Ô­ÊäÈë¾Ö²¿µÄ×î´óÖµ¡£

Figure 8£º×î´ó³Ø»¯²Ù×÷

¶ÔÓ¦ÓÚͼÏñµÄ×î´ó³Ø»¯²ãͨ¹ýMaxPooling2D£¬KERASÒ²Ö§³Öƽ¾ù³Ø»¯²ã£¬Çø±ðÔÚÓÚÈ¡¶ÔÓ¦¾Ö²¿µÄƽ¾ùÖµ×÷Ϊ³Ø»¯ºó½á¹û£¬·½·¨ÎªAveragePooling2D¡£¶ÔÓ¦ÉÏÃæµÄÀý×Ó£¬KERASµÄÃüÁîÈçÏ£º

model.add(MaxPooling2D(pool_size=(3, 3))

ΪÁËÊä³öµ½È«Á¬½Ó²ã£¬ÏÈÒª¶ÔÊý¾Ý½øÐÐչƽ£¨Flatten£©¡£ÕâÊÇÒòΪȫÁ¬½Ó²ãÖ»´¦Àí°üº¬Ñù±¾ÊýÔÚÄÚÒ»¹²¶þάµÄÊý¾Ý£¬ÒªÇóµÚһάÊÇÑù±¾Êý£¬µÚ¶þάÊÇËùÓÐÌØÕ÷µÄ¸öÊý¡£Òò´Ë¶ÔÓÚÒ»¸ö°üº¬2000¸öÑù±¾£¬Ã¿¸öÑù±¾ÊÇ28x28x3µÄСͼÏñµÄÊý¾Ý£¬Õ¹Æ½Ö®ºóÊÇÒ»¸ö2000x2352µÄ¾ØÕ󣬯äÖÐ2352ÊÇ28,28,3µÄ³Ë»ý¡£ÔÚKERASÀï½øÐÐչƽ·Ç³£¼òµ¥£¬ÔÚÉÏÃæµÄMaxPooling2D²ãÖ®ºóÌímodel.add(Flatten())¼´¿É£¬KERASÄÜ×Ô¼º·ÖÎö³öÊäÈëºÍÊä³öµÄά¶È¡£

ÔÚÇ°ÃæÕâЩ´¦ÀíÖ®ºó£¬µ«ÊÇÔÚÊä³ö֮ǰ£¬Í¨³£»áÌí¼ÓÒ»¸ö»òÕß¶à¸öÈ«Á¬½Ó²ã½øÒ»²½´¦ÀíÊý¾Ý¡£È«Á¬½Ó²ã¿ÉÒÔͨ¹ýDenseÖ¸³ö£¬Ö¸Ã÷Êä³öÉñ¾­Ôª¸öÊýºÍ¼¤»îº¯Êý¼´¿É£º

model.add(Dense(1000, activation=¡¯relu¡¯))

×îºóʹÓÃÒ»¸öÈ«Á¬½Ó²ã×÷ΪÊä³ö²ã£¬Í¬ÑùÒªÇóʹÓÃsoftmax¼¤»îº¯Êý£¬²¢Ê¹ÓøúÊä³öÀà±ðͬÑù¶àµÄÉñ¾­Ôª¸öÊý¡£±ÈÈçʶ±ð0¡ª9Ê®¸öÊý×Ö£¬ÄÇô¾ÍÓ¦¸Ãд×÷£º

model.add(Dense(10, activation=¡¯relu¡¯))

°ÑËùÓв½Öè×éºÏµ½Ò»Æð£¬ÎÒÃǾͿÉÒÔ½«Í¼6ÏÔʾµÄÒ»¸ö¾í»ýÉñ¾­ÍøÂçÄ£ÐÍÏàÓ¦µØÐ´ÎªKERAS´úÂëÁË£º

model=Sequential()model.add(Conv2D(filters=32, kernel_size=(3, 3), padding='same', input_shape=X_train.shape[1:], activation='relu'))model.add(MaxPooling2D(pool_size=(2, 2)))model.add(Conv2D(filters=64, kernel_size=(3, 3), padding='valid'))model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2)))model.add(Flatten())model.add(Dense(128, activation='relu')) model.add(Dense(num_classes, activation='softmax'))

ÊDz»ÊǺܼòµ¥£¿

ҪѵÁ·Õâ¸öÄ£Ðͷdz£¼òµ¥¡£ÎÒÃÇÏȱàÒëÕâ¸öÄ£ÐͲ¢ÏÔʾÆä¹Ø¼üÐÅÏ¢£º

model.compile(loss='categorical_crossentropy', optimizer='adagrad', metrics=['accuracy'])model.summary()

Figure 9£ºÄ£ÐÍÐÅÏ¢

ÎÒÃÇ¿´µ½Õâ¸öÄ£ÐÍÒ»¹²ÓÐ421642¸ö²ÎÊý£¬´ó¶àÀ´×ÔÓÚµ¹ÊýµÚ¶þ²ãµÄÈ«Á¬½Ó²ã¡£

ÄâºÏÕâ¸öÄ£ÐÍÒ²ºÜ¼òµ¥£º

model.fit(X_train, y_train, epochs=20, verbose=1, batch_size=10, validation_data = (X_test, y_test))

ÕâÀïʹÓÃ×î±ê×¼µÄfit·½·¨¡£ÆäÖÐÖ¸¶¨¼¸¸öºËÐIJÎÊý£º

ѵÁ·ÓÃÌØÕ÷Êý¾ÝX_train

ѵÁ·Óýá¹ûÊý¾Ýy_train

µü´ú´ÎÊýepochs

ÅúÁ¿´óСÓÃbatch_sizeÖ¸¶¨

verbose±íʾÏÔʾѵÁ·¹ý³ÌµÄÐÅÏ¢£¬Èç¹ûֵΪ0²»ÏÔʾÈκÎÖмäÐÅÏ¢£¬Èç¹ûΪ1ÏÔʾ°´ÅúÁ¿ÄâºÏµÄ½ø¶È£¬Èç¹ûΪ2ÔòÏÔʾÄâºÏ½á¹ûÐÅÏ¢¡£

ÁíÍâ¶ÁÕß»¹¿ÉÒÔÖ¸¶¨ÑéÖ¤Êý¾Ý¼¯£¬ÓÃvalidation_dataÕâ¸ö²ÎÊý±íʾ£¬Æä°üº¬Ò»¸ötuple£¬µÚÒ»¸öÔªËØÊÇÑéÖ¤ÓÃÌØÕ÷Êý¾Ý£¬µÚ¶þ¸öÊÇÑéÖ¤Óýá¹ûÊý¾Ý¡£

ÏÂÃæÎÒÃÇʹÓÃÕâ¸öÄ£ÐÍѵÁ·Ê¶±ð0-9ÕâÊ®¸öÊý×Ö£¬Ê¹ÓÃÖøÃûµÄMNISTÊý¾Ý¡£²»¹ýÔÚѵÁ·Ö®Ç°»¹ÐèÒªÌá¼°¶ÔÊý¾ÝµÄ´¦Àí£º

Ê×ÏȽ«Êý¾ÝÖØËÜΪ[Ñù±¾Êý£¬¸ß£¬¿í£¬É«²ÊͨµÀÊý]µÄ¸ñʽ¡£Õâ¸ö¿ÉÒÔͨ¹ýnumpy.reshape·½·¨À´ÊµÏÖ¡£ÒòΪkeras×Ô´øµÄMNISTÊý¾ÝÒѾ­ÊÇnumpyµÄ¶àά¾ØÕ󣬲¢ÇÒÊǵ¥É«µÄ£¬Òò´ËÉ«²ÊͨµÀÊýΪ1£¬Òò´ËÊý¾ÝÖØËÜ¿ÉÒÔÓÃÏÂÃæµÄÃüÁîʵÏÖ¡£¶ÁÕß¿É×ÔÐÐÖØËÜÑéÖ¤ÓÃÊý¾Ý¡£

X_train = X_train.reshape(X_train.shape[0], X_train.shape[1], X_train.shape[2], 1).astype(float)

Æä´Î£¬ÐèÒª½«Êý¾ÝµÄȡֵѹËõµ½[0£¬ 1]Ö®¼ä¡£ÕâÓÐÀûÓÚÄâºÏʱÓõÄËæ»úÌݶȵݽµËã·¨µÄÎȶ¨ºÍÊÕÁ²¡£Õâ¿ÉÒÔʹÓÃX_train /= 255.0 À´ÊµÏÖ¡£

×îºóÒª½«½á¹ûÊý¾Ý±äΪOne Hot CodeÐÎʽ¡£KERASÌṩÁËÒ»¸ö·Ç³£·½±ãµÄ·½·¨to_categoricalÀ´ÊµÏÖÕâ¸ö¹¦ÄÜ£º

y_train = keras.utils.to_categorical(y_train, len(set(y_train)))

ÏÂͼµÄ½á¹ûÏÔʾ¼´Ê¹ÊÇÕâ¸ö·Ç³£¼òµ¥µÄÄ£ÐÍ£¬ÆäÔÚÑéÖ¤Êý¾ÝÉϵÄÔ¤²â׼ȷÂʶ¼ÊǷdz£¸ßµÄ£¬´ïµ½ÁË99.14%¡£

ʹÓÃKERAS¿ÉÒԷdz£·½±ãµÄ¹¹Ôì×Ô¼ºµÄ¾í»ýÉñ¾­ÍøÂ磬¶ÔÓڱȽϸ´ÔÓµÄÇé¿ö£¬Ò²¿ÉÒÔʹÓÃÒѾ­ÑµÁ·ºÃµÄһЩ³£¼ûµÄ¸ßЧģÐÍ£¬±ÈÈçVGG16£¬Xception µÈ×öÇ¨ÒÆÑµÁ·À´ÄâºÏ×Ô¼ºµÄÊý¾Ý¡£

Figure 11£º VGG16½á¹¹

ÉÏͼÊÇÖøÃûµÄVGG16Ä£Ð͵Ľṹ¡£¸ù¾Ý¸Õ²ÅµÄѧϰ½á¹û£¬¶ÁÕß¿ÉÒÔºÜ¿ìµØÄ£·ÂÕâ¸ö½á¹¹´î½¨×Ô¼ºµÄÀàËÆÄ£ÐÍ£¬µ«ÊÇKERASÔÚapplication¿âÀïÒѾ­ÌṩÁËÏÖ³ÉѵÁ·ºÃµÄVGG16Ä£Ð͹©¶ÁÕß¶ÁÈëʹÓ᣶ÁÕß¿ÉÒÔÒýÓÃÕâ¸öÄ£ÐÍ£¬½«¶¥²ãÈ¥µôÓÃ×Ô¼ºµÄÊý¾ÝÖØÐÂѵÁ·£¬µ«ÊǵײãµÄ²ÎÊý½èÓÃVGG16ÒѾ­ÑµÁ·ºÃµÄÈ¨ÖØ¡£Õâ¾ÍÊÇÇ¨ÒÆÑ§Ï°µÄ˼·£¬¿ÉÒÔ´ó´ó½µµÍÐèҪѵÁ·µÄ²ÎÊýÊýÁ¿£¬¼Ó¿ìÐÂÄ£Ð͵Ŀª·¢¡£ÕâÀïʹÓÃÁËͨÓÃÄ£ÐÍÒÔ±ãÔÚÏÖÓеÄVGG16Ä£ÐÍÉϽøÐÐÐ޸ģº

model_vgg = VGG16(include_top = False, weights = 'imagenet', input_shape =(224,224,3))model = Flatten(name = 'flatten')(model_vgg.output)model = Dense(10, activation = 'softmax')(model)model_vgg_mnist = Model(model_vgg.input, model, name = 'vgg16')

ÕâÀïÊ×ÏÈÒýÓÃVGG16Ä£ÐÍ£¬µ«ÊÇͨ¹ý²ÎÊýinclude_top=FalseÖ¸¶¨Ç¨ÒƳý¶¥²ãÒÔÍâµÄÆäÓàÍøÂç½á¹¹µ½×Ô¼ºµÄÄ£ÐÍÖС£Weights=¡¯imagenet¡¯±íʾ½èÓõÄÈ¨ÖØÊÇÓÃImageNetÊý¾ÝѵÁ·³öÀ´µÄ¶î¡£

Æä´Î£¬Í¨¹ýº¯Êý·½·¨ÔÚÐ޸ĹýµÄVGG16Ä£ÐÍÉϹ¹ÔìÒ»¸öÐÂµÄ±âÆ½²ãÓÃÀ´Á¬½Óй¹ÔìµÄÈ«Á¬½Ó²ã£¬Õâ¸öÈ«Á¬½Ó²ã¸úÇ°ÃæµÄÄ£ÐÍûÓÐÇø±ð¡£×îºó°ÑÐ޸ĹýµÄVGG16Ä£ÐͺÍÐµĶ¥²ãµþ¼ÓÆðÀ´²¢¸³ÓèеÄÃû×Övgg16¡£ÕâÑù¾ÍµÃµ½ÁËÒ»¸ö»ùÓÚVGG16µÄÐÂÄ£ÐÍ¡£

ʹÓÃKERAS¹¹Ôìʱ¼äÐòÁÐÔ¤²âÄ£ÐÍ

ʱ¼äÐòÁÐÊÇÔÚÉÌÒµÊý¾Ý»òÕß¹¤³ÌÊý¾ÝÖо­³£³öÏÖµÄÒ»ÖÖÊý¾ÝÐÎʽ£¬ÊÇÒÔʱ¼äΪ´ÎÐòÅÅÁУ¬ÓÃÀ´ÃèÊöºÍ¼ÆÁ¿Ò»ÏµÁйý³Ì»òÕßÐÐΪµÄÊý¾ÝµÄͳ³Æ¡£±ÈÈçÿÌìÉ̵êµÄÊÕÈëÁ÷Ë®»òÕßij¸ö¹¤³§Ã¿Ð¡Ê±µÄ²úÆ·²ú³ö¶¼ÊÇʱ¼äÐòÁÐÊý¾Ý¡£Ò»°ãÑо¿µÄʱ¼äÐòÁÐÊý¾ÝÓÐÁ½ÖÖÀàÐÍ¡£×î³£¼ûµÄÊǸú×Ùµ¥Ò»µÄ¼ÆÁ¿Êý¾ÝËæÊ±¼ä±ä»¯µÄÇé¿ö£¬¼´Ã¿¸öʱ¼äµãÉÏÊÕ¼¯µÄÊý¾ÝÊÇÒ»¸öһά±äÁ¿£¬ÕâÖÖÊÇ×î³£¼ûµÄ£¬Í¨³£µÄʱ¼äÐòÁÐĬÈϾÍÊÇÕâÖÖÊý¾Ý£¬Ò²ÊDZ¾ÕÂÑо¿µÄ¶ÔÏó¡£ÁíÍâÒ»ÖÖʱ¼äÐòÁÐÊý¾ÝÊǶà¸ö¶ÔÏó»òÕß¶à¸öά¶ÈµÄ¼ÆÁ¿Êý¾ÝËæÊ±¼ä±ä»¯µÄÇé¿ö£¬¼´Ã¿¸öʱ¼äµãÉÏÊÕ¼¯µÄÊý¾ÝÊÇÒ»¸ö¶àά±äÁ¿£¬ÕâÖÖÒ»°ãÒ²±»³ÆÎª×ÝÏòÊý¾Ý£¨Longitudinal Data£©£¬µ«ÊDz»ÊôÓÚÕâÀï½éÉܵĶÔÏó¡£

ÔÚÕâÀïÎÒÃǽéÉÜÈçºÎ´î½¨Ò»¸öLSTMÉî¶ÈѧϰģÐÍÀ´¶ÔÔÚºº¿Ú²âÁ¿µÄ³¤½­Ã¿ÔÂÁ÷Á¿Êý¾Ý½øÐÐÔ¤²â½¨Ä£¡£¸ÃÊý¾ÝÀ´Ô´ÓÚDataMarket µÄʱ¼äÐòÁÐÊý¾Ý¿â£¬ÓɰĴóÀûÑÇĪÄÉʲ´óѧµÄͳ¼ÆÑ§½ÌÊÚRob Hyndman ´´½¨£¬ÊÕ¼¯ÁËÊýÊ®¸ö¹«¿ªµÄʱ¼äÐòÁÐÊý¾Ý¼¯¡£

ºº¿Ú³¤½­ÔÂÁ÷Á¿Êý¾Ý°üº¬´Ó 1865 Äê 1 Ôµ½ 1978 Äê 12 ÔÂÔÚºº¿Ú¼Ç¼µÄ³¤½­Ã¿ÔµÄÁ÷Á¿£¬×Ü¼Æ 1368 ¸öÊý¾Ýµã¡£¼ÆÁ¿µ¥Î»Î´Öª¡£

Figure 12£º³¤½­Ô¶ÈÁ÷Á¿Ê±¼äÐòÁÐ

ÔÚÒ»°ãµÄʱ¼äÐòÁн¨Ä£ÖУ¬¶¼ÐèÒª¼ìÑéÊý¾ÝµÄƽÎÈÐÔ£¬ÒòΪ´«Í³Ê±¼äÐòÁн¨Ä£¶¼Êǽ¨Á¢ÔÚÆ½ÎÈÊý¾ÝµÄ¼ÙÉèÖ®ÉÏ¡£Õâ¸öÊý¾Ý¾ß±¸·Ç³£Ç¿µÄÄê¶ÈÖÜÆÚÐÔ¡£Ê¹Óô«Í³µÄͳ¼Æ¼¼Êõ½¨Ä£µÄʱºò¶¼ÐèÒªÕì²âÖÜÆÚÐÔ£¬²¢Ïû³ýÖ®£¬¶ÔÏû³ýÖÜÆÚÐÔÖ®ºóµÄÊý¾ÝÔËÓÃARIMAÄ£Ðͽ¨Ä£¡£

Figure 13£º³¤½­Ô¶ÈÁ÷Á¿¾Ö²¿ºÍÒÆ¶¯Æ½»¬½á¹û

ÎÒÃÇ¿ÉÒÔͨ¹ýÖÜÆÚͼÆ×·¨£¨Periodogram£©À´µÃµ½Ö÷ÒªµÄÖÜÆÚ·ù¶È¡£ÔÚPythonÖпÉÒÔʹÓÃscipy.signal.periodogramÀ´µÃµ½ÖÜÆÚͼÆ×¡£ÔÚÕâÀïÎÒÃDz»ÊÇʹÓÃԭʼÊý¾Ý£¬¶øÊÇʹÓÃԭʼÊý¾ÝµÄ×ÔÏà¹Øº¯ÊýµÄÖÜÆÚͼÆ×À´¼ÆËãÖ÷ÒªÖÜÆÚ£¬ÕâÑù¿ÉÒÔµÖÏûÔëÒôµÄÓ°Ïì¡£¶Ô¶ÁÈëpandas DataFrameµÄԭʼÊý¾ÝtsÔËÐÐÏÂÃæµÄ³ÌÐòÎÒÃÇ¿ÉÒԵõ½ÈçϵÄÖÜÆÚͼÆ×ºÍ¼ÆËãµÃµ½µÄÖ÷ÒªÖÜÆÚ³¤¶È¡£

import statsmodels.api as smfrom statsmodels.tsa.stattools import acffrom scipy import signalimport peakutils as peakacf_x, acf_ci = acf(ts, alpha=0.05, nlags=36)fs=1f, Pxx_den = signal.periodogram(acf_x, fs)index = peak.indexes(Pxx_den)cycle=(1/f[index[0]]).astype(int)fig = plt.figure()ax0 = fig.add_subplot(111)plt.vlines(f, 0, Pxx_den)plt.plot(f, Pxx_den, marker='o', linestyle='none', color='red')plt.title('Identified Cycle of %i' % (cycle))plt.xlabel('frequency [Hz]')plt.ylabel('PSD [V**2/Hz]')plt.show()print( index, f, Pxx_den)

Figure 14£ºÖÜÆÚͼÆ×

ºÜÃ÷ÏÔÓÐÒ»¸öÖÜÆÚΪ 12 ¸öÔµļ¾½ÚÐÔ¡£ËäÈ»¿¼Âǵ½Õâ¸öÊý¾ÝµÄ±¾ÖÊÊdz¤½­Ë®ÎÄ×ÊÁÏ£¬ 12 ¸öÔµÄÖÜÆÚÊǷdz£×ÔÈ»µÄÔ¤ÆÚ£¬µ«ÊÇÕâ¸ö·½·¨Õ¹Ê¾ÁË¶Ô ACF ÐòÁÐÔËÓÃÖÜÆÚͼ·¨£¨periodogram£©ÕÒ¼¾½ÚÐÔÖÜÆÚµÄ¿É¿¿ÐÔ¡£ÔÚ´«Í³·½·¨ÀÕâÀïÐèҪͨ¹ýÈ¡¼ä¸ôΪ12 µÄ²î·ÖÀ´Ïû³ýÖÜÆÚÐÔ£¬µÃµ½Ò»¸ö¾¡¿ÉÄÜÆ½ÎȵÄʱ¼äÐòÁУ¬½ø¶ø²ÉÓÃARIMAÄ£Ðͽ¨Ä£¡£ÔÚPythonÀµ¥ÖÜÆÚµÄʱ¼äÐòÁÐÊý¾Ý£¬ÖªµÀÖÜÆÚµÄ³¤¶ÈÒÔºó¿ÉÒÔÖ±½ÓʹÓü¾½ÚÐÔARIMAÄ£ÐÍ£¨SARIMA£©À´ÑµÁ·¡£

µ«ÊÇÔÚʹÓÃÑ­»·Éñ¾­ÍøÂçÄ£Ð͵ÄʱºòÎÒÃDz»Óÿ¼ÂÇÕâЩÇé¿ö£¬¿ÉÒÔÖ±½ÓʹÓó¤¶Ì¼ÇÒäÄ£ÐÍ¡£´ËÍ⣬ÔÚʹÓÃLSTMÕâÖÖÐòÁÐÄ£Ð͵ÄʱºòÔÚʹÓÃLSTM¶ÔÕâÖÖµ¥Ò»Ê±¼äÐòÁнøÐн¨Ä£µÄʱºò£¬Ò»°ãͨ¹ýһϲ½Ö裺

½«Êý¾Ý±ê×¼»¯Îª[0£¬1]Çø¼ä¡£

°´ÕÕLSTMµÄÒªÇ󣬽«ÊäÈëÊý¾Ý×é֯Ϊ[Ñù±¾Êý£¬Ê±¼ä²½£¬ÌØÕ÷±äÁ¿Êý]µÄÈýλ¸ñʽÀ´×éÖ¯¡£

¶¨ÒåÒ»¸öLSTMÉî¶ÈѧϰģÐÍ£¬Í¨³£ÎªÒ»¸öÐòÁÐÄ£ÐͶÔÏó£¬Öð²ãÌí¼ÓLSTM²ã»òÕ߯äËû²ã£¬×îºóͨ¹ýÒ»¸öÈ«Á¬½Ó²ãÊä³öµ½Êä³ö²ã¡£

×îºó¶ÔÐèÒªµÄʱ¼ä¶Î½øÐÐÔ¤²â¡£

Ê×ÏȶÔÊý¾Ý½øÐбê×¼»¯£¬ÎÒÃÇʹÓÃsklearn°üÀïµÄMinMaxScalerº¯Êý£º

scaler = MinMaxScaler(feature_range=(0, 1)) trainstd = scaler.fit_transform(train.values.astype(float) .reshape(-1, 1))teststd = scaler.transform(test.values.astype(float).reshap

Æä´Î£¬ÎÒÃǽ«ÑµÁ·Êý¾ÝºÍ²âÊÔÊý¾Ý×éÖ¯³ÉÐèÒªµÄ¸ñʽ£¬Õâ¸ö¸ñʽÓëÎÒÃǽ«Òª½¨Á¢µÄLSTMÄ£ÐÍÓйء£ÕâÀïÎÒÃǶÔÿ¸öÊäÈë¹¹ÔìÒ»¸öLSTMÉñ¾­Ôª£¬Ò»¸ö60¸öÊäÈëµ¥Ôª£¬Ã¿Ò»¸ö¶ÔÓ¦Ò»¸öʱ¼ä²½¡£Õâ60¸öµ¥ÔªµÄÊä³ö»á×÷Ϊһ¸öÈ«Á¬½Ó²ãµÄÊäÈ룬Õâ¸öÈ«Á¬½Ó²ãÖ±½Ó²úÉúÏÂK¸öÁ¬ÐøÊ±¼ä²½µÄÊä³öÔ¤²â¡£×÷Ϊ·ÀÖ¹¹ý¶ÈÄâºÏµÄÕýÔò»¯ÊֶΣ¬ÎÒÃÇÔÚLSTM²ãºÍÈ«Á¬½Ó²ã Ö®¼ä¼ÓÁËÒ»¸öDropout²ã¡£Õâ¸öDropout²ãÔÚѵÁ·µÄʱºò»áËæ»ú·ÅÆúÒ»²¿·ÖÈ¨ÖØµÄ¸üУ¬µ«ÊÇÔÚ½øÐÐÔ¤²âµÄʱºòËùÓÐÈ¨ÖØ¶¼»á±»Óõ½¡£

Figure 15£ºLSTMÍøÂç½á¹¹

¶ÔÓÚÕâÑùµÄÍøÂç½á¹¹£¬ÎÒÃÇÐèÒªÈçϵÄÒ»¸öº¯ÊýÀ´¶¨ÒåÎÒÃǵÄÊý¾Ý£¬¼´½«Êý¾Ý×éÖ¯³ÉΪ[ÅúÁ¿Êý£¬Ê±¼ä²½Êý£¬ÖͺóÌØÕ÷Êý]µÄÐÎʽ¡£Õâ¸ö¿ÉÒÔͨ¹ýÈçϵĺ¯ÊýÀ´ÊµÏÖ£º

def create_dataset(dataset, timestep=1, look_back=1, look_ahead=1): from statsmodels.tsa.tsatools import lagmat import numpy as np ds = dataset.reshape(-1, 1) dataX = lagmat(dataset, maxlag=timestep*look_back, trim='both', original='ex') dataY = lagmat(dataset[(timestep*look_back):], maxlag=look_ahead, trim='backward', original='ex') dataX = dataX.reshape(dataX.shape[0], timestep, look_back)[:-(look_ahead-1)] return np.array(dataX), np.array(dataY[:-(look_ahead-1)])

Ö´ÐÐÏÂÃæµÄÃüÁî¾Í¿ÉÒÔÉú³ÉËùÐèÊý¾Ý£º

lookback=1lookahead=24timestep=60trainX, trainY = create_dataset(trainstd, timestep=timestep, look_back=lookback, look_ahead=lookahead)trainX, trainY = trainX.astype('float32'), trainY.astype('float32')truthX, truthY = create_dataset(truthstd, timestep=timestep, look_back=lookback, look_ahead=lookahead)

ÓÐÁËÈçͼ15µÄÍøÂçͼÒԺ󣬾ͿÉÒÔ¿ªÊ¼¶¨ÒåÎÒÃǵÄLSTMÉî¶ÈѧϰģÐÍ¡£

batch_size=100model = Sequential()model.add(LSTM(48, batch_size=batch_size, \input_shape=(timestep, lookback), kernel_initializer='he_uniform')) model.add(Dropout(0.15) )model.add(Dense(lookahead))model.compile (loss='mean_squared_error', optimizer='adam')

µ÷ÓÃfit·½·¨¾Í¿ÉÒÔ¿ìËÙµÄѵÁ·Õâ¸öÄ£ÐÍ¡£ÎÒÃÇÖ¸¶¨µü´ú20´Î£¬Ð¡ÅúÁ¿ÊýΪ100£©£º

model.fit(trainX, trainY, epochs=20, batch_size=batch_size, verbose=1)

ÏÂͼչʾÁËÄâºÏ¹ý³ÌµÄÐÅÏ¢£º

Figure 16£ºLSTMÄâºÏ¹ý³ÌÐÅÏ¢

ÄÇôÕâ¸öÄ£Ð͵ÄÄâºÏЧ¹ûÈçºÎÄØ£¿

Figure 17£ºLSTMÄâºÏ½á¹û

ÎÒÃÇ¿´µ½ÄâºÏЧ¹û»¹²»´í¡£Æ½¾ù¾ø¶ÔÎó²î°Ù·Ö±È£¨MAPE£©Ö»ÓÐ25%²»µ½£¬±ÈÓô«Í³µÄSARIMAÄ£ÐÍЧ¹ûÒªºÃµã¡£Æä´Î£¬LSTMÄ£ÐÍÒ»´ÎÊä³öδÀ´24¸öʱ¼äµãµÄÔ¤²âÖµ£¬Ê¹ÓÃÆðÀ´±ÈÓÃSARIMAµü´úÔ¤²â·½±ãºÜ¶à¡£ÁíÍâÐèÒªÖ¸³öµÄÊÇÎÒÃÇÒ²¿ÉÒÔÖ±½ÓÔÚÄ£ÐÍÖÐÖ¸¶¨Ëðʧº¯ÊýΪMAPE£¬ÕâÑù¸üºÃÓÅ»¯ºâÁ¿Ö¸±ê¡£

С½á

ÔÚÕâÆª¶ÌÎÄÖУ¬ÎÒÃǽéÉÜÁËÒ»¸öĿǰÕýÔÚÁ÷ÐÐÆðÀ´µÄÉî¶Èѧϰ½¨Ä£»·¾³KERAS¡£Õâ¸ö½¨Ä£»·¾³Ïà¶ÔÓÚ´«Í³µÄ¼ÆËã»·¾³£¬±ÈÈçCNTK£¬TensorFlow£¬TheanoµÈ¾ßÓгéÏóÐԸߣ¬Ò×ÓÃÐԺõÄÌØµã£¬Í¬Ê±ÓÖÒÀÍÐÓÚÕ⼸ÖÖ¼ÆËã»·¾³£¬¾ßÓÐÒ»¶¨µÄ¿ÉÍØÕ¹ÐÔ£¬·Ç³£ÊʺÏÓÚ´ÓÊÂÉî¶ÈѧϰµÄʵ¼ùÕßʹÓá£

ÎÒÃÇ¿´µ½Ê¹ÓÃKERAS¿ÉÒԷdz£Ö±¹ÛµØÃèÊöÉñ¾­ÍøÂç½á¹¹£¬¼¸ºõ¿ÉÒÔ´ïµ½Ëù¼û¼´ËùµÃµÄÇé¿ö¡£ÎÒÃÇÔÚÎÄÖл¹·Ö±ð½éÉÜÁËÈýÖÖÁ÷ÐеÄÓ¦ÓÃÁìÓò£¬·Ö±ðÊÇ£º

Éî¶ÈÍÆ¼öÄ£ÐÍ£¬ÔËÓÃǶÈë¼¼Êõ¿ÉÒÔ½«²»Í¬ÀàÐ͵ÄÐÅÏ¢Óлú½áºÏÔÚÒ»Æð¹¹ÔìÒ»¸öÉî¶ÈÉñ¾­ÍøÂçÍÆ¼öϵͳ¡£

ͼÏñʶ±ðÄ£ÐÍ£¬ÔËÓöà²ã¾í»ýÉñ¾­ÍøÂç¶ÔͼÏñ½øÐÐÇиî·ÖÎö£¬µÃµ½Ò»¸ö¾«¶ÈºÜºÃµÄÊÖдÊý×Ö·ÖÀàÆ÷¡£Í¬ÑùµÄ¼¼ÊõºÍÄ£ÐÍ¿ÉÒÔÖ±½ÓÒÆÖ²µ½ÆäËûÎïÌåʶ±ðÊý¾ÝÉÏ£¬±ÈÈçCIFAR10µÈ¡£ÎÒÃÇÒ²½éÉÜÁËÔËÓÃÒѾ­ÑµÁ·ºÃµÄÏÖ³ÉÄ£ÐͽøÐÐÇ¨ÒÆÑ§Ï°µÄÊֶΣ¬¼õÉÙÄâºÏµÄ²ÎÊýÁ¿£¬ÔÚ±£³ÖÒ»¶¨¾«¶ÈµÄÇé¿öÏÂÌá¸ßѵÁ·ËÙ¶È¡£

¼òµ¥Ê±¼äÐòÁÐÔ¤²âÄ£ÐÍ£¬ÔËÓó¤¶Ì¼ÇÒ䣨LSTM£©Éñ¾­ÍøÂçÄ£ÐÍÀ´ÓÐЧԤ²â¾ß±¸Ò»¶¨ÖÜÆÚÐÔµÄʱ¼äÐòÁÐÄ£ÐÍ¡£Ò»¸ö·Ç³£¼òµ¥µÄµ¥²ãLSTMÄ£ÐͼȿÉÒÔ´ïµ½¶¨ÖƵÄSARIMAÄ£Ð͵ÄÔ¤²â¾«¶È¡£

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

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

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

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