一、Run the MNIST example
1. 多層感知機(Multi-Layer Perceptron)
(1)InputLayer是一個輸入基礎。
其中輸入的input_var是一個theano.tensor
(batchsize, channels, rows, columns)
shape=(None,1,8,28)參數中,None代表接收任意的輸入值,1爲顏色通道。
(2)應用dropout層
(3)全連接層
800個神經單元,激活函數: ReLUs;權重w初始化(這個lasagne.init.GlorotUniform()是默認的,可以不寫出來)
2. Custom MLP(自定義MLP)
可以運行定製多個層。
(1)CNN
這是feature map層,pad默認爲“valid”,即卷積核不能越出圖像。“same”可以越出圖像,卷積之後跟原來圖像大小一樣。
3. Loss and update expressions
設置輸出和cross-entry:
使用SGD,更新權重和偏向:
get_all_params獲取網絡中的參數
updates用來更新。
驗證集中的預測和loss和準確率:
其中deterministic=True是爲了屏蔽dropout層。
二、lasagne實際問題
(1)實現雙向RNN
def bulit_gru(self,input_var=None,mask_var=None):
"""
Bulit the GRU network
"""
#inputlayer
l_in=lasagne.layers.InputLayer(shape=self.input_shape,input_var=input_var,name="l_in")
#mask layer
l_mask=lasagne.layers.InputLayer(shape=self.mask_shape,input_var=mask_var,name="l_mask")
#inpute dropout
l_input_drop=lasagne.layers.DropoutLayer(l_in,p=self.keep_prob_input)
#Two GRU forward
l_gru_forward=lasagne.layers.GRULayer(\
l_input_drop,num_units=self.gru_size,mask_input=l_mask,name="l_gru_forward1")
l_gru_forward=lasagne.layers.GRULayer(\
l_gru_forward,num_units=self.gru_size,mask_input=l_mask,only_return_final=True,name="l_gru_forward2")
#Two GRU backward
l_gru_backward=lasagne.layers.GRULayer(\
l_input_drop,num_units=self.gru_size,mask_input=l_mask,backwards=True,name="l_gru_backward1")
l_gru_backward=lasagne.layers.GRULayer(\
l_gru_backward,num_units=self.gru_size,mask_input=l_mask,only_return_final=True,backwards=True,name="l_gru_backward2")
#output forward
l_outdrop_forward=lasagne.layers.DropoutLayer(l_gru_forward,p=self.keep_prob_forward)
#output forward
l_outdrop_backward=lasagne.layers.DropoutLayer(l_gru_backward,p=self.keep_prob_backward)
#Merge forward layers and backward layers
l_merge=lasagne.layers.ElemwiseSumLayer([l_outdrop_forward,l_outdrop_backward])
# Finally, we'll add the fully-connected output layer, of 10 softmax units:
l_out = lasagne.layers.DenseLayer(\
l_merge, num_units=self.num_classes,\
nonlinearity=lasagne.nonlinearities.softmax)
return l_out,l_in,l_mask
(2)實現轉置
l_in2 = InputLayer(shape=(2,4),input_var=input_in2)
#reverse
l_out2=lasagne.layers.DimshuffleLayer(l_in2,(1, 'x', 0))
l_out2=lasagne.layers.ReshapeLayer(l_out2,(4,2))