博客專欄

        EEPW首頁 > 博客 > 小型深度學習框架 | TinyGrad,不到1K行代碼(附代碼下載)

        小型深度學習框架 | TinyGrad,不到1K行代碼(附代碼下載)

        發布人:CV研究院 時間:2022-12-22 來源:工程師 發布文章

        最近,天才黑客 George Hotz 開源了一個小型深度學習框架 tinygrad,兼具 PyTorch  micrograd 的功能。tinygrad 的代碼數量不到 1000 行,目前該項目獲得了 GitHub 1400 星。

        圖片在深度學習時代,谷歌、Facebook、百度等科技巨頭開源了多款框架來幫助開發者更輕松地學習、構建和訓練不同類型的神經網絡。而這些大公司也花費了很大的精力來維護 TensorFlowPyTorch 這樣龐大的深度學習框架。除了這類主流框架之外,開發者們也會開源一些小而精的框架或者庫。比如今年 4 月份,特斯拉人工智能部門主管 Andrej Karpathy 開源了其編寫的微型 autograd 引擎 micrograd,該引擎還用 50 行代碼實現了一個類 PyTorch api 的神經網絡庫。目前,micrograd 項目的 GitHub star 量達到 1200 星。不久前,天才黑客 George Hotz(喬治 · 霍茲)開源了一個小型 Autograd Tensor  tinygrad,它介于 PyTorch  micrograd 之間,能夠滿足做深度學習的大部分要求。上線不到一個月,該項目在 GitHub 上已經獲得 1400 星。


        根據 GitHub 內容,下文對 tinygrad 的安裝與使用做了簡要介紹。感興趣的同學也可通過 George Hotz 的 YouTube 視頻進行學習。

        圖片

        視頻地址:https://www.youtube.com/channel/UCwgKmJM4ZJQRJ-U5NjvR2dg


        tinygrad 的安裝與使用


        「tinygrad 可能不是最好的深度學習框架,但它確實是深度學習框架。」


        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/dxprint(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/dxprint(y.grad)  # dz/dy


        滿足對神經網絡的需求


        一個不錯的autograd張量庫可以滿足你對神經網絡 90%的需求。從 tinygrad.optim 添加優化器(SGD、RMSprop、Adam),再編寫一些 minibatching 樣板代碼,就可以實現你的需求。

        示例如下:






















        from tinygrad.tensor import Tensorimport tinygrad.optim as optimfrom 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()


        支持 GPUtinygrad 通過 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
        注意:如果你想加速運行,設置 GPU=1。
        測試
        運行以下代碼可執行測試:

        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.


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: AI

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 犍为县| 白玉县| 抚州市| 靖远县| 庆安县| 拉萨市| 安乡县| 温泉县| 常熟市| 潮安县| 成都市| 固安县| 蒙城县| 琼海市| 府谷县| 观塘区| 新巴尔虎左旗| 阳泉市| 阿拉善左旗| 南溪县| 博白县| 岳池县| 三门峡市| 永新县| 龙胜| 同德县| 讷河市| 东乡| 刚察县| 建始县| 普陀区| 庆阳市| 大余县| 阿克| 土默特右旗| 兴化市| 扎囊县| 唐海县| 金乡县| 青州市| 东明县|