寒蟾
嗯。。。這種問題,如果有應用過TensorFlow做大規模分佈式機器學習系統的話,那麼已經可以算作熟悉TensorFlow了。當然如果要檢驗是否熟悉Tensorflow,那麼可以用下面這些標準大概確認下自己的熟悉程度,當然同時也可以用來查缺補漏。
Tensorflow基礎知識點
計算圖
在Tensorflow中,經常提及到計算圖的概念,那什麼是計算圖呢?它實質上是一個全局數據結構:計算圖是一個有向圖,捕獲有關計算方法的指令。我們來看看簡單的計算圖形成,通過以下代碼,我們可以生成2+3的步驟,但是隻包含計算步驟,不包含結果,至少目前還沒實現。
會話
會話的概念就是將計算圖生成的步驟逐一執行,處理內存分配和優化,使我們能夠實際執行由圖形指定的計算。例如以下代碼:
佔位符和 feed_dict
佔位符是一種用於接受外部輸入的節點,而feed_dict 屬性是為了給佔位符提供實質的數值。
變量共享
你可能會碰到帶有變量共享的 Tensorflow 代碼,代碼有它們的作用域,並設置“reuse=True”。我強烈建議你不要在代碼中使用變量共享。如果你想在多個地方使用單個變量,只需要使用指向該變量節點的指針,並在需要時使用它。換句話說,對於打算保存在內存中的每個參數,應該只調用一次 tf.get_variable()。
優化器
在深度學習中,典型的“內循環”訓練如下:
獲取輸入和 true_output;
根據輸入和參數計算出一個“猜測”;
根據猜測和 true_output 之間的差異計算出一個“損失”;
根據損失的梯度更新參數。
優化器的作用在於對於找到的每個變量節點,它計算與損失相關的變量梯度。然後,它為該變量計算新值:當前值減去梯度乘以學習率。最後,它執行一個賦值操作來更新變量的值。
用 tf.Print 進行調試
一般來說,檢查計算圖中發生了什麼是很困難的。你不能使用常規的 Python 打印語句,因為你永遠無法訪問到要打印的值,這時候就需要用tf.Print。
常用模型的Tensorflow實現
對於這一塊內容,最好自己用編程語言實現過一遍,考驗深度學習基礎功底。
卷積網絡(Convolutional Network)
循環神經網絡(LSTM)(Recurrent Neural Network (LSTM))
受限玻爾茲曼機(Restricted Boltzmann Machine)
深度信念網絡(Deep Belief Network)
作為RBM堆疊的深度自編碼器(Deep Autoencoder as stack of RBMs)
去噪自編碼器(Denoising Autoencoder)
堆疊的去噪自編碼器(Stacked Denoising Autoencoder)
作為去噪自編碼器堆疊的深度自編碼器(Deep Autoencoder as stack of Denoising Autoencoders)
多層感知器(MultiLayer Perceptron)
Logistic 迴歸
TensorFlow的交叉熵函數
交叉熵(Cross Entropy)是Loss函數的一種(也稱為損失函數或代價函數),用於描述模型預測值與真實值的差距大小,常見的Loss函數就是均方平方差(Mean Squared Error)。
交叉熵具體定義如下:
TensorFlow針對分類問題,實現了四個交叉熵函數,分別是tf.nn.sigmoid_cross_entropy_with_logits
tf.nn.softmax_cross_entropy_with_logits
tf.nn.sparse_softmax_cross_entropy_with_logits
tf.nn.weighted_cross_entropy_with_logits
我會在這裡發佈所有與科技、科學有關的有趣文章,歡迎訂閱我的頭條號。偶爾也回答有趣的問題,有問題可隨時在評論區回覆和討論。
(碼字不易,若文章對你幫助可點贊支持~)
楊沐白
試答一下。如有不對的地方,還望見諒。
隨著人工智能熱潮的興起,機器學習、深度學習等相關的職位都變的火爆異常。也有越來越多的人在簡歷上寫著精通機器學習、深度學習和各種框架(如Tensorflow,Caffe,Torch等)。但在實際的面試過程中,我們很容易發現大多數自稱熟悉的候選人其實僅僅停留在“用過"這個程度上,遠遠達不到熟悉。
我認為“熟悉”Tensorflow可以分為兩個方面,作為研發人員,根據你期望面試的崗位深入瞭解一個方面應該就足夠了。
一、算法工程師(應用)
作為算法實現或者應用方向的工程師,Tensorflow只是作為一個工具,用來實現一些paper上的模型或者你個人的idea。那麼最重要的就是能夠把Tensorflow這個框架用的得心應手,大概總結以下幾點,可以自己check。
對tensorflow中常用的op是否能夠熟練使用,如tf.concat,tf.slice,tf.tile等(一般會用numpy的應該沒問題)
是否能夠熟練使用原生的基礎網絡,如conv2d,rnn_cell等。以及衍生出的各種變種,如
separable_conv2d,lstm,gru等。
是否能夠利用tensorflow開發出一些經典的模型並訓練,如VGG-net,ResNet等。
是否能夠基於tensorflow完整的實現一個模型的構建、訓練、驗證、推理、部署流程。
是否瞭解一些高階的API或三方庫,如Slim,tf-learn,tf-layer等。方便快速開發。
是否能夠熟練的使用一些可視化工具來更好的訓練一個魯棒性和準確性更強的模型,如tensorboard。
是否能夠熟練的使用TensorFlow的分佈式環境來提高訓練效率,縮短訓練時間。
是否瞭解在生產環境中,基於tensorflow的一些優化方法,比方說怎麼對模型文件做剪枝,怎麼壓縮文件大小等。
- 以上只是針對tensorflow這個框架而言,當然作為算法工程師的前提就是熟悉各類算法的原理和一些經典算法的推理過程。
二、平臺工程師
現在各大公司都推出了自己的機器學習平臺、深度學習平臺等。對於想參與這部分工作的人來說,就需要更加細緻的瞭解tensorflow的架構和各種op的具體實現了,最好的方法就是閱讀Tensorflow的源碼和參與社區討論,或者為項目提PR,參與tensorflow框架的開發了。不過題主說自己是算法背景,那這個方向就不過多的贅述。