歡迎關(guān)注“
計算機視覺研究院
”
計算機視覺研究院專欄
作者:Edison_G
最近,天才黑客 George Hotz 開源了一個小型深度學(xué)習(xí)框架 tinygrad,兼具 PyTorch 和 micrograd 的功能。tinygrad 的代碼數(shù)量不到 1000 行,目前該項目獲得了 GitHub 1400 星。
在深度學(xué)習(xí)時代,谷歌、Facebook、百度等科技巨頭開源了多款框架來幫助開發(fā)者更輕松地學(xué)習(xí)、構(gòu)建和訓(xùn)練不同類型的神經(jīng)網(wǎng)絡(luò)。而這些大公司也花費了很大的精力來維護 TensorFlow、PyTorch 這樣龐大的深度學(xué)習(xí)框架。除了這類主流框架之外,開發(fā)者們也會開源一些小而精的框架或者庫。比如今年 4 月份,特斯拉人工智能部門主管 Andrej Karpathy 開源了其編寫的微型 autograd 引擎 micrograd,該引擎還用 50 行代碼實現(xiàn)了一個類 PyTorch api 的神經(jīng)網(wǎng)絡(luò)庫。目前,micrograd 項目的 GitHub star 量達到 1200 星。不久前,天才黑客 George Hotz(喬治 · 霍茲)開源了一個小型 Autograd Tensor 庫 tinygrad,它介于 PyTorch 和 micrograd 之間,能夠滿足做深度學(xué)習(xí)的大部分要求。上線不到一個月,該項目在 GitHub 上已經(jīng)獲得 1400 星。
根據(jù) GitHub 內(nèi)容,下文對 tinygrad 的安裝與使用做了簡要介紹。感興趣的同學(xué)也可通過 George Hotz 的 YouTube 視頻進行學(xué)習(xí)。
視頻地址:https://www.youtube.com/channel/UCwgKmJM4ZJQRJ-U5NjvR2dg
tinygrad 的安裝與使用
「tinygrad 可能不是最好的深度學(xué)習(xí)框架,但它確實是深度學(xué)習(xí)框架?!?/p>
George 在項目中保證,tinygrad 代碼量會永遠小于 1000 行。
安裝
tinygrad 的安裝過程非常簡單,只需使用以下命令:
pip3 install tinygrad --upgrade
示例
安裝好 tinygrad 之后,就可以進行示例運行,代碼如下:
from tinygrad.tensor import Tensor
x = Tensor.eye(3)
y = Tensor([[2.0,0,-2.0]])
z = y.matmul(x).sum
z.backward
print(x.grad) # dz/dx
print(y.grad) # dz/dy
使用 torch 的代碼如下:
import torch
x = torch.eye(3, requires_grad=True)
y = torch.tensor([[2.0,0,-2.0]], requires_grad=True)
z = y.matmul(x).sum
z.backward
print(x.grad) # dz/dx
print(y.grad) # dz/dy
滿足對神經(jīng)網(wǎng)絡(luò)的需求
一個不錯的autograd張量庫可以滿足你對神經(jīng)網(wǎng)絡(luò) 90%的需求。從 tinygrad.optim 添加優(yōu)化器(SGD、RMSprop、Adam),再編寫一些 minibatching 樣板代碼,就可以實現(xiàn)你的需求。
示例如下:
from tinygrad.tensor import Tensor
import tinygrad.optim as optim
from tinygrad.utils import layer_init_uniform
class TinyBobNet:
def __init__(self):
self.l1 = Tensor(layer_init_uniform(784, 128))
self.l2 = Tensor(layer_init_uniform(128, 10))
def forward(self, x):
return x.dot(self.l1).relu.dot(self.l2).logsoftmax
model = TinyBobNet
optim = optim.SGD([model.l1, model.l2], lr=0.001)
# ... and complete like pytorch, with (x,y) data
out = model.forward(x)
loss = out.mul(y).mean
loss.backward
optim.step
支持 GPU
tinygrad 通過 PyOpenCL 支持 GPU。但后向傳播暫時無法支持所有 ops。
from tinygrad.tensor import Tensor
(Tensor.ones(4,4).cuda Tensor.ones(4,4).cuda).cpu
ImageNet inference
「麻雀雖小,五臟俱全。」tinygrad 還能夠支持 full EfficientNet,輸入一張圖像,即可得到其類別。
ipython3 examples/efficientnet.py https://upload.wikimedia.org/wikipedia/commons/4/41/Chicken.jpg
如果你安裝了 webcam 和 cv2,則可以使用以下代碼:
ipython3 examples/efficientnet.py webcam
注意:如果你想加速運行,設(shè)置 GPU=1。
測試
運行以下代碼可執(zhí)行測試:
python -m pytest
此外,喬治 · 霍茲還計劃添加語言模型、檢測模型,進一步減少代碼量、提升速度等。
TODO
-
Train an EfficientNet on ImageNet
Make broadcasting work on the backward pass (simple please)
EfficientNet backward pass
Tensors on GPU (a few more backward)
Add a language model. BERT?
Add a detection model. EfficientDet?
Reduce code
Increase speed
Add features
/End.
如果想加入我們“計算機視覺研究院”,請掃二維碼加入我們。我們會按照你的需求將你拉入對應(yīng)的學(xué)習(xí)群!
計算機視覺研究院主要涉及深度學(xué)習(xí)領(lǐng)域,主要致力于人臉檢測、人臉識別,多目標檢測、目標跟蹤、圖像分割等研究方向。研究院接下來會不斷分享最新的論文算法新框架,我們這次改革不同點就是,我們要著重”研究“。之后我們會針對相應(yīng)領(lǐng)域分享實踐過程,讓大家真正體會擺脫理論的真實場景,培養(yǎng)愛動手編程愛動腦思考的習(xí)慣!
后臺回復(fù)“TinyGrad”
計算機視覺研究院
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 舉報,一經(jīng)查實,本站將立刻刪除。