張量操作太繁瑣?新工具 TF-Coder 來幫你!

2021-02-18 TensorFlow

現在來思考另一個問題:計算一個 0-1 張量,標識輸入張量的每一行的最大元素。

# Input tensor
scores = [[0.7, 0.2, 0.1],
[0.4, 0.5, 0.1],
[0.4, 0.4, 0.2],
[0.3, 0.4, 0.3],
[0.0, 0.0, 1.0]]

# Output tensor
top_scores = [[1, 0, 0],
[0, 1, 0],
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]]

有一點需要注意,如果同一最大元素在一行內多次出現,比如 scores 的第三行,那麼只需要標記第一個此類最大元素,讓 top_scores 的每一行正好有一個 1 的條目。

與上一個問題不同,沒有單個 TensorFlow 函數可以執行此計算。如果在文檔中搜索「max」,可能會發現 tf.reduce_max、tf.argmax 和 tf.maximum 都是相關的,但是應該使用哪一個呢?tf.reduce_max 輸出 [0.7, 0.5, 0.4, 0.4, 1.0],tf.argmax 輸出 [0, 1, 0, 1, 2],而 tf.maximum 不合適,因為它需要兩個參數。這些都不是我們期望的輸出。

TF-Coder 可以幫助解決此類難題。您可以把問題編寫為輸入 - 輸出示例的形式:

# Input-output example
inputs = {
'scores': [[0.7, 0.2, 0.1],
[0.4, 0.5, 0.1],
[0.4, 0.4, 0.2],
[0.3, 0.4, 0.3],
[0.0, 0.0, 1.0]],
}
output = [[1, 0, 0],
[0, 1, 0],
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]]

TF-Coder 組合 tf.one_hot 和 tf.argmax 為這一問題提供了簡潔的解決方案:

tf.cast(tf.one_hot(tf.argmax(scores, axis=1), 3), tf.int32)

TF-Coder 詳細搜索 TensorFlow 運算組合後,經常能夠找到這樣的優雅解決方案,讓您的 TensorFlow 程序更精簡、更快速。

相關焦點

  • 開源 | TensorFlow官方工具TF-Coder,自動生成代碼
    由於 TF-Coder 可以通過行為識別數百個 Tensor 操作,因此你可以通過提供輸入 - 輸出示例來查找正確的操作:# Input-output exampleinputs = {     boundaries : [10, 50, 100, 1000],     prices : [15, 3, 50, 90, 100, 1001],}output
  • TensorFlow 2.0 基礎:張量、自動求導與優化器
    不過你也可以通過加入dtype參數來自行指定類型,例如zero_vector = tf.zeros(shape=(2), dtype=tf.int32)將使得張量中的元素類型均為整數。張量的numpy()方法是將張量的值轉換為一個 NumPy 數組。
  • 技術分享 | 你真的懂tf.transpose()函數與Tensor轉置操作嗎?
    今天向各位分享TensorFlow中張量Tensor的轉置函數tf.transpose()的用法,重點介紹其參數perm及原理。Tensor 的階在開始介紹轉置函數之前,我們先來看一下Tensor的階當張量Tensor為一個標量時,即不帶方向的純量,其階為0;x0 = tf.constant(1)print(x0) # 輸出 tf.Tensor(1, shape=(), dtype=int32)當Tensor為一個向量時,如[1, 2, 3]時,其階為
  • 教程| 深度學習初學者必讀:張量究竟是什麼?
    本文對張量進行了詳細的解讀,能幫你在對張量的理解上更進一步。本文作者為 MapR Technologies 的首席應用架構師 Ted Dunning。近段時間以來,張量與新的機器學習工具(如 TensorFlow)是非常熱門的話題,在那些尋求應用和學習機器學習的人看來更是如此。
  • Tensorflow 基礎入門十大操作總結
    但不少小夥伴跟我吐苦水說Tensorflow的應用太亂了,感覺學的雲裡霧裡,能不能搞個Tensorflow的教程呀。今天,就和大家一起梳理下TensorFlow的十大基礎操作。詳情如下:一、Tensorflow的排序與張量Tensorflow允許用戶把張量操作和功能定義為計算圖。
  • Tensorflow基礎入門十大操作總結
    但不少小夥伴跟我吐苦水說Tensorflow的應用太亂了,感覺學的雲裡霧裡,能不能搞個Tensorflow的教程呀。今天,就和大家一起梳理下TensorFlow的十大基礎操作。詳情如下:一、Tensorflow的排序與張量Tensorflow允許用戶把張量操作和功能定義為計算圖。
  • 教程 | 維度、廣播操作與可視化:如何高效使用TensorFlow
    為獲得張量的動態形式,你可以調用 tf.shape 功能,它會返回一個表示給定張量的形狀的張量:dynamic_shape = tf.shape(a)一個張量的靜態維度可以使用 Tensor.set_shape() 函數來進行設置。
  • Tensorflow 2.0的這些新設計,你適應好了嗎?
    但是,如果你和我們一樣是從0.x版本用起的,那麼你就可能得重寫所有代碼庫——雖然官方說會發布轉換工具方便老用戶,但這種工具肯定有很多bug,需要一定的手動幹預。而且,你也必須開始轉變思維模式。這做起來不容易,但真的猛士不就應該喜歡挑戰嗎?
  • Tensorflow 2.0 的這些新設計,你適應好了嗎?
    tf.contrib 退出歷史舞臺。其中有維護價值的模塊會被移動到別的地方,剩餘的都將被刪除。換言之,如果你在這之前從沒接觸過 Tensorflow,你是幸運的。但是,如果你和我們一樣是從 0.x 版本用起的,那麼你就可能得重寫所有代碼庫——雖然官方說會發布轉換工具方便老用戶,但這種工具肯定有很多 bug,需要一定的手動幹預。
  • Pytorch中的5個非常有用的張量操作
    這5個操作是:1. expand()將現有張量沿著值為1的維度擴展到新的維度。張量可以同時沿著任意一維或多維展開。如果你不想沿著一個特定的維度展開張量,你可以設置它的參數值為-1。使用permuting,我將順序設置為(2,1,0),這意味著新的維度應該是[3,2,1]。如圖所示,張量的新視圖重新排列了數字,使得張量的維度為[3,2,1]。當我們想要對不同維數的張量進行重新排序,或者用不同階數的矩陣進行矩陣乘法時,可以使用這個函數。
  • TensorFlow 2.0 常用模塊5:@tf.function
    建議在函數內只使用 TensorFlow 的原生操作,不要使用過於複雜的 Python 語句,函數參數只包括 TensorFlow 張量或 NumPy 數組,並最好是能夠按照計算圖的思想去構建函數(換言之,@tf.function 只是給了你一種更方便的寫計算圖的方法,而不是一顆能給任何函數加速的 銀子彈 )。
  • 構建簡單數據管道,為什麼tf.data要比feed_dict更好?
    但是,其實TF提供了另一種更好的、更簡單的方法:只需使用tf.data API,你就能用幾行代碼搞定高性能數據管道。那麼tf.data的優勢具體在哪裡呢?如下圖所示,雖然feed_dict的靈活性大家有目共睹,但每當我們需要等待CPU把數據饋送進來時,GPU就一直處於閒置狀態,也就是程序運行效率太低。
  • 深度學習的敲門磚:手把手教你TensorFlow初級入門
    當你安裝TensorFlow類庫的同時,其中還包括了非常知名的NumPy類庫,對Python編程中的數學操作非常有用。用Python編程時,不使用類庫(例如NumPy和TensorFlow)就像使用沒有自動對焦的相機:你雖然獲得了更多的靈活性,但你可能很容易犯錯。在機器學習的過程中已經很容易犯錯誤了,所以就讓我們使用TensorFlow來提高化軟體開發的效率吧。
  • 精度延遲兩不誤,移動端性能新SOTA,谷歌TF開源輕量級EfficientNet...
    由於這類硬體針對其應用場景進行了高度定製,它們僅在有限的運算操作上具有良好性能。谷歌的工程師就發現,一些特定硬體加速器並不能很好地支持 EfficientNet 中的一些運算。放縮模型尺寸時固定住其 stem 與 head 模塊以減少放縮後模型的尺寸與計算量利用 TensorFlow 模型優化工具包進行訓練後量化得益於 TF 模型優化工具包,研究者利用整型訓練後量化(integer-only post-training
  • 陳天奇:在深度學習框架之間共享張量——內存張量結構DLPack的PythonAPI來了
    來源:推特編輯:keyu【新智元導讀】DLPack是一種開放的內存張量結構,用於在框架之間共享張量,近日,開發者陳天奇更新社交媒體詳細介紹了為DLPack添加PythonAPI、語義和實現細節的內容。 一種解決的方法是,在內存中直接將張量從一個框架傳遞到另一個框架,而不發生任何數據複製或拷貝。 而DLPack,就是張量數據結構的中間內存表示標準,它是一種開放的內存張量結構,用於在框架之間共享張量。 它提供了一個簡單、可移植的內存數據結構:
  • OpenAI 開源最新工具包,模型增大 10 倍只需額外增加 20% 計算時間
    gradient-checkpointing,該工具包通過設置梯度檢查點(gradient-checkpointing)來節省內存資源。包中的工具,可以犧牲計算時間來解決內存過小的問題,讓你更好地針對模型進行訓練。
  • 學習筆記TF014:卷積層、激活函數、池化層、歸一化層、高級層
    tf.nn.separable_conv2d,規模較大模型不犧牲準確率加速訓練,規模小模型快速收斂但準確率低。tf.nn.conv2d_transpos,卷積核用於新特徵圖,每部分填充卷積核相同值,卷積核遍歷新圖像,重疊部分相加。史丹福大學課程CS231n Winter 2016:Lecture 13。
  • 從一次 CycleGAN 實現聊聊 TF
    習慣於Keras這樣不需要自己定義變量的玩意當然不會太糾結,但用TF時,若是寫兩行定義一下變量總是挺讓人傷神的。如果參照Keras的實現,通過寫個類來定製op,變量管理看起來方便一點,未免太過繁瑣。通常大家都是用類來做,因為model中往往還包含了輸入數據用的placeholder、訓練用的op,甚至一些具體的方法等等內容。這一塊的代碼建議,只不過是最好先寫一個抽象類,把需要的幾個接口給定義一下,然後讓實際的model類繼承,代碼會漂亮很多,也更便於利用諸如PyCharm這樣的IDE來提示你哪些東西該做而沒有做。