用于 Python 深度學習項目的 PyTorch 與 TensorFlow

      網友投稿 1123 2022-05-30

      目錄

      什么是 TensorFlow?

      誰在使用 TensorFlow?

      代碼風格和功能

      特殊功能

      Tensorflow 生態系統

      什么是 PyTorch?

      誰在使用 PyTorch?

      代碼風格和功能

      特殊功能

      PyTorch 生態系統

      PyTorch 與 TensorFlow 決策指南

      用于 Python 深度學習項目的 PyTorch 與 TensorFlow

      風格

      數據和模型

      項目目標

      結論

      進一步閱讀

      PyTorch 與 TensorFlow:有何不同?兩者都是使用圖對數據執行數值計算的開源 Python 庫。兩者都廣泛用于學術研究和商業代碼。兩者都通過各種 API、云計算平臺和模型存儲庫進行擴展。

      如果它們如此相似,那么哪一個最適合您的項目?

      在本教程中,您將學習:

      PyTorch和TensorFlow有什么區別

      每個人都有哪些可用的工具和資源

      如何為您的特定用例選擇最佳選項

      您將首先仔細研究這兩個平臺,從稍舊的 TensorFlow 開始,然后探索一些可以幫助您確定哪種選擇最適合您的項目的注意事項。讓我們開始吧!

      什么是 TensorFlow?

      TensorFlow 由 Google 開發并于 2015 年作為開源發布。它源于 Google 的自主機器學習軟件,該軟件經過重構和優化以用于生產。

      “TensorFlow”這個名字描述了你如何組織和執行數據操作。TensorFlow 和 PyTorch 的基本數據結構都是張量。當您使用 TensorFlow 時,您可以通過構建一個有狀態的數據流圖來對這些張量中的數據執行操作,有點像記住過去事件的流程圖。

      誰在使用 TensorFlow?

      TensorFlow 以生產級深度學習庫而聞名。它擁有龐大而活躍的用戶群,以及大量用于訓練、部署和服務模型的官方和第三方工具和平臺。

      2016 年 PyTorch 發布后,TensorFlow 的受歡迎程度有所下降。但在 2019 年底,谷歌發布了TensorFlow 2.0,這是一項重大更新,簡化了庫并使其更加用戶友好,重新引起了機器學習社區的興趣。

      代碼風格和功能

      在 TensorFlow 2.0 之前,TensorFlow 要求您通過調用 API手動將抽象語法樹(圖)拼接在一起tf.*。然后它要求您通過將一組輸出張量和輸入張量傳遞給session.run()調用來手動編譯模型。

      一個Session對象是運行TensorFlow操作類。它包含Tensor評估Operation對象和執行對象的環境,并且它可以像tf.Variable對象一樣擁有資源。使用 a 的最常見方法Session是作為上下文管理器。

      在 TensorFlow 2.0 中,您仍然可以通過這種方式構建模型,但使用Eager Execution更容易,這是 Python 通常的工作方式。Eager execution 會立即評估操作,因此您可以使用 Python 控制流而不是圖形控制流來編寫代碼。

      要查看差異,讓我們看看如何使用每種方法將兩個張量相乘。這是使用舊的 TensorFlow 1.0 方法的示例:

      >>>

      >>> import tensorflow as tf >>> tf.compat.v1.disable_eager_execution() >>> x = tf.compat.v1.placeholder(tf.float32, name = "x") >>> y = tf.compat.v1.placeholder(tf.float32, name = "y") >>> multiply = tf.multiply(x, y) >>> with tf.compat.v1.Session() as session: ... m = session.run( ... multiply, feed_dict={x: [[2., 4., 6.]], y: [[1.], [3.], [5.]]} ... ) ... print(m) [[ 2. 4. 6.] [ 6. 12. 18.] [10. 20. 30.]]

      此代碼使用 TensorFlow 2.x 的tf.compatAPI 來訪問 TensorFlow 1.x 方法并禁用 Eager Execution。

      您首先聲明輸入張量x并y使用tf.compat.v1.placeholder張量對象。然后定義要對它們執行的操作。接下來,使用該tf.Session對象作為上下文管理器,創建一個容器來封裝運行時環境,并通過將實際值提供給帶有feed_dict.?最后,還是在 session 里面,你print()的結果。

      在 TensorFlow 2.0 中使用 Eager Execution,您只需要tf.multiply()達到相同的結果:

      >>>

      >>> import tensorflow as tf >>> x = [[2., 4., 6.]] >>> y = [[1.], [3.], [5.]] >>> m = tf.multiply(x, y) >>> m

      在此代碼中,您使用 Python 列表符號聲明張量,并在調用時立即tf.multiply()執行元素乘法。

      如果您不想或不需要構建低級組件,那么推薦使用 TensorFlow 的方法是Keras。它具有更簡單的 API,為您將常見用例滾動到預制組件中,并提供比基礎 TensorFlow 更好的錯誤消息。

      特殊功能

      TensorFlow 擁有龐大而完善的用戶群和大量工具來幫助生產機器學習。對于移動開發,它具有適用于JavaScript和 Swift 的API?,并且TensorFlow Lite可讓您壓縮和優化物聯網設備的模型。

      由于Google 和第三方提供的大量數據、預訓練模型和Google Colab 筆記本,您可以快速開始使用 TensorFlow?。

      許多流行的機器學習算法和數據集都內置在 TensorFlow 中并且可以立即使用。除了內置數據集,您還可以訪問Google Research 數據集或使用 Google 的數據集搜索來查找更多數據。

      Keras 可以更輕松地啟動和運行模型,因此您可以在更短的時間內嘗試新技術。事實上,Keras 是Kaggle前五名獲勝團隊中使用最廣泛的深度學習框架。

      一個缺點是從 TensorFlow 1.x 到 TensorFlow 2.0 的更新改變了很多功能,您可能會發現自己感到困惑。升級代碼既乏味又容易出錯。許多資源,如教程,可能包含過時的建議。

      PyTorch 沒有同樣大的向后兼容性問題,這可能是選擇它而不是 TensorFlow 的一個原因。

      Tensorflow 生態系統

      TensorFlow 擴展生態系統的 API、擴展和有用工具的一些亮點包括:

      TensorFlow Hub,一個用于可重用機器學習模塊的庫

      Model Garden,使用 TensorFlow 高級 API 的官方模型集合

      Hands-On Machine Learning with Scikit-Learn、Keras 和 TensorFlow,全面介紹使用 TensorFlow 的機器學習

      什么是 PyTorch?

      PyTorch 由 Facebook 開發,并于 2016年首次公開發布。它旨在提供類似于 TensorFlow 的生產優化,同時使模型更易于編寫。

      由于 Python 程序員發現它使用起來非常自然,PyTorch 迅速獲得了用戶,這促使 TensorFlow 團隊在 TensorFlow 2.0 中采用了許多 PyTorch 最受歡迎的功能。

      誰在使用 PyTorch?

      PyTorch 以在研究中比在生產中使用更廣泛而聞名。然而,自從在 TensorFlow 之后的一年發布以來,PyTorch 的專業開發人員使用量急劇增加。

      在2020堆棧溢出開發者調查最流行的“其他框架,庫和工具”報道,專業開發人員10.4%選擇TensorFlow和4.1%選擇PyTorch的名單。在2018,百分比分別為TensorFlow 7.6%和PyTorch只是1.6%。

      至于研究,PyTorch 是一個流行的選擇,像斯坦福這樣的計算機科學項目現在用它來教授深 度學習。

      代碼風格和功能

      PyTorch 基于Torch,這是一個用 C 編寫的用于進行快速計算的框架。 Torch 有一個用于構建模型的Lua包裝器。

      PyTorch將相同的 C 后端包裝在 Python 接口中。但它不僅僅是一個包裝器。開發人員從頭開始構建它,使 Python 程序員可以輕松編寫模型。底層的低級 C 和 C++ 代碼針對運行 Python 代碼進行了優化。由于這種緊密集成,您可以獲得:

      更好的內存和優化

      更合理的錯誤信息

      模型結構的細粒度控制

      更透明的模型行為

      與 NumPy 更好的兼容性

      這意味著您可以直接在 Python 中編寫高度定制的神經網絡組件,而無需使用大量低級函數。

      PyTorch 的 Eager?execution立即動態地評估張量操作,啟發了 TensorFlow 2.0,因此兩者的 API 看起來很相似。

      將 NumPy 對象轉換為張量被烘焙到 PyTorch 的核心數據結構中。這意味著您可以輕松地在torch.Tensor對象和numpy.array對象之間來回切換。

      例如,您可以使用 PyTorch 的原生支持將 NumPy 數組轉換為張量以創建兩個numpy.array對象,使用 將每個torch.Tensor對象轉換為一個對象torch.from_numpy(),然后獲取它們的元素乘積:

      >>>

      >>> import torch >>> import numpy as np >>> x = np.array([[2., 4., 6.]]) >>> y = np.array([[1.], [3.], [5.]]) >>> m = torch.mul(torch.from_numpy(x), torch.from_numpy(y)) >>> m.numpy() array([[ 2., 4., 6.], [ 6., 12., 18.], [10., 20., 30.]])

      Usingtorch.Tensor.numpy()允許您將矩陣乘法的結果(它是一個torch.Tensor對象)作為numpy.array對象打印出來。

      torch.Tensor對象和numpy.array對象之間最重要的區別在于torch.Tensor?類具有不同的方法和屬性,例如backward()計算梯度的 和CUDA兼容性。

      特殊功能

      PyTorch向 Torch 后端添加了一個用于自動分化的 C++ 模塊。自微分自動計算torch.nn在反向傳播過程中定義的函數的梯度。

      默認情況下,PyTorch 使用 Eager模式計算。您可以在構建時逐行運行神經網絡,這樣可以更輕松地進行調試。它還使得構建具有條件執行的神經網絡成為可能。這種動態執行對于大多數 Python 程序員來說更為直觀。

      PyTorch 生態系統

      PyTorch 擴展生態系統的 API、擴展和有用工具的一些亮點包括:

      該fast.ai?API,這使得它非常容易建立模型迅速

      TorchServe,AWS 和 Facebook 合作開發的開源模型服務器

      TorchElastic使用Kubernetes大規模訓練深度神經網絡

      PyTorch Hub,一個分享和擴展前沿模型的活躍社區

      PyTorch 與 TensorFlow 決策指南

      使用哪個庫取決于您自己的風格和偏好、您的數據和模型以及您的項目目標。當您通過對哪個庫最能支持這三個因素進行一些研究來開始您的項目時,您將為成功做好準備!

      風格

      如果您是 Python 程序員,那么 PyTorch 會很容易上手。它以您期望的方式工作,開箱即用。

      另一方面,TensorFlow 支持的編碼語言比 PyTorch 多,后者具有 C++ API。您可以在 JavaScript 和 Swift 中使用 TensorFlow。如果你不想編寫太多底層代碼,那么 Keras 會抽象出很多常見用例的細節,這樣你就可以構建 TensorFlow 模型而不必擔心細節。

      數據和模型

      你用的是什么型號?如果您想使用特定的預訓練模型,例如BERT或DeepDream,那么您應該研究它與什么兼容。一些預訓練模型僅在一個庫或另一個庫中可用,而有些則在這兩個庫中都可用。模型花園、PyTorch 和 TensorFlow 中心也是值得檢查的好資源。

      你需要什么數據?如果您想使用預處理數據,那么它可能已經內置到一個或另一個庫中。檢查文檔以查看 - 這將使您的開發速度更快!

      項目目標

      你的模特會住在哪里?如果您想在移動設備上部署模型,那么 TensorFlow 是一個不錯的選擇,因為 TensorFlow Lite 及其 Swift API。對于服務模型,TensorFlow 與 Google Cloud 緊密集成,但 PyTorch 集成到 AWS 上的 TorchServe 中。如果你想參加 Kaggle 比賽,那么 Keras 會讓你快速迭代實驗。

      在項目開始時考慮這些問題和示例。確定兩個或三個最重要的組件,TensorFlow 或 PyTorch 將成為正確的選擇。

      結論

      在本教程中,您已經介紹了 PyTorch 和 TensorFlow,了解了誰在使用它們以及它們支持哪些 API,并了解了如何為您的項目選擇 PyTorch 與 TensorFlow。您已經了解了每種語言、工具、數據集和模型所支持的不同編程語言,并了解了如何選擇最適合您的獨特風格和項目的一種。

      在本教程中,您學習了:

      PyTorch和TensorFlow有什么區別

      如何使用張量進行計算

      哪個平臺最適合不同類型的項目

      每個支持哪些工具和數據

      既然您已經決定要使用哪個庫,您就可以開始使用它們構建神經網絡了。查看進一步閱讀中的鏈接以獲取想法。

      進一步閱讀

      以下教程是使用 PyTorch 和 TensorFlow 進行動手練習的好方法:

      使用 Python 和 Keras 進行實用文本分類教您使用 PyTorch 構建自然語言處理應用程序。

      在 Windows 上為機器學習設置 Python 提供了有關在 Windows上安裝 PyTorch 和 Keras 的信息。

      純 Python 與 NumPy 與 TensorFlow 性能比較教您如何使用 TensorFlow 和 NumPy 進行梯度下降以及如何對代碼進行基準測試。

      Python 上下文管理器和“with”語句將幫助您理解為什么需要with tf.compat.v1.Session() as session在 TensorFlow 1.0 中使用。

      生成對抗網絡:構建你的第一個模型將引導你使用 PyTorch 構建一個生成對抗網絡來生成手寫數字!

      Python 中的機器學習系列是更多項目創意的重要來源,例如構建語音識別引擎或執行人臉識別。

      Python pytorch TensorFlow

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:AI學習入門之初識自然語言處理
      下一篇:??十分鐘快速學會使用Nodejs全棧開發微信公眾號【建議收藏】
      相關文章
      久久精品亚洲综合| 亚洲精品无码永久中文字幕| 亚洲三级电影网站| 亚洲国产精品嫩草影院久久| 亚洲国产精品18久久久久久 | 久久国产精品亚洲一区二区| 中文亚洲AV片在线观看不卡 | 亚洲精品无码av片| 亚洲欧洲日韩极速播放| 亚洲中文字幕久久精品无码2021| 亚洲精品美女久久久久| 7777久久亚洲中文字幕蜜桃| 911精品国产亚洲日本美国韩国| 久久久久亚洲AV成人无码网站| 国产成人精品日本亚洲| 亚洲αv在线精品糸列| 亚洲国产高清人在线| 亚洲自偷精品视频自拍| 亚洲视频一区二区在线观看| 亚洲码一区二区三区| 亚洲中文字幕在线无码一区二区| 亚洲六月丁香婷婷综合| 亚洲性色AV日韩在线观看| 亚洲精品9999久久久久无码| 色婷婷六月亚洲综合香蕉| 亚洲AV蜜桃永久无码精品| 亚洲国产香蕉人人爽成AV片久久 | 色婷五月综激情亚洲综合| 亚洲国产日韩综合久久精品| 亚洲色偷偷综合亚洲AV伊人蜜桃 | 亚洲精品无码精品mV在线观看| 亚洲精品乱码久久久久久久久久久久| 亚洲午夜久久久久久久久电影网| 亚洲愉拍99热成人精品热久久 | 在线观看亚洲AV每日更新无码| 亚洲av永久中文无码精品| 国产偷国产偷亚洲高清在线| 一本色道久久综合亚洲精品高清| 亚洲精品无码mv在线观看网站| 亚洲AV无码专区国产乱码4SE| 无码专区—VA亚洲V天堂|