深度學習入門之第六章 與學習相關的技巧

2021-09-11 06:25:29 字數 2514 閱讀 5967

前言:這一章介紹的就是一些tensorflow封裝好的函式,以及函式的意義。

本章主要介紹一下結合tensorflow中幾個比較常見的優化器,batchnorm, 和 dropout

文章中舉了乙個很好的關於神經網路優化引數的例子, 你現在在大沙漠之中眼睛被蒙住了,但是你知道沙漠最低處有水喝,問你怎麼找到沙漠中最低點。

第一種方法:沒讀過書的人 隨便找,拼運氣,顯然這種情況下死的概率很大

第二種方法:讀過書的人就想我要找最低點,我把叫腳360的探索一圈,我感覺那個位置上最低我就向那個方向移動, sgd(隨機梯度下降法)

所以sgd的優化引數就想貪心演算法一下,每次我只想現在優化到最大的可能:

sgd演算法優化的步驟:

第一:找到初始位置(對應的就是你在沙漠中那個位置)

第三:定義乙個常量(學習率)按照sgd計算公式修改引數,

# 深度學習入門書上的**,在原來的**基礎上增加了乙個繪製優化函式**,

import numpy as np

import matplotlib.pyplot as plt

from collections import ordereddict

from mpl_toolkits.mplot3d import axes3d

def f(x, y):

return x**2 + y**2

def df(x, y):

return 2.0*x, 2.0*y

class sgd:

"""隨機梯度下降法(stochastic gradient descent)"""

def __init__(self, lr=0.01):

self.lr = lr

def update(self, params, grads):

for key in params.keys():

params[key] -= self.lr * grads[key]

# 定義函式初始的優化的位置

init_pos = (-5, 5)

params = {}

params['x'], params['y'] = init_pos[0], init_pos[0]

# 定義sgd下降的方向

grads = {}

grads['x'], grads['y'] = 0, 0

optimizers = ordereddict()

optimizers["sgd"] = sgd(lr=0.1)

idx = 1

for key in optimizers:

optimizer = optimizers[key]

x_history =

y_history =

params['x'], params['y'] = init_pos[0], init_pos[1]

for i in range(100):

grads['x'], grads['y'] = df(params['x'], params['y'])

optimizer.update(params, grads)

x = np.arange(-10, 10, 0.1)

y = np.arange(-10, 10, 0.1)

fig = plt.figure()

ax = axes3d(fig)

x, y = np.meshgrid(x, y)

z = f(x, y)

# 繪製函式的立體影象

ax.plot_su***ce(x, y, z, cmap='rainbow')

plt.show()

# for ****** contour line

mask = z > 7

z[mask] = 0

plt.plot(x_history, y_history, 'o-', color="red")

# plt.contour() 函式表示繪製等高線

plt.contour(x, y, z)

plt.ylim(-5, 5)

plt.xlim(-5, 5)

plt.plot(0, 0, '+')

plt.title(key)

plt.xlabel("x")

plt.ylabel("y")

print("",grads['x'], grads['y'])

plt.show()

# 實驗結果:

原始函式的空間影象

sgd的優化行走過程

經過100步之後, sgd找到的最小值的位置, 我們可以發現已經很接近0了 sgd驗證成功

-2.5462949704181095e-09 2.5462949704181095e-09

第六章 學習筆記

1.引數分為位置引數和關鍵字引數。def func positional para x,y,z passdef func keyword para kwd1 1,kwd2 4,kwd3 9 pass2.1 當有多個位置引數時,可以用乙個星號來收集引數,函式內使用這些位置引數時可以通過for 迴圈依次...

第六章學習記錄

教材學習內容總結 1 使用關鍵字inte ce來定義乙個介面,介面的定義分為介面宣告和介面體 inte ce printable 2 介面提中包含常量的宣告 沒有變數 和抽象方法 介面體只有抽象的方法,沒有普通的方法,而且介面體中所有的常量的訪問許可權一定都是public,而且是static常量,所...

第六章學習小結

第六章主要進行有關圖的學習,這一章學得東西很多,涉及圖的方方面面包括如何定義儲存結構,如何初始化,如何建立一張圖,如何進行圖的操作等等。6 1主要學習了圖的基本知識,不帶權圖包括有向圖,無向圖,帶權圖包括有向網路,無向網路。在求度的時候要注意無向圖和有向圖的區別,有向圖包括入度和出度。連通分量 最大...