cs231n-(5)神經網路-2:設定資料和Loss
資料預處理
神經網路輸入的資料往往要經過預處理。假設資料X
大小為[N x D],其中N
表示元素個數,D
表示維度。
減去均值
最長用的就是減去每個特徵的均值(均值常常有訓練集計算得到),減去均值的幾何意義是將資料中心大致移到零點。。使用python
時,可以用X-=np.mean(X, axis = 0)
算得均值。如果是影象,常常減去RGB通道的均值。
正則化
正則化是指將資料各個維度歸一化,即變化範圍相同。一般有兩種方法:1、將資料均值設為零(如減去均值),之後除以標準差:X /= np.std(X, axis=0)
。2、不同維度的資料範圍相差很大,且重要性相同,將其最大值和最小值分別變換為+1和-1。
下去就是原始資料,零中心化,正則化處理的效果。
PCA and Whitening
PCA是用來降維,假設已經完成了零中心化和歸一化,降維過程如下:
先計算協方差矩陣
# Assume input data matrix X of size [N x D]
X -= np.mean(X, axis = 0) # zero-center the data (important)
cov = np.dot(X.T, X) / X.shape[0] # get the data covariance matrix
協方差矩陣中(i,j)位的資料表示i維度和j維度資料的協方差;對角線上資料表示某一維度的方差。協方差矩陣是對稱的半正定矩陣,對它進行SVD分解:
U,S,V = np.linalg.svd(cov)
得到U
是特徵向量矩陣,它的每一列都是一個特徵向量,S
是特徵值向量,因為協方差矩陣是對稱的半正定矩陣,所以它等於特徵值平方。為了去除相關性,將已經中心化的資料對映到特徵向量上
Xrot = np.dot(X, U) # decorrelate the data
其中U
的每一列都是標準正交特徵向量,且已經按照特徵值由大到小排列(np.linalg.svg
返回時已經排列)。與特徵向量相乘,相當於對X的資料做一個旋轉對映,對映到特徵向量對應的正交基上。可以只保留前面較大特徵值對應的特徵向量,丟棄較小值對應的特徵向量,以此來降維。這種方法叫做Principal component analysis
Xrot_reduced = np.dot(X, U[:,:100 ]) # Xrot_reduced becomes [N x 100]
- 1
通過這個操作,保留了前100維度資料(以方差大小為標準)。
經過PCA處理的資料,可以再經過白化Whitening處理。白化是指PCA處理後的資料,每個維度除以其特徵值。幾何解釋就是服從多維度高斯分佈的資料,經過白化處理後,服從均值為零,協方差相等的分佈。
# whiten the data:
# divide by the eigenvalues (which are square roots of the singular values)
Xwhite = Xrot / np.sqrt(S + 1e-5)
上面處理為白化操作,分母加上1e-5
為防止分母為零。這樣的操作把所有維度資料拉伸到相同範圍,可能會放大噪聲,實際中可以通過增大分母(加上比1e-5
更大的值)來平滑。
上圖左邊分佈為原始資料。中間為PAC處理後的資料,可以看出PCA處理後,將座標軸旋轉,可以看出橫軸資訊量大,如果只保留一維資料,要丟棄縱軸資料。右邊為白化處理後的資料,資料範圍相同了
使用CIFAR-10來展示PCA和白化
上圖中,最左邊為原始資料,每張圖片可以看做是3072的列向量。第二張為特徵向量中,前144個(按照特徵值排列)。第三張為經過PAC降維處理後,只保留144維特徵的圖片;圖片變模糊了,說明只保留了低頻部分。最後一張為白化後的圖片。
注意:CNN不需要進行PCA和白化操作,這裡提到只是講解資料處理的一般方法。
資料預處理,只能在訓練集上應用。應該先將資料分為訓練集、驗證集、測試集,之後在訓練集上應用資料預處理。
權重初始化
訓練神經網路前,要先初始化權重。
全部初始化為零
權重最終的值我們不知道,但是根據前面資料預處理過程,大概可以猜到,權重最終應該是一般為正,一般為負。但是權重不能全部初始化為零。如果全部初始化為零,那麼所有神經元輸出將相同,計算得到所有梯度都相同,權重更新相同,最終得到的權重也相同。
小的隨機數
因為正則化,權重要比較小,但是又不能對稱;那麼可以用小的隨機數來初始化。這樣計算得到不同梯度,迭代更新權重會趨向不同。例如這樣初始化。W = 0.01 * np.random.randn(D, H)
,randn
是生成零均值單位方差的高斯分佈。這樣初始化,每個神經權重向量是從高維高斯分佈隨機取樣而來;也可是使用隨機生成的隨機數。但是在實際中,這樣初始化效果不好。
小的權重並不一定會得到好的效果。神經網路中,如果權重比較小,那麼反向傳播時,梯度就比較小。這樣會減小梯度傳播的訊號,在深度神經網路中也是個問題。
校準方差
如果神經元輸出有著相似的分佈,那麼收斂速度回加快。前面提到的權重初始化方法,隨著輸入增大,輸出的方差會增大。通過除以sqrt(n)
,其中n
是輸入個數,可以將輸出方差歸一化到1;例如這樣初始化w = np.random.randn(n) / sqrt(n)
。
不考慮非線性啟用函式,假設輸出s=∑niwixis=∑inwixi,那麼計算輸出方差和輸入關係如下:
Var(s)=Var(∑inwixi)=∑inVar(wixi)=∑in[E(wi)]2Var(xi)+E[(xi)]2Var(wi)+Var(xi)Var(wi)=∑inVar(xi)Var(wi)=(nVar(w))Var(x)Var(s)=Var(∑inwixi)=∑inVar(wixi)=∑in[E(wi)]2Var(xi)+E[(xi)]2Var(wi)+Var(xi)Var(wi)=∑inVar(xi)Var(wi)=(nVar(w))Var(x)上面第三步中,用到了假設E[xi]=E[wi]=0E[xi]=E[wi]=0(注意,有些並不等於零,例如ReLU),最後一步假設了x,wx,w服從相同分佈。如果想要輸出和xx有相同的方差,那麼nVar(w)nVar(w)必須為1,所以得到上面初始化方式w = np.random.randn(n) / sqrt(n)
。
稀疏初始化
首先將所有權重初始化為零,但是為了避免對稱,隨機在層之間連線個別神經全,權重初始化可以使用小的高斯分佈,連線個數常常設定為10.
實際應用
目錄,使用ReLU啟用函式的,建議初始化為w = np.random.randn(n) * sqrt(2.0/n)
,參考He et al
批歸一化 Batch Normalization
這是個最近出現的技術,參考論文。它在一定程度上減輕瞭如何初始化網路權重的問題。具體做法為讓資料在輸入啟用函式前先通過一個網路,通過這個網路之後,輸出資料(即輸入啟用函式的資料)服從標準高斯分佈。因為歸一化是一個可以簡單的求導操作,因此方案可行。實際應用中,常常在全連線層(卷積層)和啟用函式(非線性操作)之間插入一個BatchNormalization層。批歸一化可以理解為在網路每一層之前都做了預處理。
正則化
正則化用來阻止網路過擬合,有以下幾種方法:
L2 regularization
L2正則化是最常用的方法;它可以直接懲罰目標函式中任何一個權重平方的幅度。具體實現時對於每一個權重ww在目標函式都加上一項12λw212λw2,其中λλ常常等於1212,這樣方便求導運算。L2正則化可以直觀理解為,它限制單個較大的權重,在權重和不變時,它把權重大概均勻分不到每個權重上。使用L2正則化後,在反向傳播梯度更新時,權重會以W+=-lambda * W
速度向0靠近。
L1 regularization
L1正則化也是常用的一種方法,在目標函式中,它給每個權重加上一項λ|w|λ|w|。可以把L1和L2正則化結合起來λ
資料預處理神經網路輸入的資料往往要經過預處理。假設資料X大小為[N x D],其中N表示元素個數,D表示維度。減去均值最長用的就是減去每個特徵的均值(均值常常有訓練集計算得到),減去均值的幾何意義是將資料中心大致移到零點。。使用python時,可以用X-=np.mean(X,
迴圈神經網路 2(Gated RNN - LSTM )
simple RNN 具有梯度消失或者梯度爆炸的特點,所以,在實際應用中,帶有門限的RNN模型變種(Gated RNN)起著至關重要的作用,下面我們來進行介紹:
LSTM (Long Short-term Memory )
卷積神經網路 2 Why CNN
為什麼處理圖片要用CNN? 原因是:
一個神經元無法看到整張圖片
能夠聯絡到小的區域,並且引數更少
圖片壓縮畫素不改變圖片內容
1. CNN 的特點
卷積: 一些卷積核遠遠小於圖片大小; 同樣的pat
標籤(空格分隔): 神經網路
0.回顧
cs231n (一)影象分類識別講了KNN
cs231n (二)講了線性分類器:SVM和SoftMax
cs231n (三)優化問題及方法
cs231n (四)反向傳播
cs231n (五)神經網路 part 1:
迴圈神經網路 2(Gated RNN - LSTM )
simple RNN 具有梯度消失或者梯度爆炸的特點,所以,在實際應用中,帶有門限的RNN模型變種(Gated RNN)起著至關重要的作用,下面我們來進行介紹:
LSTM (Long Short-term
如今市面上的CRM普遍以機械式的記錄和歸納為主,沒有一款真正實現智慧化的CRM管理軟體為企業所用。想象一下,如果我們使用了融合類神經網路、工作圖譜、大資料、類人工智慧和內容視覺化等理念的CRM,那麼,我們的工作會變成什麼樣子?
人脈關係管理是企業CRM的主要功能,目前的C
神經網路訓練細節系列筆記:
這一篇,我們將繼續介紹神經網路訓練細節。
一、Data Preprocessing(資料預處理)
如圖是原始資料,資料矩陣X有三種常見的資料預處理形式,其中我們假定X的大小為[N×D](N是資料的數量,D是它們的維數
#include <string>
#include <iostream>
#include <opencv2\opencv.hpp>
#include <opencv2\ml.hpp>
#include<fstream>
using n
1.背景
1.1以人腦的神經網路為啟發,歷史上出現過很多不同的版本
1.2最著名的演算法是1980年的是backpropagation
2.多層向前神經網路(Multilayer Feed-Forward Neural Network)
2.1 Backpropagation被使用在
一、病態矩陣
求解方程組時如果對資料進行較小的擾動,則得出的結果具有很大波動,這樣的矩陣稱為病態矩陣。
病態矩陣是一種特殊矩陣。指條件數很大的非奇異矩陣。病態矩陣的逆和以其為係數矩陣的方程組的界對微小擾動十分敏感,對數值求解會帶來很大困難。
例如:
現在有線性方程組: Ax =
Polyak平均會平均優化演算法在引數空間訪問中的幾個點。如果t次迭代梯度下降訪問了點,那麼Polyak平均演算法的輸出是。
當應用Polyak平均於非凸問題時,通常會使用指數衰減計算平均值:
轉自https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/5-05-CNN3/
目錄
圖片處理
建立卷積層
建立全連線層
選優化方法
完整程式碼
原文地址:Introduction to 1D Convolutional Neural Networks in Keras for Time Sequences
原文作者:Nils Ackermann
譯文出自:掘金翻譯計劃
本文永久連結:github.com/xitu/go
機器學習的應用是一個高度依賴經驗的過程,伴隨著大量的迭代過程,你需要訓練大量的模型才能找到合適的那個,優化演算法能夠幫助你快速訓練模型。
難點:機器學習沒有在大資料發揮最大的作用,我們可以利用巨大的資料集來訓練網路,但是在大資料下訓練網路速度很慢;
使用快速的優化演算法大大提高效率 在開始本文之前,讓我們先看看一則報道:
人民網訊 據英國廣播電視公司10月25日報道,由人工智慧創作的藝術作品以432000美元(約合300萬人民幣)的高價成功拍賣。
看起來一則不起眼的新聞,其實意義深遠,它意味著人們開始認可計算機創作的藝術價值,那些沾沾自喜認為不會被人工智慧取代的藝術家也要瑟 目錄
寫在前面
成員變數的含義及作用
構造與析構
記憶體同步管理
參考
部落格:blog.shinelee.me | 部落格園 | CSDN
寫在前面
在Caffe原始碼理解1中介紹了Blob類,其中的資料成員有
shared_ptr<SyncedMemory>
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
mnist=input_data.read_data_sets("MNIST_data",one_hot=True)
ba
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
mnist=input_data.read_data_sets('MNIST_data',one_hot=True)
#每
用類儲存資料
類實際上就是一個數據結構,對於python而言,它是一個類似於字典的結構。當根據類建立了物件之後,這個物件就有了一個數據結構,包含一些賦值了的屬性。在這一點上,它和其它語言的struct的作用是類似的:儲存資料並提供資料檢索功能。
例如,下面是史上最簡單的類:
class Person
資料集
測試集
除了0其他的都能識別出來
---------1---------
0.003922 0.003922 0.003922 0.003922 0.003922 相關推薦
cs231n-(5)神經網路-2:設定資料和Loss
機器學習與深度學習系列連載: 第二部分 深度學習(十四)迴圈神經網路 2(Gated RNN - LSTM )
機器學習與深度學習系列連載: 第二部分 深度學習(十一)卷積神經網路 2 Why CNN for Image?
# [cs231n (八)神經網路總結:最小網路案例研究 ][1]
機器學習與深度學習系列連載: 第二部分 深度學習(十四)迴圈神經網路 2(Gated RNN
類神經網路+工作圖譜+大資料+類人工智慧+內容視覺化:一款企業軟體裡的逆天思維
斯坦福cs231n學習筆記(8)------神經網路訓練細節(資料預處理、權重初始化)
【opencv3--ANN神經網路訓練識別OCR資料集】
5.神經網路演算法
神經網路優化:病態矩陣與條件數
神經網路優化:指數衰減計算平均值(滑動平均)
【深度學習】Tensorflow——CNN 卷積神經網路 2
[譯]在 Keras 中使用一維卷積神經網路處理時間序列資料
吳恩達改善深層神經網路引數:超引數除錯、正則化以及優化——優化演算法
實戰生成對抗網路[2]:生成手寫數字
Caffe原始碼理解2:SyncedMemory CPU和GPU間的資料同步
TensorFlow之神經網路簡單實現MNIST資料集分類
TensorFlow之卷積神經網路(CNN)實現MNIST資料集分類
Python面向物件基礎2:設定物件屬性
神經網路識別數字相關資料