編寫同時在PyTorch和Tensorflow上工作的代碼

2021-02-21 OpenCV學堂

作者 | Ram Sagar 

編譯 | VK 

來源 | Analytics In Diamag

「庫開發人員不再需要在框架之間進行選擇。」

來自德國圖賓根人工智慧中心的研究人員介紹了一種新的Python框架EagerPy,EagerPy允許開發人員編寫獨立於PyTorch和TensorFlow等流行框架的代碼。

在最近發表的一篇關於EagerPy的文章中,研究人員寫道,庫開發人員不再關注框架依賴性。他們的新Python框架,急切地解決了它們的重新實現和代碼複製障礙。

例如,Foolbox是一個構建在EagerPy之上的Python庫。該庫是用EagerPy而不是NumPy重寫的,以實現在PyTorch和TensorFlow中開發,並且只有一個代碼庫,沒有代碼重複。Foolbox是一個對機器學習模型進行對抗性攻擊的庫。

框架無關的重要性

為了解決框架之間的差異,作者探索了句法偏差。在PyTorch的情況下,使用In-place的梯度需要使用**_grad_()「,而反向傳播是使用」backward**()調用的。

然而,TensorFlow提供了一個高級管理器和像「tape.gradient」這樣的函數來查詢梯度。即使在句法層面,這兩個框架也有很大的不同。例如,對於參數,dim vs axis;對於函數,sum vs reduce_sum。

這就是「EagerPy 」發揮作用的地方。它通過提供一個統一的API來解決PyTorch和TensorFlow之間的差異,該API透明地映射到各種底層框架,而無需計算開銷。

「EagerPy允許你編寫自動使用PyTorch、TensorFlow、JAX和NumPy的代碼。」

研究人員寫道,EagerPy專注於Eager執行,此外,它的方法是透明的,用戶可以將與框架無關的EagerPy代碼與特定於框架的代碼結合起來。

TensorFlow引入的eager執行模塊和PyTorch的相似特性使eager執行成為主流,框架更加相似。然而,儘管PyTorch和TensorFlow2之間有這些相似之處,但編寫框架無關的代碼並不簡單。在語法層面,這些框架中用於自動微分的api是不同的。

自動微分是指用算法求解微分方程。它的工作原理是鏈式規則,也就是說,求解函數的導數可以歸結為基本的數學運算(加、減、乘、除)。這些算術運算可以用圖形格式表示。EagerPy特別使用了一種函數式的方法來自動區分。

下面是一段來自文檔的代碼片段:

import eagerpy as ep

x = ep.astensor(x)

def loss_fn(x):
 #這個函數接受並返回一個eager張量
    return x.square().sum()

print(loss_fn(x))

# PyTorchTensor(tensor(14.))

print(ep.value_and_grad(loss_fn, x))

首先定義第一個函數,然後根據其輸入進行微分。然後傳遞給「ep.value_and_grad」 來得到函數的值及其梯度。

此外,norm函數現在可以與PyTorch、TensorFlow、JAX和NumPy中的原生張量和數組一起使用,與本機代碼相比幾乎沒有任何開銷。它也適用於GPU張量。

import torch

norm(torch.tensor([1., 2., 3.]))

import tensorflow as tf

norm(tf.constant([1., 2., 3.]))

總之,EagerPy 旨在提供以下功能:

研究人員聲稱,這些屬性使得使用這些屬性比底層框架特定的api更容易、更安全。儘管有這些變化和改進,但EagerPy 背後的團隊還是確保了eagerpy API遵循了NumPy、PyTorch和JAX設置的標準。

入門「EagerPy」

使用pip從PyPI安裝最新版本:

python3 -m pip install eagerpy

import eagerpy as ep

def norm(x):

    x = ep.astensor(x)

    result = x.square().sum().sqrt()

    return result.raw

了解更多關於「eagerpy」的信息:https://eagerpy.jonasrauber.de/guide/autodiff.html

原文連結:https://analyticsindiamag.com/eagerpy-pytorch-tensorflow-coding/

相關焦點

  • TensorFlow 與 PyTorch 之爭
    官方研究發布於論文《TensorFlow:異構分布式系統上的大規模機器學習》。論文地址:http://download.tensorflow.org/paper/whitepaper2015.pdfTensorFlow 現已被公司、企業與創業公司廣泛用於自動化工作任務和開發新系統,其在分布式訓練支持、可擴展的生產和部署選項、多種設備(比如安卓)支持方面備受好評。
  • 手把手教你由TensorFlow上手PyTorch(附代碼)
    Andrej Karpathy 是這樣評價的 資源 首先要知道的是:PyTorch 的主目錄和教程是分開的。而且因為開發和版本更新的速度過快,有時候兩者之間並不匹配。所以你需要不時查看原始碼:http://pytorch.org/tutorials/。
  • 9步教你安裝完成tensorflow與pytorch
    配置鏡像源,打開後,可以看到現在是base環境,就是安裝完anaconda之後的自帶環境(⾸先進⾏鏡像源的配置,因為咱們⼤部分⼩夥伴在國內,但是tensorflow和pytorch卻在國外,為了防⽌下載的時候出現⽹絡問題,所以需要配置
  • TensorFlow與PyTorch之爭,哪個框架最適合深度學習
    官方研究發布於論文《TensorFlow:異構分布式系統上的大規模機器學習》。論文地址:http://download.tensorflow.org/paper/whitepaper2015.pdfTensorFlow 現已被公司、企業與創業公司廣泛用於自動化工作任務和開發新系統,其在分布式訓練支持、可擴展的生產和部署選項、多種設備(比如安卓)支持方面備受好評。
  • 深度學習環境配置指南:Pytorch、TensorFlow、Keras
    導讀本文介紹了作者使用RTX3090進行深度學習環境配置pytorch、tensorflow、keras等的詳細過程及代碼。筆者中山大學研究生,醫學生+計科學生的集合體,機器學習愛好者。(3)創建虛擬環境,一般用py37或py38(以下都在虛擬環境中操作)conda create -n exp38 python==3.8conda activate exp38(4)安裝cuda11.0和pytorch1.7
  • 結合PyTorch和TensorFlow2 匯總理解損失函數
    相比距離度量,餘弦相似度更加注重兩個向量在方向上的差異,而非距離或長度上。餘弦相似度更多的是從方向上區分差異,而對絕對的數值不敏感,更多的用於使用用戶對內容評分來區分用戶興趣的相似度和差異,同時修正了用戶間可能存在的度量標準不統一的問題(因為餘弦相似度對絕對數值不敏感),公式如下:
  • PyTorch 能追上 TensorFlow 嗎?
    🚀工作需求(Job Listings)美國時間2020年1月26日,我在indeed,monster,SimplyHired和LinkedIn網站上搜索關鍵字TensorFlow和PyTorch。來源:https://chillee.github.io/pytorch-vs-tensorflow/對於該會議
  • 深度學習100+經典模型TensorFlow與Pytorch代碼實現大集合
    rasbt在Github上整理了關於深度學習模型TensorFlow和Pytorch代碼實現集合,含有100個,各種各樣的深度學習架構,模型,和技巧的集合Jupyter Notebooks,從基礎的邏輯回歸到神經網絡到CNN到GNN等,可謂一網打盡,值得收藏!
  • TensorFlow+PyTorch深度學習大寶庫
    的各種深度學習架構,模型和技巧的集合。rasbt/deeplearning-models/blob/master/tensorflow1_ipynb/basic-ml/logistic-regression.ipynbPyTorch:https://github.com/rasbt/deeplearning-models/blob/master/pytorch_ipynb/basic-ml
  • 跨越重重「障礙」,我從 PyTorch 轉換為了 TensorFlow Lite
    這主要歸功於 PyTorch 的優秀文檔,例如 TORCH.ONNX 的文檔 和《(可選)將模型從 PyTorch 導出到 ONNX 並使用 ONNX 運行時運行》((Optional) Exporting a model from pytorch to onnx and running it using onnx runtime)。
  • RTX 3090 的深度學習環境配置指南:Pytorch、TensorFlow、Keras
    導讀本文介紹了作者使用RTX3090進行深度學習環境配置pytorch、tensorflow、keras等的詳細過程及代碼。筆者中山大學研究生,醫學生+計科學生的集合體,機器學習愛好者。(3)創建虛擬環境,一般用py37或py38(以下都在虛擬環境中操作)conda create -n exp38 python==3.8conda activate exp38(4)安裝cuda11.0和pytorch1.7
  • GitHub趨勢榜第一:TensorFlow+PyTorch深度學習資源大匯總
    的各種深度學習架構,模型和技巧的集合。本文搜集整理了Jupyter Notebook中TensorFlow和PyTorch的各種深度學習架構,模型和技巧,內容非常豐富,適用於Python 3.7,適合當做工具書。大家可以將內容按照需要進行分割,列印出來,或者做成電子書等,隨時查閱。
  • 教程 | 如何從TensorFlow轉入PyTorch
    Andrej Karpathy 是這樣評價的資源首先要知道的是:PyTorch 的主目錄和教程是分開的。而且因為開發和版本更新的速度過快,有時候兩者之間並不匹配。所以你需要不時查看原始碼:http://pytorch.org/tutorials/。
  • 基於Pytorch、Keras、Tensorflow的圖片數據生成器搭建
    = ImageDataGenerator(rescale=1./255)test_datagen = ImageDataGenerator(rescale=1./255)上面這個是實例化一個圖片數據生成器,這裡包含了和pytorch類似的transforms,但是注意到我們這裡沒有數據地址索引
  • RTX 3090的深度學習環境配置指南:Pytorch、TensorFlow、Keras
    (3)創建虛擬環境,一般用py37或py38(以下都在虛擬環境中操作)conda create -n exp38 python==3.8conda activate exp38(4)安裝cuda11.0和pytorch1.7
  • Seq2seq強化學習實戰 (Pytorch, Tensorflow, Theano)
    Practical_RL: Reinforcement learning for seq2seq (pytorch, tensorflow, theano)在過去的幾十年裡,機器學習方法發展迅速。人們可以教算法怎麼去理解,找到圖像上的對象,翻譯自然語言以及甚至生成文本和語音,甚至如果給出足夠的標記數據,則可以在網際網路上做信息檢索(超過人類水平或與人類同水平)。 前面唯一的缺點是,並不是每個問題都可以被認為是學習X - > y轉換(擬合一些參考標籤)。
  • 正確的debug你的TensorFlow代碼(不用這麼痛苦)
    當討論在tensorflow上編寫代碼時,總是將其與PyTorch進行比較,討論框架有多複雜,以及為什麼要使用tf.contrib的某些部分,做得太爛了。此外,我認識很多數據科學家,他們只用Github上已有的repo來用tensorflow。對這個框架持這種態度的原因是非常不同的,但是今天讓我們關注更實際的問題:調試用tensorflow編寫的代碼並理解它的主要特性。核心抽象計算圖。
  • C# 編寫 TensorFlow 人工智慧應用
    TensorFlowSharp入門使用C#編寫TensorFlow人工智慧應用學習。示例Python代碼:import tensorflow as tfimport numpy as np# Create 100 phony x, y data points in NumPy, y = x * 0.1 + 0.3x_data = np.random.rand(100).astype(np.float32)
  • 模型秒變API只需一行代碼,支持TensorFlow等框架
    這個工具能讓你一行代碼直接打包。專注於機器學習應用的人們知道,從訓練好的模型到實際的工業生產工具還有一定的距離。其中工作量很大的地方在於將模型打包,預留 API 接口,並和現有的生產系統相結合。近日,GitHub 上有了這樣一個項目,能夠讓用戶一行代碼將任意模型打包為 API。這一工具無疑能夠幫助開發者在實際的生產應用中快速部署模型。
  • TensorFlow Lite 轉換器中的 TensorFlow 算子融合
    請參閱此 Colab,了解如何通過 TensorFlow Lite 解釋器進行端到端 Keras LSTM 到 TensorFlow Lite 的轉換和執行。lingvohttps://github.com/tensorflow/lingvoLSTMCellSimplehttps://github.com/tensorflow/tensorflow/blob/82abf0dbf316526cd718ae8cd7b11cfcb805805e/tensorflow/compiler/mlir/lite/transforms