使用非線性啟用函式的目的是為了解決非線性問題
tf.nn.relu
tf.sigmoid
tf.tanh
cross_entropy =
-tf.
reduce_mean
(y_* tf.
log(tf.
clip_by_value
(y,1e-10
,1.0))
)#交叉熵
tf.reduce_mean
函式用於計算張量tensor沿著指定的數軸(tensor的某一維度)上的的平均值,主要用作降維或者計算tensor(影象)的平均值。
第乙個引數input_tensor
: 輸入的待降維的tensor;
第二個引數axis
: 指定的軸,如果不指定,則計算所有元素的均值; 0是縱軸,1是橫軸
第三個引數keep_dims
:是否降維度,設定為true,輸出的結果保持輸入tensor的形狀,設定為false,輸出結果會降低維度;
第四個引數name
: 操作的名稱;
***類似的函式還有:***
tf.reduce_sum :計算tensor指定軸方向上的所有元素的累加和;
tf.reduce_max : 計算tensor指定軸方向上的各個元素的最大值;
tf.reduce_all : 計算tensor指定軸方向上的各個元素的邏輯和(and運算);
tf.reduce_any: 計算tensor指定軸方向上的各個元素的邏輯或(or運算);
因為交叉熵一般與softmax回歸一起使用,所以tensorflow 對這兩個功能進行統一封裝,並提供了
tf.nn.softmax_cross_entropy_with_logits
函式
使用了softmax回歸之後的交叉熵損失函式為:
cross_entropy =
-tf.nn.
softmax_cross_entropy_with_logits
(lables = y_, logits = y)
回歸問題最常用的損失函式是均方誤差
mse = tf.
reduce_mean
(tf.
square
(y_ - y)
)#y代表神經網路的輸出答案y_代表了標準答案
但是損失函式對於不同的情景來說是不一樣的,而且損失函式對於結果的收斂性有很大的影響,所以如何選擇損失函式是乙個很重要的事情。必要的時候可以自己寫自己所需要的損失函式。如何寫自定義的損失函式可以參考相應的博文
tensorflow系統自帶的四個損失函式;
tf.nn.
softmax_cross_entropy_with_logits
(logits=
network
.out, labels=
labels_onehot
)
tf.nn.sparse_softmax_cross_entropy_with_logits (logits=
network
.out, labels=
labels
)
tf.nn.sigmoid_cross_entropy_with_logits (logits=
network
.out, labels=
labels_onehot
)
tf.nn.weighted_cross_entropy_with_logits (logits=
network
.out, labels=
labels_onehot
, pos_weight=decimal_number)
學習率用來控制引數更新的速度。
如果學習率過大:
那麼優化的速度將大大加快,但是可能導致引數在極優值的兩側來回移動
如果學習率過小:
雖然能夠保證收斂性,但是會大大降低優化速度
綜上所述,學習率要適中,tensorflow提供了一種靈活的學習率設定方法:指數衰減法:
tf.train.exponential_decay
函式實現了指數衰減學習率,即先用較大的學習率來快速得到乙個比較優的解,然後隨著迭代繼續減小學習率,從而使優化在後期變得穩定。
exponential_decay
函式會指數級地減小學習率:
tf.train.exponential_decay
函式可以設定引數staircase
來選擇不同的衰減方式
當staircase
被設定為false
的時候,以連續的方式進行衰減
當staircase
被設定為true
的時候,以階梯狀的方式進行衰減
**演示
global_step = tf.
variable(0
)learning_rate = tf.train.
exponential_decay
(0.1
, global_step,
100,
0.96
, staircase=
true
)
根據上面**設定:
初始學習率為0.1
制定了staircase=true 所以每訓練100輪以後學習率乘以0.96
實用指數衰減學習率,在minimize函式中傳入global_step將自動更新
通過將損失函式加入正則化:
w = tf.
variable
(tf.
random_normal([
2,1]
, stddev=
1, seed=1)
)y = tf.
matmul
(x,w)
loss = tf.
reduce_mean
(tf.
square
(y_ - y)
)+ tf.contrib.layers.
l2_regularizer
(lambda)
(w)
第一部分是介紹均方誤差損失函式,刻畫了模型在訓練資料上的表現;
第二部分是正則化,它防止模型過度模擬訓練資料中的噪音
lambda引數表示了正則化項的權重
w 為需要計算正則化損失的引數
tensorflow提供了tf.contrib.layer.l2_regularizer
函式,它可以返回乙個函式,這個函式可以計算乙個給定引數的l2正則化項的值。
tf.contrib.layer.l1_regularizer
可以計算l1正則化的值
TensorFlow 深度學習筆記
google 深度學習筆記 經常總結是個好習慣,筆記目錄奉上。歡迎star,有問題可以到issue區討論 官方教程位址 最近tensorflow團隊出了乙個model專案,和這個課程無關,但是可以參考 框架 tensorflow 谷歌出品的基於python的深度學習工具集 工具 ipython,py...
TensorFlow深度學習框架
tensorflow支援python和c 兩種程式語言,再複雜的多層神經網路模型都可以用python來實現,如果業務使用其他程式設計也不用擔心,使用跨語言的grpc或者http服務也可以訪問使用tensorflow訓練好的智慧型模型。tensorflow 是乙個採用資料流圖 data flow gr...
深度學習 初識TensorFlow
深度學習使用場景 影象理解 語音識別 自然語言處理 機器自主 無人駕駛 深度學習,如深度神經網路 卷積神經網路和遞迴神經網路已被應用計算機視覺 語音識別 自然語言處理 音訊識別與生物資訊學等領域並取得了很好的效果。深度學習在人工智慧領域的地位 深度學習框架 google brain計畫產物 應用於a...