前言:這一章介紹的就是一些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主要學習了圖的基本知識,不帶權圖包括有向圖,無向圖,帶權圖包括有向網路,無向網路。在求度的時候要注意無向圖和有向圖的區別,有向圖包括入度和出度。連通分量 最大...