莫烦-pytorch
pytorch 莫煩
激勵函數
Y = AF(Wx)
這里的AF()就是激勵函數,其實就是另外一個非線性函數。比如relu,sigmoid,tanh
- 選擇激勵函數的竅門:當神經網絡層只有兩三層時,可選擇任意的激勵函數;當神經網絡特別多層時,要慎重,小心梯度爆炸
- CNN時推薦relu
- RNN時推薦tanh或者relu
回歸
- 建立神經網絡
- 訓練網絡
分類
- 建立神經網絡
- 訓練網絡
快速搭建
搭建神經網絡不止class net()這種方法,有一個快速的方法torch.nn.Sequential()
net = torch.nn.Sequential(torch.nn.Linear(1, 10),torch.nn.ReLU(),torch.nn.Linear(10, 1) )Sequential方法直接認定的就是relu()這種激勵函數,而對于自己手寫的net來說,可以在forward()方法中指定激勵函數,就會更加靈活一些。
保存與提取
- 保存
- 提取
- 提取網絡參數
網絡參數:能獨立地反映網絡特性的參數
提取所有網路參數
批訓練
DataLoader
# 先轉換成 torch 能識別的 Dataset torch_dataset = Data.TensorDataset(data_tensor=x, target_tensor=y)# 把 dataset 放入 DataLoader loader = Data.DataLoader(dataset=torch_dataset, # torch TensorDataset formatbatch_size=BATCH_SIZE, # mini batch size.,就是每次取多少數據shuffle=True, # 要不要打亂數據 (打亂比較好)num_workers=2, # 多線程來讀數據 )優化器
要讓神經網絡聰明起來!!!!
- SGD
- Momentum
- AdaGrad
- RMSProp
- Adam
所以我們把這個人從平地上放到了一個斜坡上, 只要他往下坡的方向走一點點, 由于向下的慣性, 他不自覺地就一直往下走, 走的彎路也變少了. 這就是 Momentum 參數更新.
而是給他一雙不好走路的鞋子, 使得他一搖晃著走路就腳疼, 鞋子成為了走彎路的阻力, 逼著他往前直著走
是momentum和adagrad的集合體,同時具備兩者的優勢。但是RMSProp并沒有包含momentum的一部分,所以在Adam中又進一步改進
對于Adam來說,能快好的達到目標,快速收斂到最好的地方
Optimizer
- SGD
- Momentum
- RMSProp
- Adam
在實驗中,對各個優化器還是都應該試一試,看看哪個更好
CNN
- 從下到上的順序, 首先是輸入的圖片(image), 經過一層卷積層 (convolution), 然后在用池化(pooling)方式處理卷積的信息, 這里使用的是 max pooling 的方式.
- 然后在經過一次同樣的處理, 把得到的第二次處理的信息傳入兩層全連接的神經層 (fully connected),這也是一般的兩層神經網絡層,最后在接上一個分類器(classifier)進行分類預測. 這僅僅是對卷積神經網絡在圖片處理上一次簡單的介紹.
- 卷積層(Convolutional Layer) - 主要作用是提取特征
- 池化層(Max Pooling Layer) - 主要作用是下采樣(downsampling),卻不會損壞識別結果
- 全連接層(Fully Connected Layer) - 主要作用是分類預測
這個 CNN 整體流程是 卷積(Conv2d) -> 激勵函數(ReLU) -> 池化, 向下采樣 (MaxPooling) -> 再來一遍 -> 展平多維的卷積成的特征圖 -> 接入全連接層 (Linear) -> 輸出
RNN
RNN是在有順序的數據上進行學習的,在反向傳遞得到誤差的時候,每一步都會乘以自己的一個參數W,若W是小于1,則誤差傳遞到初始時間的時候會接近0,即梯度消失;反之,則是梯度爆炸!hong!然后LSTM是為了解決這個問題而提出來的
LSTM循環神經網絡
-
主線:就是主線劇情
-
分線,即是原本的RNN體系。
1. 輸入:重要程度 寫入主線劇情 進行分析.
2.忘記: 如果此時的分線劇情更改了我們對之前劇情的想法, 那么忘記控制就會將之前的某些主線劇情忘記, 按比例替換成現在的新劇情
3.輸出:基于目前的主線劇情和分線劇情判斷要輸出的到底是什么
RNN分類問題
class RNN(nn.Module):def __init__(self):super(RNN, self).__init__()self.rnn = nn.LSTM( # LSTM 效果要比 nn.RNN() 好多了input_size=28, # 圖片每行的數據像素點hidden_size=64, # rnn hidden unitnum_layers=1, # 有幾層 RNN layersbatch_first=True, # input & output 會是以 batch size 為第一維度的特征集 e.g. (batch, time_step, input_size))self.out = nn.Linear(64, 10) # 輸出層def forward(self, x):# x shape (batch, time_step, input_size)# r_out shape (batch, time_step, output_size)# h_n shape (n_layers, batch, hidden_size) LSTM 有兩個 hidden states, h_n 是分線, h_c 是主線# h_c shape (n_layers, batch, hidden_size)r_out, (h_n, h_c) = self.rnn(x, None) # None 表示 hidden state 會用全0的 state# 選取最后一個時間點的 r_out 輸出# 這里 r_out[:, -1, :] 的值也是 h_n 的值out = self.out(r_out[:, -1, :])return outRNN整體的流程是:
RNN回歸問題
class RNN(nn.Module):def __init__(self):super(RNN, self).__init__()self.rnn = nn.RNN( # 這回一個普通的 RNN 就能勝任input_size=1,hidden_size=32, # rnn hidden unitnum_layers=1, # 有幾層 RNN layersbatch_first=True, # input & output 會是以 batch size 為第一維度的特征集 e.g. (batch, time_step, input_size))self.out = nn.Linear(32, 1)def forward(self, x, h_state): # 因為 hidden state 是連續的, 所以我們要一直傳遞這一個 state# x (batch, time_step, input_size)# h_state (n_layers, batch, hidden_size)# r_out (batch, time_step, output_size)r_out, h_state = self.rnn(x, h_state) # h_state 也要作為 RNN 的一個輸入outs = [] # 保存所有時間點的預測值for time_step in range(r_out.size(1)): # 對每一個時間點計算 outputouts.append(self.out(r_out[:, time_step, :]))return torch.stack(outs, dim=1), h_state自編碼(Autoencoder)
- 是一種非監督式學習,接受大量的輸入信息,然后總結原數據的精髓。
- 編碼器Encoder
特征屬性降維
- 解碼器Decoder
將精髓信息解壓成原始信息
AutoEncoder
class AutoEncoder(nn.Module):def __init__(self):super(AutoEncoder, self).__init__()# 壓縮self.encoder = nn.Sequential(nn.Linear(28*28, 128), 28*28->128nn.Tanh(),nn.Linear(128, 64), 128->64nn.Tanh(),nn.Linear(64, 12), 64->12nn.Tanh(),nn.Linear(12, 3), # 壓縮成3個特征, 進行 3D 圖像可視化)# 解壓self.decoder = nn.Sequential(nn.Linear(3, 12),nn.Tanh(),nn.Linear(12, 64),nn.Tanh(),nn.Linear(64, 128),nn.Tanh(),nn.Linear(128, 28*28),nn.Sigmoid(), # 激勵函數讓輸出值在 (0, 1))def forward(self, x):encoded = self.encoder(x)decoded = self.decoder(encoded)return encoded, decodedautoencoder = AutoEncoder()DQN
強化學習融合了神經網絡+Q-learing
- 顯示網絡和估計網絡建立的基本體系
- DQN
GAN
大白話解釋GAN:新手畫家隨機靈感畫畫,新手鑒賞家接受畫作(不知道是新手畫還是著名畫),說出判斷,一邊還告訴新手怎么畫,然后新手就畫的越來越像著名畫家的畫。
Dropout緩解過擬合
torch.nn.Dropout(0.5) 這里的 0.5 指的是隨機有 50% 的神經元會被關閉/丟棄.
net_dropped = torch.nn.Sequential(torch.nn.Linear(1, N_HIDDEN),torch.nn.Dropout(0.5), # drop 50% of the neurontorch.nn.ReLU(),torch.nn.Linear(N_HIDDEN, N_HIDDEN),torch.nn.Dropout(0.5), # drop 50% of the neurontorch.nn.ReLU(),torch.nn.Linear(N_HIDDEN, 1), )批標準化(Batch Normalization)BN
- 將分散的數據統一的一種做法,使數據具有統一規格。
- BN被添加在每一個全連接和激勵函數之間,對每一層神經網絡進行標準化
總結
以上是生活随笔為你收集整理的莫烦-pytorch的全部內容,希望文章能夠幫你解決所遇到的問題。