¼Ì Theano¡¢Caffe Ö®ºó£¬ÓÖÒ»¸öÓɸßУÖ÷µ¼µÄÉî¶Èѧϰ¿ò¼Ü¿ªÔ´ÁË£¬¶øÇÒ»¹Êǹú²ú¡£
Éî¶Èѧϰ¿ò¼ÜÔ½À´Ô½¶à£¬Ö÷µ¼µÄÍŶÓÒ²´Ó¸ßУÑо¿»ú¹¹½¥½¥×ªÏòÁ˿Ƽ¼¾ÞÍ·¡£µ«ÊÇ£¬Ñ§½çÔÚÕâÒ»ÁìÓòµÄÁ¦Á¿²»ÈݺöÊÓ¡£½ñÈÕ¡£Ç廪´óѧ¿ª·¢ÁËÒ»¸öÃûΪ¼Æͼ£¨Jittor£©µÄÉî¶Èѧϰ¿ò¼Ü¡£ÕâÒ»¿ò¼ÜÓÐÍûΪÉî¶ÈѧϰÉçÇøÌṩеķ½°¸£¬Ò²Äܹ»Íƶ¯Éî¶Èѧϰ¿ò¼Ü¹ú²ú»¯µÄ½ø³Ì¡£
¾ÝϤ£¬¼Æͼ£¨Jittor£ºJust in Time£©ÊÇÒ»¸ö²ÉÓÃÔªËã×Ó±í´ïÉñ¾ÍøÂç¼ÆËãµ¥Ôª¡¢ÍêÈ«»ùÓÚ¶¯Ì¬±àÒ루Just-in-Time£©µÄÉî¶Èѧϰ¿ò¼Ü£¬ÆäÖ÷ÒªÌØÐÔΪԪËã×ÓºÍͳһ¼ÆËãͼ¡£
¾Ý¹ÙÍø½éÉÜ˵£º¡¸Ñо¿ÍŶӽ«Éñ¾ÍøÂçËùÐèµÄ»ù±¾Ëã×Ó¶¨ÒåΪԪËã×Ó¡¹£¬ÔªËã×ӷdz£µ×²ã£¬Í¨¹ýÏ໥ÈںϿÉÒÔÍê³É¸´ÔÓµÄÉî¶Èѧϰ¼ÆË㣬ÌåÏÖ³öÁËÒ×ÓÚʹÓõÄÌص㡣²¢ÇÒÑз¢ÍŶӱíʾ£¬²ÉÓÃÔªËã× Jittor Òѳ¬Ô½ Numpy£¬Äܹ»ÊµÏÖ¸ü¸´ÔÓ¸ü¸ßЧµÄ²Ù×÷¡£
¶øÁíÒ»²ãÃ棬ͳһ¼ÆËãͼÔòÊÇÈÚºÏÁ˾²Ì¬¼ÆËãͼºÍ¶¯Ì¬¼ÆËãͼµÄÖî¶àÓŵ㣬ÔÚÒ×ÓÚʹÓõÄͬʱ£¬Ìṩ¸ßÐÔÄܵÄÓÅ»¯¡£»ùÓÚÔªËã×Ó¿ª·¢µÄÉî¶ÈѧϰģÐÍ£¬¿ÉÒÔ±»¼ÆͼʵʱµØ×Ô¶¯ÓÅ»¯²¢ÇÒÔËÐÐÔÚÖ¸¶¨µÄÓ²¼þÉÏ£¬Èç CPU¡¢GPU¡£
Ä¿Ç° Jittor ÒÑ¿ªÔ´£¬Óû§¿ÉÒÔ²ÉÓà pip µÈ·½·¨ÏÂÔØʹÓá£
Jittor ¹ÙÍø£ºhttps://cg.cs.tsinghua.edu.cn/jittor/
ÏîÄ¿µØÖ·£ºhttps://github.com/Jittor/jittor
¾Ý¹ÙÍø½éÉÜ£¬Jittor ÔÚÉè¼Æʱ±ü³ÖÒ×Óá¢Áé»î¡¢¼´Ê±µÄÉè¼ÆÀíÄ
Jittor ×÷ΪȫеÄÉî¶Èѧϰ¿ò¼Ü£¬Óм¸´óÐÂÌØÐÔÖµµÃ¹Ø×¢¡£Ê×ÏÈ£¬Jittor ²ÉÓÃÁËÔªËã×ӵĸÅÄ½«¸÷ÖÖ»ù±¾¼ÆË㶨ÒåΪԪËã×Ó£¬²¢Í¨¹ý½áºÏ²»Í¬ÔªËã×Ó£¬ÊµÏÖÉî¶ÈѧϰÖеĸ÷ÏîËã×Ó¹¦ÄÜ¡£
ÔªËã×ÓÈںϡ£
Æä´Î£¬ÔÚËã×ÓµÄÉèÖÃÉÏ£¬ÍŶӽ«ÔªËã×ӵķ´Ïò´«²¥½øÐÐÁ˱հü£¬¼´ÔªËã×ӵķ´Ïò´«²¥Ò²ÊÇÔªËã×Ó¡£ÕâÑù±ÜÃâÁËÖظ´¿ª·¢¡£´ËÍ⣬»¹Ö§³Ö¼ÆËãÈÎÒâ¸ß½×µ¼Êý¡£
¸ß½×µ¼Êý¼°·´Ïò´«²¥±Õ°ü¡£
È»ºó£¬ÔÚ±à³ÌÓïÑÔÉÏ£¬Jittor ²ÉÓÃÁËÁé»î¶øÒ×ÓÃµÄ Python¡£Óû§¿ÉÒÔʹÓÃËü£¬±àдԪËã×Ó¼ÆËãµÄ Python ´úÂ룬Ȼºó Jittor
½«Æ䶯̬±àÒëΪ C++£¬ÊµÏÖ¸ßÐÔÄÜ¡£
Ëã×Ó¶¯Ì¬±àÒë¡£
¸üÖØÒªµÄÊÇ£¬Jittor ÄÚÖÃÁËÓÅ»¯±àÒë±é£¨complier pass£©¹¦ÄÜ£¬ºÍ LLVM ¼æÈÝ¡£ÓÅ»¯¹ý³Ì»á¸ù¾ÝÔËÐеÄÓ²¼þ¶ø¶¨£¬ÒÔÏÂΪÒÑÖ§³ÖµÄÓÅ»¯±àÒë±é¡£
×Ô¶¯ÓÅ»¯¡£
ÔÚÄÚ´æ¹ÜÀíÉÏ£¬CPU ºÍ GPU ÄÚ´æͳһ¹ÜÀí¡£GPU ÄÚ´æ²»¹»µÄʱºò»áµ÷Óà GPU¡£
ͳһÄÚ´æ¹ÜÀí¡£
¶øÔÚ½Ó¿Ú·½Ã棬Jittor ͬʱÌṩÁËͬ²½ºÍÒì²½½Ó¿Ú£¬Çл»²»»áÔì³ÉÐÔÄÜËðʧ¡£´Ó¶ø´øÀ´ÁËÒ×ÓÃÐԺ͸ßЧÂÊ¡£
¸ßЧͬ²½Òì²½½Ó¿Ú¡£
×îºóÖµµÃ×¢ÒâµÄÊÇ£¬ÎªÁË°ïÖú Jittor µÄ·¢Õ¹£¬²¢ÎüÊÕÓÅÐã¿ò¼ÜµÄÌØÐÔ¡£Jittor ²ÉÓÃÁËºÍ PyTorch ÏàËƵÄÄ£¿é»¯½Ó¿Ú£¬²¢Óи¨Öúת»»½Å±¾£¬»¹ÓÐºÍ PyTorch Ò»ÑùµÄ Numpy+pickle ÐÒ飬ʹµÃÁ½ÕßµÄÄ£ÐÍ¿ÉÒÔ»¥Ïà¼ÓÔغÍʹÓá£
Ä£ÐÍǨÒÆ¡£
ÓÐÁËÈç´ËÖÚ¶àµÄÌØÐÔ£¬¹À¼ÆÓÃÀ´Ð´Ä£ÐÍ»áÓзdz£ºÃµÄÌåÑé¡£´ËÍ⣬Jittor ʹÓà Python ºÍ C ++±àд£¬Ò²Ö§³Ö GPU Óë CUDA¡£
Jittor µÄÐÔÄÜÈçºÎ£¬¹Ù·½Ò²ÌṩÁ˲âÆÀ½á¹û½øÐвο¼¡£Ä¿Ç° ResNet¡¢VGG¡¢SSD¡¢DeepLab¡¢LSGAN µÈ¶à¸öÍøÂçÄ£ÐÍÒѾÔÚ Jittor ƽ̨ʵÏÖ£¬¿É¹©Óû§Ê¹Óá£ÓëͬÀàÐÍ¿ò¼ÜÏà±È£¬Jittor ÔÚÊÕÁ²¾«¶ÈÒ»ÖÂÇé¿öÏ£¬ÍÆÀíËÙ¶ÈÈ¡µÃÁË 10%-50% µÄÐÔÄÜÌáÉý¡£
Jittor Ç°¶ËÓïÑÔΪ Python¡£Ç°¶ËʹÓÃÄ£¿é»¯µÄÉè¼Æ£¬ÀàËÆÓÚ PyTorch£¬Keras£¬ºó¶ËÔòʹÓøßÐÔÄÜÓïÑÔ±àд£¬Èç CUDA£¬C++¡£Jittor ¹ÙÍøÄ¿Ç°ÒÑÌṩÁËʾÀý´úÂ룬ÎÒÃÇ¿ÉÒÔÀ´·ÖÎöһϡ£
ÏÂÃæµÄ´úÂëÑÝʾÁËÈçºÎÒ»²½Ò»²½Ê¹Óà Python ´úÂ룬´ÓÍ·¶ÔÒ»¸öË«²ãÉñ¾ÍøÂ罨ģ¡£
import?jittor?as?jt??from?jittor?import?Module??from?jittor?import?nn??class?Model(Module):?????def?__init__(self):?????????self.layer1?=?nn.Linear(1,?10)?????????self.relu?=?nn.Relu()?????????self.layer2?=?nn.Linear(10,?1)?????def?execute?(self,x)?:?????????x?=?self.layer1(x)?????????x?=?self.relu(x)?????????x?=?self.layer2(x)?????????return?x??def?get_data(n):?#?generate?random?data?for?training?test.?????for?i?in?range(n):?????????x?=?np.random.rand(batch_size,?1)?????????y?=?x*x?????????yield?jt.float32(x),?jt.float32(y)??model?=?Model()??learning_rate?=?0.1??optim?=?nn.SGD(model.parameters(),?learning_rate)??for?i,(x,y)?in?enumerate(get_data(n)):?????pred_y?=?model(x)?????loss?=?((pred_y?-?y)**2)?????loss_mean?=?loss.mean()?????optim.step?(loss_mean)?????print(f"step?{i},?loss?=?{loss_mean.data.sum()}")?
ÒÔÉÏΪʵÏÖÒ»¸ö¼òµ¥µÄÈ«Á¬½ÓÉñ¾ÍøÂçµÄ´úÂë¡£¿ÉÒÔ¿´µ½£¬ÀàËÆÓÚ PyTorch£¬Ö»ÐèÒªµ¼Èë°ü£¬²ÉÓÃÀà¼Ì³ÐµÄ·½Ê½¶¨ÒåÄ£ÐÍ¡¢Êý¾Ý´¦Àí£¨·ÖÅúµÈ£©·½Ê½£¬²¢ÉèÖÃѵÁ·Ñ»·¼´¿É¡£´ÓÉÏÊÖÄѶÈÀ´¿´£¬ÊìϤ PyTorch µÄÓû§¿ÉÒÔÖ±½ÓÉÏÊÖ£¬ÉõÖÁûÓÐÒòΪ±äÁ¿Ãû²»Í¬¶ø´øÀ´Ó°Ïì¡£
¾Ý¹ÙÍø½éÉÜ£¬Jittor µÄ¿ª·¢ÍŶÓÀ´×ÔÇ廪´óѧ¼ÆËã»úϵµÄͼÐÎѧʵÑéÊÒ£¬ÊµÑéÊÒ¸ºÔðÈËΪºúÊÂÃñ½ÌÊÚ¡£
¸ÃʵÑéÊÒ³ÉÁ¢ÓÚ 1998 Äê 3 Ô£¬2007 Äê·¢Õ¹³ÉΪÇ廪´óѧ¿ÉÊÓýÌåÑо¿ÖÐÐÄ£¬2010 Äê»ñÅú³ÉΪ±±¾©Êй¤³Ì¼¼ÊõÑо¿ÖÐÐÄ£¬Í¬ÄêºÍÌÚѶ¹«Ë¾ºÏ×÷³ÉÁ¢Ç廪-ÌÚѶ»¥ÁªÍø´´Ð¼¼ÊõÁªºÏʵÑéÊÒ£¬²¢ÓÚ 2018 Ä꣬³ÉÁ¢±±¾©ÐÅÏ¢¿ÆѧÓë¼¼Êõ¹ú¼ÒÑо¿ÖÐÐÄϵĿÉÊÓýÌåÖÇÄܼÆËãÍŶӡ£Ä¿Ç°ÓнÌÊÚ 2 Ãû¡¢¸±½ÌÊÚ 3 Ãû¡¢ÖúÀíÑо¿Ô± 1 Ãû¡¢²©Ê¿ºó 4 ÃûºÍÑо¿Éú 50 ¶àÃû¡£
Jittor ÏîÄ¿µÄÖ÷ÒªÑз¢Ö÷Á¦ÎªÊµÑéÊÒµÄÁº¶Ü¡¢Ñî¹úìÇ¡¢Ñî¹ú쿺ÍÖÜÎÄÑóµÈµÈ²©Ê¿Éú£¬´ËÍâ¸ÃÏîÄ¿Ò²µÃµ½ÁËÇ廪-ÌÚѶÁªºÏʵÑéÊÒµÄ×ÊÖúºÍÖ§³Ö¡£
ÁìȡרÊô 10ÔªÎÞÃż÷ȯ
˽Ïí×îР¼¼Êõ¸É»õ