0419
B站深度學習視頻https://www.bilibili.com/video/BV1ht411i7Ld?p=1
12-17 總結
神經網絡泛化能力一定要強
激活函數與損失函數
https://www.jianshu.com/p/e5bcdd932d05
激活函數的作用
線性模型的表達能力不夠,激活函數增加神經網絡模型的非線性,提升神經網絡模型表達能力(數據往往線性不可分 )。
幾種激活函數:
Sigmoid:常用來做二分類任務,會造成梯度消失
Tanh:與sigmod函數曲線相近。兩個函數輸入很大或是很小時,輸出幾乎平滑,梯度很小,不利於權重更新。不同的是輸出區間,tanh的輸出區間是在(-1,1)之間,函數以0爲中心。比sigmoid 好。一般二分類問題中,隱藏層用tanh函數,輸出層用sigmod函數。
Relu:f(x)=max(0,x)
Softmax:常用在多分類神經網絡輸出
Leaky relu
Elu
Maxout
幾種損失函數
二次代價函數
交叉熵代價函數
梯度消失
使用sigmoid激活函數,會造成梯度消失的問題。
在輸入x大於10後,計算sigmoid的斜率會約等於0,而更新w是一個累乘的過程,就會使前面的w值計算結果無限接近與0,造成梯度消失問題
可視化神經網絡演示網頁
https://cs.stanford.edu/people/karpathy/convnetjs/demo/classify2d.html
正則化,提高神經網絡的泛化能力
神經元越多,越能表示複雜的模型,但是過擬合的風險也越高
數據預處理
原始數據—> 以0 爲中心化 -à歸一化處理 保證所有數據都是在(0,1)之間
Numpy.mean
https://blog.csdn.net/lilong117194/article/details/78397329
mean()函數功能:求取均值
經常操作的參數爲axis,以m * n矩陣舉例:
axis 不設置值,對 m*n 個數求均值,返回一個實數
axis = 0:固定列,壓縮行,對各列求均值,返回 1* n 矩陣
axis =1 :固定行,壓縮列,對各行求均值,返回 m *1 矩陣
numpy.std
https://blog.csdn.net/chixujohnny/article/details/51106481
計算矩陣標準差
axis=0計算每一列的標準差
axis=1計算每一行的標準差
權重初始化
權重初始化的時候,不能全是1,或者全是2等等,因爲無論是幾這樣反向傳播回來的時候都是朝1個方向去更新的。相當於這個神經網絡迭代太慢了或者太弱了
通常要進行高斯初始化或者隨機初始化。
偏置b 初始化一般是0或者1 對結果影響很小
Droup-Out
爲了防止過擬合
每次隨機選擇神經元。
假如設定 droup-out率 保留率 60% 就是每次隨機選擇60%的神經元去玩前向傳播+反向傳播
用迭代次數去彌補神經元少的問題
Anaconda
anaconda search -t conda tensorflow 查找tensorflow 有哪些可安裝的庫
anaconda show ….. 搜索出安裝這個庫 需要什麼命令