Lasagne教程+實現雙向RNN

一、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))




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章