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




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洛克-李

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值