Tensorflow 學習2 深度神經網路

2021-09-29 10:16:59 字數 3722 閱讀 7697

使用非線性啟用函式的目的是為了解決非線性問題

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...