1. 程式人生 > 其它 >Tensorflow2.0學習筆記-複雜度、學習率

Tensorflow2.0學習筆記-複雜度、學習率

技術標籤:筆記

一、神經網路的複雜度

神經網路複雜度分為空間複雜度和時間複雜度
在這裡插入圖片描述

空間複雜度:

空間複雜度由層數,和待優化引數的個數進行表示。
層數 = 隱藏層的層數 + 1個輸出層
總引數 = 總w + 總b
上圖中引數:3x4+4 + 4x2+2 = 26

時間複雜度

時間複雜度使用神經網路的運算次數進行表示。

上圖中3x4 + 4x2 =20

二、學習率

在使用中,我們可以使用指數衰減學習率來合理的設定學習率。我們可以先使用較大的學習率,快速得到最優解,然後使用指數衰減,逐漸減小學習率,使模型在訓練後期穩定。
指數衰減學習率 = 初始學習率 * 學習衰減率 **(當前輪數/多少輪衰減一次)

w = tf.Variable(tf.constant(5, dtype=tf.float32))
epoch = 40
LR_BASE = 0.2  # 最初學習率
LR_DECAY = 0.99  # 學習率衰減率
LR_STEP = 2  # 喂入2輪後,更新一次學習率

for epoch in range(epoch):  # for epoch 定義頂層迴圈,表示對資料集迴圈epoch次,此例資料集資料僅有1個w,初始化時候constant賦值為5,迴圈100次迭代。
    lr = LR_BASE * LR_DECAY ** (int(epoch / LR_STEP))
    with tf.GradientTape() as tape:  # with結構到grads框起了梯度的計算過程。
        loss = tf.square(w + 1.)
    grads = tape.gradient(loss, w)  # .gradient函式告知誰對誰求導

    w.assign_sub(lr * grads)  # .assign_sub 對變數做自減 即:w -= lr*grads 即 w = w - lr*grads
    print("After %s epoch,w is %f,loss is %f,lr is %f" % (epoch, w.numpy(), loss, lr))

#輸出結果(可以觀測到每兩輪,學習率會衰減一次)
After 0 epoch,w is 2.600000,loss is 36.000000,lr is 0.200000
After 1 epoch,w is 1.160000,loss is 12.959999,lr is 0.200000
After 2 epoch,w is 0.304640,loss is 4.665599,lr is 0.198000
After 3 epoch,w is -0.211997,loss is 1.702086,lr is 0.198000
After 4 epoch,w is -0.520926,loss is 0.620948,lr is 0.196020
After 5 epoch,w is -0.708742,loss is 0.229512,lr is 0.196020
After 6 epoch,w is -0.821785,loss is 0.084831,lr is 0.194060    
.......