1.å¦ä½ç³»ç»å°èªå¦ Python
2.9987 用The底层ano实现Nesterov momentum的正确姿势
3.Bert4keras开源框架源码解析(一)概述
4.pythonè½åä»ä¹
å¦ä½ç³»ç»å°èªå¦ Python
æ¯å¦é常æ³å¦å¥½ Pythonï¼ä¸æ¹é¢è¢«çäºçº ç¼ ï¼ä¸ç´æ²¡è½å¨æï¼å¦ä¸æ¹é¢ï¼æ å¿å¦ä¹ ææ¬å¤ªé«ï¼å¿éé»é»æ²çéå é¼ï¼å¹¸è¿çæ¯ï¼Python æ¯ä¸é¨åå¦è å好çç¼ç¨è¯è¨ï¼æ³è¦å®å ¨ææ¡å®ï¼ä½ ä¸å¿ è±ä¸å¤ªå¤çæ¶é´åç²¾åã
Python ç设计å²å¦ä¹ä¸å°±æ¯ç®åæå¦ï¼ä½ç°å¨ä¸¤ä¸ªæ¹é¢ï¼
è¯æ³ç®æ´æäºï¼ç¸å¯¹ Ruby å Perlï¼å®çè¯æ³ç¹æ§ä¸å¤ä¸å°ï¼å¤§å¤æ°é½å¾ç®åç´æ¥ï¼ä¸ç©å¿çå¦ã
åå ¥ç¹å¾å¤ï¼Python å¯ä»¥è®©ä½ å¯ä»¥åå¾å¤äºæ ï¼ç§å¦è®¡ç®åæ°æ®åæãç¬è«ãWeb ç½ç«ã游æãå½ä»¤è¡å®ç¨å·¥å ·ççççï¼æ»æä¸ä¸ªæ¯ä½ æå ´è¶£å¹¶ä¸æ¿ææå ¥æ¶é´çã
åºè¯ä¸å¤è¯´ï¼å¦ä¼ä¸é¨è¯è¨çæ·å¾åªæä¸ä¸ªï¼ Getting Started
¶ èµ·æ¥é¶æ®µ
ä»»ä½ä¸ç§ç¼ç¨è¯è¨é½å å«ä¸¤ä¸ªé¨åï¼ç¡¬ç¥è¯å软ç¥è¯ï¼èµ·æ¥é¶æ®µç主è¦ä»»å¡æ¯ææ¡ç¡¬ç¥è¯ã
硬ç¥è¯
â硬ç¥è¯âæçæ¯ç¼ç¨è¯è¨çè¯æ³ãç®æ³åæ°æ®ç»æãç¼ç¨èå¼çï¼ä¾å¦ï¼åéåç±»åã循ç¯è¯å¥ãåæ¯ãå½æ°ãç±»ãè¿é¨åç¥è¯ä¹æ¯å ·ææ®éæ§çï¼çä¸å»æ¯ææ¡äºä¸ç§è¯æ³ï¼å®é æ¯å»ºç«äºä¸ç§æç»´ãä¾å¦ï¼è®©ä¸ä¸ª Java ç¨åºåå»å¦ä¹ Pythonï¼ä»å¯ä»¥å¾å¿«çå° Java ä¸çå¦å°çé¢å对象çç¥è¯ map å° Python ä¸æ¥ï¼å æ¤è½å¤å¿«éææ¡ Python ä¸é¢å对象çç¹æ§ã
å¦æä½ æ¯åå¼å§å¦ä¹ ç¼ç¨çæ°æï¼ä¸æ¬å¯é çè¯æ³ä¹¦æ¯é常éè¦çãå®çä¸å»å¯è½é常æ¯ç¥ä¹å³ï¼ä½å¯¹äºå»ºç«ç¨³åºçç¼ç¨æç»´æ¯å¿ ä¸å¯å°ã
ä¸é¢ååºäºä¸äºéååå¦è å ¥é¨çæå¦ææï¼
å»éªå³°ç Python æç¨ Python ä¸ææç¨çç¿æ¥ï¼ä¸ä¸ºååæ¥å ¥ç¨åºä¸ççå°ç½æé ã
笨æ¹æ³å¦ Python è¿æ¬ä¹¦å¨è®²è§£ Python çè¯æ³æåæ¶ï¼è¿é带大éå¯å®è·µçä¾åï¼é常éåå¿«éèµ·æ¥ã
The Hitchhikerâs Guide to Python! è¿æ¬æåçéäº Python çæä½³å®è·µï¼ä¸ç®¡ä½ æ¯ Python ä¸å®¶è¿æ¯æ°æï¼é½è½è·å¾æ大ç帮å©ã
Python çå²å¦ï¼
ç¨ä¸ç§æ¹æ³ï¼æ好æ¯åªæä¸ç§æ¹æ³æ¥åä¸ä»¶äºãå¦ä¹ ä¹æ¯ä¸æ ·ï¼è½ç¶æ¨èäºå¤ç§å¦ä¹ èµæï¼ä½å®é å¦ä¹ çæ¶åï¼æ好åªéæ©å ¶ä¸çä¸ä¸ªï¼åæçå®ã
å¿ è¦çæ¶åï¼å¯è½éè¦é 读讲解æ°æ®ç»æåç®æ³ç书ï¼è¿äºç¥è¯å¯¹äºç解åä½¿ç¨ Python ä¸ç对象模åæçå¾å¤§ç帮å©ã
软ç¥è¯
â软ç¥è¯âåæ¯ç¹å®è¯è¨ç¯å¢ä¸çè¯æ³æå·§ãç±»åºç使ç¨ãIDEçéæ©ççãè¿ä¸é¨åï¼å³ä½¿å®å ¨ä¸äºè§£ä¸ä¼ä½¿ç¨ï¼ä¹ä¸ä¼å¦¨ç¢ä½ å»ç¼ç¨ï¼åªä¸è¿ååºçç¨åºï¼çä¸å»æ¾å¾âå»âäºäºã
对è¿äºç¥è¯çå¦ä¹ ï¼åå³äºä½ å°è¯è§£å³çé®é¢çé¢åå深度ã对åå¦è èè¨ï¼èµ·æ¥é¶æ®µææèµ°ç«ï¼æè å¨éæ© Python çæ¬æ¶å¾å¾ä¸å³ï¼ä¸ä¼å¿ç 2.7 ä¸ä¼å¿åè½¬å° 3.0ï¼æè å¾å¾å¨ç±»åºç大海ä¸æ æ³èªæï¼Scrapyï¼Numpyï¼Django ä»ä¹é½è¦è¯è¯ï¼æè åä¸ç¼è¾å¨å£æã大æ¬å·ç¼©è¿æ¢ç©¶ãæä½ç³»ç»è¾©è®ºèµçæ æä¹æ´»å¨ï¼æè æ´å¤©è·ªèè¯æ³ç³ï¼èæ³çæä¹ä¸è¡ä»£ç æææçäºæ åå®ï¼æè å»ææ³å£æ´çæ§è½å®å ¨éç¨æ§å¥å£®æ§å ¨é¨æ»¡åç解å³æ¹æ¡ã
å¾å¤â大çâé½ä¼å诫åå¦è ï¼ç¨è¿ä¸ªç¨é£ä¸ªï¼å°èµ°å¼¯è·¯ï¼è¿æ ·åèæåå¦è æ¨åäºçæ£ç弯路ã
è¿ä¸å¦åè¯åå¦è ï¼å¦ä¹ æ¬æ¥å°±æ¯ä¸ªéè¦ä½ å»èµ°å¼¯è·¯åº Bugï¼åªè½èè¸å®å°ï¼æ²¡æå¥è¿¹åªæçå±çè¿ç¨ã
éæ©ä¸ä¸ªæ¹åå èµ°ä¸å»ï¼åªæèä¸å·®ï¼èµ°ä¸å¨äºåççæ没ææ´å¥½ç解å³éå¾ã
èªå·±èµ°äºå¼¯è·¯ï¼ä½ æç¥éè¿ä¹åç好å¤ï¼æè½ç解为ä»ä¹äººä»¬å¯ä»¥æåç¶ææºå»å¹é å´åè¦åææ£å表达å¼ï¼ä¸ºä»ä¹é¢åè¿ç¨å¯ä»¥è§£å³å´åè¦é¢å对象ï¼ä¸ºä»ä¹æå¯ä»¥æ纵æ¯ä¸æ ¹æéå´åè¦èªå¨ç®¡çå åï¼ä¸ºä»ä¹æå¯ä»¥åµå¥åè°å´åè¦ç¨ Promise...
æ´éè¦çæ¯ï¼ä½ ä¼æç½ï¼é«å±æ¬¡ç解å³æ¹æ³é½æ¯å¯¹ä½å±æ¬¡çå°è£ ï¼å¹¶ä¸æ¯ä»»ä½æ åµä¸é½æ¯ææææåéçã
ææ¯æ¶è¿å°±å波浪ä¸æ ·ï¼é£äºéæ§çå°åå·²ä¹ çææ¯ï¼æ¶éäºè¿æ©è¿ä¼æ¶åçãå°±åç°å¨ç§»å¨ç«¯åºç¨ãæ游å HTML5 çç«çï¼æäºæ¹é¢ä¸æ£å¨éæ¼è¿å» PC çé£äºåå²ä¹ï¼
å æ¤ï¼ä¸è¦æ å¿èªå·±èµ°é路误äºç»èº«ï¼åæ并ä¿æè¿æ¥ææ¯æ£éã
èµ·æ¥é¶æ®µçæ ¸å¿ä»»å¡æ¯ææ¡ç¡¬ç¥è¯ï¼è½¯ç¥è¯åéå½äºè§£ï¼æäºç¨³åºçæ ¹ï¼ç²å£®çæå¹²ï¼æè½é¿åºæµå¯çå¶åï¼ç»åºçç¾çæå®ã
¶ åå±é¶æ®µ
å®æäºåºç¡ç¥è¯çå¦ä¹ ï¼å¿ å®ä¼æå°ä¸éµç©ºèï¼æçè¿äºè¯æ³ç¥è¯æ¯ä¸æ¯ççæç¨ã
没éï¼ä½ çæçæ¯é常æ£ç¡®çãè¦è®© Python åæ¥åºå®çä»·å¼ï¼å½ç¶ä¸è½åçå¨è¯æ³å±é¢ã
åå±é¶æ®µçæ ¸å¿ä»»å¡ï¼å°±æ¯âè·³åº Pythonï¼æ¥æ±ä¸çâã
å¨ä½ é¢åä¼æå¤ä¸ªåæ¯ï¼ç§å¦è®¡ç®åæ°æ®åæãç¬è«ãWeb ç½ç«ã游æãå½ä»¤è¡å®ç¨å·¥å ·ççççï¼è¿äºé½ä¸æ¯ä» ä» ç¥é Python è¯æ³å°±è½è§£å³çé®é¢ã
æ¿ç¬è«ä¸¾ä¾ï¼å¦æä½ å¯¹è®¡ç®æºç½ç»ï¼HTTP åè®®ï¼HTMLï¼ææ¬ç¼ç ï¼JSON ä¸æ æç¥ï¼ä½ è½å好è¿é¨åçå·¥ä½ä¹ï¼èä½ å¨èµ·æ¥é¶æ®µçåºç¡ç¥è¯ä¹åæ ·éè¦ï¼å¦æä½ è¿å¾ªç¯éå½æä¹åé½è¿è¦æ¥ææ¡£ï¼è¿ BFS é½ä¸ç¥éæä¹å®ç°ï¼è¿å°±åå·¥å åç³å³æ¯æ¬¡èµ·é¤é½è¦æèé¤åæä¹ä½¿ç¨ä¸æ ·ï¼é常ä½æã
å¨è¿ä¸ªé¶æ®µï¼ä¸å¯é¿å è¦æ¥è§¦å¤§éç±»åºï¼é 读大é书ç±çã
ç±»åºæ¹é¢
ãAwesome Python 项ç®ãï¼vinta/awesome-python · GitHub
è¿éååºäºä½ å¨å°è¯è§£å³åç§å®é é®é¢æ¶ï¼Python 社åºå·²æçå·¥å ·åç±»åºï¼å¦ä¸å¾æ示ï¼
请ç¹å»è¾å ¥å¾çæè¿°
vinta/awesome-python
ä½ å¯ä»¥æç §å®é éæ±ï¼å¯»æ¾ä½ éè¦çç±»åºã
è³äºç¸å ³ç±»åºå¦ä½ä½¿ç¨ï¼å¿ é¡»ææ¡çæè½ä¾¿æ¯é 读ææ¡£ãç±äºå¼æºç¤¾åºå¤§å¤æ°ææ¡£é½æ¯è±æåæçï¼æ以ï¼è±è¯ä¸å¥½çåå¦ï¼éè¦æ¶è¡¥ä¸ã
书ç±æ¹é¢
è¿éæåªååºä¸äºæè§å¾æ¯è¾æä¸äºå¸®å©ç书ç±ï¼è¯¦ç»ç请çè±ç£ç书è¯ï¼
ç§å¦åæ°æ®åæï¼
❖ãéä½æºæ §ç¼ç¨ãï¼éä½æºæ §ç¼ç¨ (è±ç£)
❖ãæ°å¦ä¹ç¾ãï¼æ°å¦ä¹ç¾ (è±ç£)
❖ãç»è®¡å¦ä¹ æ¹æ³ãï¼ç»è®¡å¦ä¹ æ¹æ³ (è±ç£)
❖ãPattern Recognition And Machine Learningãï¼Pattern Recognition And Machine Learning (è±ç£)
❖ãæ°æ®ç§å¦å®æãï¼æ°æ®ç§å¦å®æ (è±ç£)
❖ãæ°æ®æ£ç´¢å¯¼è®ºãï¼ä¿¡æ¯æ£ç´¢å¯¼è®º (è±ç£)
ç¬è«ï¼
❖ãHTTP æå¨æåãï¼HTTPæå¨æå (è±ç£)
Web ç½ç«ï¼
❖ãHTML & CSS 设计ä¸æ建ç½ç«ãï¼HTML & CSS设计ä¸æ建ç½ç« (è±ç£)
...
åå°è¿éå·²ç»ä¸éè¦ç»§ç»äºã
èªæçä½ ä¸å®ä¼åç°ä¸é¢ç大é¨å书ç±ï¼å¹¶ä¸æ¯è®² Python ç书ï¼èæ´å¤çæ¯ä¸ä¸ç¥è¯ã
äºå®ä¸ï¼è¿éæè°âè·³åº Pythonï¼æ¥æ±ä¸çâï¼å ¶å®æ¯åç° Python åä¸ä¸ç¥è¯ç¸ç»åï¼è½å¤è§£å³å¾å¤å®é é®é¢ãè¿ä¸ªé¶æ®µè½èµ°å°ä»ä¹ç¨åº¦ï¼æ´å¤çåå³äºèªå·±çä¸ä¸ç¥è¯ã
¶ æ·±å ¥é¶æ®µ
è¿ä¸ªé¶æ®µçä½ ï¼å¯¹ Python å ä¹äºå¦ææï¼é£ä¹ä½ ä¸å®ç¥é Python æ¯ç¨ C è¯è¨å®ç°çã
å¯æ¯ Python 对象çâå¨æç¹å¾âæ¯æä¹ç¨ç¸å¯¹åºå±ï¼è¿èªå¨å å管çé½æ²¡æçCè¯è¨å®ç°çå¢ï¼è¿æ¶åå°±ä¸è½åçå¨è¡¨é¢äºï¼åæ¢çæå¼ Python çé»çåï¼æ·±å ¥å°è¯è¨çå é¨ï¼å»çå®çåå²ï¼è¯»å®çæºç ï¼æè½çæ£ç解å®ç设计æè·¯ã
è¿éæ¨èä¸æ¬ä¹¦ï¼
ãPython æºç åæãï¼Pythonæºç åæ (è±ç£)
è¿æ¬ä¹¦æ Python æºç ä¸ææ ¸å¿çé¨åï¼ç»åºäºè¯¦ç»çééï¼ä¸è¿é 读æ¤ä¹¦éè¦å¯¹ C è¯è¨å å模ååæéæçå¾å¥½çç解ã
å¦å¤ï¼Python æ¬èº«æ¯ä¸é¨æç³ å¤ç§èå¼çå¨æè¯è¨ï¼ä¹å°±æ¯è¯´ï¼ç¸å¯¹äº C çè¿ç¨å¼ã Haskell ççå½æ°å¼ãJava åºäºç±»çé¢å对象èè¨ï¼å®é½ä¸å¤çº¯ç²¹ãæ¢èè¨ä¹ï¼ç¼ç¨è¯è¨çâéå¦âï¼å¨ Python ä¸åªè½æéçä½æãå¦ä¹ æç§ç¼ç¨èå¼æ¶ï¼ä»é£äºé¢åè¿ç§èå¼æ´å 纯粹çè¯è¨åºåï¼æè½ææ´æ·±å»çç解ï¼ä¹è½äºè§£å° Python è¯è¨çæ ¹æºã
è¿éæ¨èä¸é¨å ¬å¼è¯¾
ãç¼ç¨èå¼ãï¼æ¯å¦ç¦å¤§å¦å ¬å¼è¯¾ï¼ç¼ç¨èå¼
讲å¸é«å±å»ºç´ï¼ä»åç§ç¼ç¨èå¼ç代表è¯è¨åºåï¼ç»åºäºæ¯ç§ç¼ç¨èå¼ææ ¸å¿çææ³ã
å¼å¾ä¸æçæ¯ï¼è¿é¨è¯¾ç¨å¯¹Cè¯è¨æéå¸¸æ·±å ¥ç讲解ï¼ä¾å¦Cè¯è¨çèååå å管çãè¿äºç¥è¯ï¼å¯¹é 读 Python æºç ä¹æ大æ帮å©ã
Python ç许å¤æä½³å®è·µé½éèå¨é£äºä¼æå¨ç¥çæ¡æ¶åç±»åºä¸ï¼ä¾å¦ DjangoãTornado ççãå¨å®ä»¬çæºä»£ç ä¸æ·éï¼ä¹æ¯ä¸ªä¸éçéæ©ã
¶ æåçè¯
æ¯ä¸ªäººå¦ç¼ç¨çéè·¯é½æ¯ä¸ä¸æ ·çï¼å ¶å®å¤§é½æ®éåå½ï¼æ²¡æè¿·è·¯ç人åªæä¸è½åæç人ï¼
å¸ææ³å¦ Python æ³å¦ç¼ç¨çåå¦ï¼ä¸è¦ç¹è±«äºï¼çå®è¿ç¯æç« ï¼
Just Getting Started ï¼ï¼ï¼
用Theano实现Nesterov momentum的正确姿势
这篇文章着重分享了如何在Theano环境中正确实现Nesterov momentum,尤其是源码源代在处理双向递归神经网络(bidirectional RNN)时遇到的问题与解决方案。首先,码底我们理解了深度神经网络(DNN)和RNN的层框基本结构,以及梯度下降法和Nesterov momentum的底层概念,这些是源码源代源码call graph分析神经网络训练的基础。
在使用The码底ano训练神经网络时,通常需要构建一个符号运算图来表示网络结构,层框包括输入、底层参数共享内存和递归计算。源码源代Nesterov惯性法的码底实现关键在于如何正确处理网络参数的更新,避免不必要的层框变量复制和扫描运算符的增加。在处理双向RNN时,底层vueuse源码分析作者发现原始实现中过多的源码源代扫描运算符导致编译时间剧增,通过对比Lasagne的码底源代码,找到了问题所在并进行优化。
正确的实现Nesterov momentum的步骤是,存储奇数步的参数值并在偶数步处求梯度,从而避免了变量的git源码基础重复存储。这在Theano代码中表现为:
// 正确的实现
params = ... # 偶数步的参数
params_grad = ... # 在偶数步求得的梯度
params = params - learning_rate * params_grad
通过这种方式,作者成功地将编译时间从几个小时缩短到了几分钟,从而提高了训练效率。这个经历提醒我们,深入理解神经网络的数学原理和工具的底层机制对于高效实现至关重要。
Bert4keras开源框架源码解析(一)概述
Bert4keras是linux 源码学习苏剑林大佬开源的一个文本预训练框架,相较于谷歌开源的bert源码,它更为简洁,对理解BERT以及相关预训练技术提供了很大的帮助。
源码地址如下:
代码主要分为三个部分,分别在三个文件夹中。
在bert4keras文件夹中,集合源码汇总实现了BERT以及相关预训练技术的算法模型架构。examples文件夹则是基于预训练好的语言模型进行的一系列fine-tune实验任务。pretraining文件夹则负责从头预训练语言模型的实现。
整体代码结构清晰,主要分为以下几部分:
backend.py文件主要实现了一些自定义组件,例如各种激活函数。这个部分之所以命名为backend(后端),是因为keras框架基于模块化的高级深度学习开发框架,它并不仅仅依赖于一种底层张量库,而是对各种底层张量库进行高层模块封装,让底层库负责诸如张量积、卷积等操作。例如,底层库可能选择TensorFlow或Theano。
在layers.py文件中,实现了自定义层,如embedding层、多头自注意力层等。
optimizers.py文件则实现了优化器的定义。
snippets.py文件包含了与算法模型无关的辅助函数,例如字符串格式转换、文件读取等。
tokenizers.py文件负责分词器的实现。
而model.py文件则是框架的核心,实现了BERT及相关预训练模型的算法架构。
后续文章将详细解析这些代码文件,期待与大家共同进步。
pythonè½åä»ä¹
pythonçç¨éï¼Pythonçä¼å¿æå¿ è¦ä½ä¸ºç¬¬ä¸æ¥å»äºè§£ï¼Pythonä½ä¸ºé¢å对象çèæ¬è¯è¨ï¼ä¼å¿å°±æ¯æ°æ®å¤çåææï¼è¿ä¹æ³¨å®äºå®åAIãäºèç½ææ¯çç´§å¯èç³»ã
ç½ç»ç¬è«ã顾åæä¹ï¼ä»äºèç½ä¸ç¬åä¿¡æ¯çèæ¬ï¼ä¸»è¦ç±urllibãrequestsçåºç¼åï¼å®ç¨æ§å¾å¼ºï¼å°ç¼å°±æ¾åè¿ç¬å5wæ°æ®éçç¬è«ãå¨å¤§æ°æ®é£é¡çæ¶ä»£ï¼ç¬è«ç»å¯¹æ¯æ°ç§ã
人工æºè½ãAI使Pythonä¸ææåï¼AIçå®ç°å¯ä»¥éè¿tensorflowåºãç¥ç»ç½ç»çæ ¸å¿å¨äºæ¿æ´»å½æ°ãæ失å½æ°åæ°æ®ï¼æ°æ®å¯ä»¥éè¿ç¬è«è·å¾ãè®ç»æ¶å¤§éçæ°æ®è¿ç®åæ¯Pythonçshow timeã
æ©å±èµæï¼
Pythonå¼å人åå°½éé¿å¼ä¸æçæè ä¸éè¦çä¼åãä¸äºé对ééè¦é¨ä½çå å¿«è¿è¡é度çè¡¥ä¸é常ä¸ä¼è¢«å并å°Pythonå ãå¨æäºå¯¹è¿è¡é度è¦æ±å¾é«çæ åµï¼Python设计å¸å¾åäºä½¿ç¨JITææ¯ï¼æè ç¨ä½¿ç¨C/C++è¯è¨æ¹åè¿é¨åç¨åºãå¯ç¨çJITææ¯æ¯PyPyã
Pythonæ¯å®å ¨é¢å对象çè¯è¨ãå½æ°ã模åãæ°åãå符串é½æ¯å¯¹è±¡ã并ä¸å®å ¨æ¯æ继æ¿ãéè½½ãæ´¾çãå¤ç»§æ¿ï¼æçäºå¢å¼ºæºä»£ç çå¤ç¨æ§ã
Pythonæ¯æéè½½è¿ç®ç¬¦åå¨æç±»åãç¸å¯¹äºLispè¿ç§ä¼ ç»çå½æ°å¼ç¼ç¨è¯è¨ï¼Python对å½æ°å¼è®¾è®¡åªæä¾äºæéçæ¯æãæ两个æ ååº(functools, itertools)æä¾äºHaskellåStandard MLä¸ä¹ ç»èéªçå½æ°å¼ç¨åºè®¾è®¡å·¥å ·ã
åèèµææ¥æºï¼ç¾åº¦ç¾ç§-Python