點擊上方關注,All in AI中國
TensorFlow是一個免費的開源軟件庫,用於跨任務範圍的數據流和可區分編程。它是一個符號數學庫,也用於機器學習應用程序,如神經網絡。它用於Google的研究和製作,TensorFlow由Google Brain團隊開發,供Google內部使用。
深度學習是一種特殊的機器學習,通過學習將世界表示為概念的嵌套層次結構來實現巨大的力量和靈活性,每個概念都是根據更簡單的概念定義的,更抽象的表示是根據更抽象的概念計算出來的。
深度學習如何運作?
深度學習模型旨在通過類似於人類得出結論的邏輯結構來持續分析數據。為實現這一目標,深度學習使用稱為人工神經網絡(ANN)的分層算法結構。人工神經網絡的設計靈感來自人腦的生物神經網絡。這使得機器智能比標準機器學習模型的功能強大得多。確保深度學習模型不會得出錯誤的結論是一個棘手的前景,但是當它按預期工作時,功能性深度學習是一個科學奇蹟和潛在的骨幹,是真正的人工智能的潛在支柱。
- 機器學習使用算法來解析數據,從數據中學習,並根據學到的知識做出明智的決策
- 深度學習將算法分層構建,創建一個“人工神經網絡”,該網絡能夠自主學習並做出智能決策
- 深度學習是機器學習的一個子領域,雖然兩者都屬於人工智能的廣泛範疇,但深度學習是最像人類的人工智能的動力
在編寫實際的深度學習應用程序之前,我們必須從TensorFlow中理解以下概念
- 常數
- 變量
- 佔位符
- 損失計算
- 減少損失
常量
可以使用tf.constant()函數創建常量。
tf.constant( value,dtype=None, shape=None, name='Const', verify_shape=False )
- 參數:
- 值:輸出類型為dtype的常量值(或列表)。
- dtype:得到的Tensor的元素的類型。
- 形狀:結果Tensor的可選維數。
- 名稱:Tensor的可選名稱。
- verify_shape:布爾值,用於驗證值的形狀。
import tensorflow as tf
#Build computational graph
node1 = tf.constant(3.0,tf.float32)
node2 = tf.constant(4.0,tf.float32)
output = node1 + node2
#Run computational graph
sobj = tf.compat.v1.Session()
sobj.run(output)
會話:會話基本上是TensorFlow程序的支柱。會話激活程序以使常量準備就緒並執行所需的操作。它可以通過以下方式完成。
佔位符
佔位符只是一個變量,我們將在以後分配數據。它允許我們創建操作並構建計算圖,而不需要數據。在TensorFlow術語中,我們然後通過這些佔位符將數據提供給圖表。
tf.placeholder(
dtype,
shape=None,
name=None
)
參數:
- dtype:要進給的Tensor中的元素類型。
- 形狀:要進給的Tensor的形狀(可選)。如果未指定形狀,則可以提供任何形狀的Tensor。
- name:操作的名稱(可選)。
import tensorflow as tf
#Build computational grapg
node1 = tf.compat.v1.placeholder(tf.float32)
node2 = tf.compat.v1.placeholder(tf.float32)
output = node1 + node2
#Run computational graph
sobj = tf.compat.v1.Session()
sobj.run(output,{node1:[1,3],node2:[4,5]})
變量來計算損失
TensorFlow變量是表示程序操縱的共享、持久狀態的最佳方式。變量在調用run()時保持圖中的狀態。您可以通過構造變量類的實例將變量添加到圖形中
import tensorflow as tf
#Model Parameter
w = tf.compat.v1.Variable([.3],tf.float32)
b = tf.compat.v1.Variable([-.3],tf.float32)
#Input and Output
x = tf.compat.v1.placeholder(tf.float32)
linear_model = w * x + b
y = tf.compat.v1.placeholder(tf.float32)
#loss function
squared_delta = tf.square(linear_model-y)
loss = tf.reduce_sum(squared_delta)
init = tf.global_variables_initializer()
#Run computational graph
sobj = tf.compat.v1.Session()
sobj.run(init)
sobj.run(loss,{x:[1,2,3,4],y:[0,-1,-2,-3]})
減少損失
我們使用損失函數來確定預測值與訓練數據中的實際值的偏差。我們改變模型權重以使損失最小化,這就是訓練的全部內容。 梯度下降是一種嘗試最小化某些錯誤的學習算法
TensorFlow有一整套優化類型,並且您也可以定義自己的優化
- 梯度下降優化器
- Adagrad 優化器
- Momentum 優化器
- Adam優化器
- Ftrl優化器
- RMSProp優化器
import tensorflow as tf
#Model Parameter
w = tf.compat.v1.Variable([.3],tf.float32)
b = tf.compat.v1.Variable([-.3],tf.float32)
#Input and Output
x = tf.compat.v1.placeholder(tf.float32)
linear_model = w * x + b
y = tf.compat.v1.placeholder(tf.float32)
#loss function
squared_delta = tf.square(linear_model-y)
loss = tf.reduce_sum(squared_delta)
#optimiser
optimiser = tf.compat.v1.train.GradientDescentOptimizer(0.01)
train = optimiser.minimize(loss)
init = tf.global_variables_initializer()
#Run computationalgraph
sobj = tf.compat.v1.Session()
sobj.run(init)
for i in range(1000):
sobj.run(train,{x:[1,2,3,4],y:[0,-1,-2,-3]})
sobj.run([w,b])