[開發技巧]·TensorFlow中numpy與tensor數據相互轉化(支持tf1.x-tf2.x)

個人網站–> http://www.yansongsong.cn

推薦對比閱讀:[開發技巧]·PyTorch中Numpy,Tensor與Variable深入理解與轉換技巧

鑑於tensorflow目前正在更新2.0版本,博主對博客也新增了適用於2.0版本動態度轉換方法,更新於 --2019//09//29

圖1 numpy
圖2 tensorflow

- 問題描述

在我們使用TensorFlow進行深度學習訓練時,很多時候都是與Numpy數據打招呼,例如我們csv或者照片數據等。
但是我們都知道,TensorFlow訓練時都是使用Tensor來存儲變量的,並且網絡輸出的結果也是Tensor。

一般情況下我們不會感受到Numpy與Tensor之間的區別,因爲TensorFlow網絡在輸入Numpy數據時會自動轉換爲Tensor來處理。
但是在輸出網絡時,輸出的結果仍爲Tensor,當我們要用這些結果去執行只能由Numpy數據來執行的操作時就會出現莫名其妙的錯誤。

例如,當我想要用自編碼器與解碼器輸出的結果使用matplotlib顯示時就會報錯

TypeError: Image data cannot be converted to float

解決方法

TF 1.x版本

有時候解決起來很簡單,就是錯誤比較難找到,所以我推薦的方法爲將數據進行顯式的轉化。

  • Numpy2Tensor

雖然TensorFlow網絡在輸入Numpy數據時會自動轉換爲Tensor來處理,但是我們自己也可以去顯式的轉換:

data_tensor= tf.convert_to_tensor(data_numpy)
  • Tensor2Numpy

網絡輸出的結果仍爲Tensor,當我們要用這些結果去執行只能由Numpy數據來執行的操作時就會出現莫名其妙的錯誤。解決方法:

with tf.Session() as sess:
    data_numpy = data_tensor.eval()

TF 2.x版本(更新於2019//09//29)

  • Numpy2Tensor(與1.x版本相同)

雖然TensorFlow網絡在輸入Numpy數據時會自動轉換爲Tensor來處理,但是我們自己也可以去顯式的轉換:

data_tensor= tf.convert_to_tensor(data_numpy)
  • Tensor2Numpy

網絡輸出的結果仍爲Tensor,當我們要用這些結果去執行只能由Numpy數據來執行的操作時就會出現莫名其妙的錯誤。解決方法,由於2.x版本取消了session機制,開發人員可以直接執行 .numpy()方法轉換tensor:

data_numpy = data_tensor.numpy()

最後推薦一個[TF2.0視頻教程]

我購買過了,課程質量很高,既有原理講解也有實戰演練。強烈推薦。缺點就是教的很細,看完需要挺多時間,但是深深研究下去還是有很多收穫的。可以收穫深度學習知識與技巧,也可以學會實戰編程。
現在在做活動,可以領20元紅包。。

也歡迎大家加入筆者的知識星球:「AI深度學習應用之路」

基於深度學習的理論學習與應用開發技術分享,筆者會經常分享深度學習乾貨內容,大家在學習或者應用深度學習時,遇到什麼問題也可以與我在上面交流知無不答。

幾杯奶茶的價格可以訂閱一年,出自CSDN博客專家&知乎深度學習專欄作家​​​​​​​–小宋是呢

發佈了168 篇原創文章 · 獲贊 398 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章