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