C++
1.C++中string erase函数的使用
erase函数的原型如下:
- string & erase(size_t pos = 0, size_t n = npos)
- iterator erase(iterator position)
- iterator erase(iterator first, iterator last)
也就是说有三种用法: - erase(pos,n):删除从pos开始的n个字符,比如erase(0, 1)就是删除一个字符;
- erase(position):删除position处的一个字符(position是个string类型的迭代器)
- erase(first,last):删除从first到last之间的字符(first和last都是迭代器)
Lasagne
lasagne简单入门
1.简介
lasagne是一个基于Theano的轻量级的神经网络库,其实就是对Theano库的上层封装,使用起来更加简单,但是相应的灵活性下降。
2.建立模型
和所有的框架一样,非常重要的一个环节就是进行网络模型的定义。lasagne的网络模型建立方法和Torch比较相似,都是对各种常用网络层(layer)进行封装,我们只需要调用相应的网络层函数并把它们搭接在一起就可以了。
- 以多层感知机模型为例
多层感知机(Multi-layer-perceptron,MLP),此处构建一个两个隐藏层的多层感知机,并对输入增加20%的dropout,隐藏层增加50%的dropout。实际上我们的网络模型就由输入层+两个隐藏层+输出层组成,只需要对其分别进行定义即可。 -
输入层
输入层采用InputLayer
进行定义,'InputLayer'只用于接受数据,不对数据做任何的处理,类似于TensorFlow里面的placeholder功能,定义方法如下:
l_in = lasagne.layers.InputLayer(shape=(None, 1, 28, 28), input_var=input_var)
shape里对应的四个参数分别表示:(batchsize, channels, rows, columns)
,input_var
表示需要连接到网络输入层的theano变量,默认为none
。
然后对输入数据加以20%的dropout,采用DropoutLayer
进行定义:
l_in_drop = lasagne.layer.DropoutLayer(l_in, p=0.2)
-
隐藏层
这里的隐藏层由全连接层、激活层、dropout层组成。lasagne将全连接层和激活层封装到一个函数里了,即DenseLayer
,定义如下:
l_hid1 = lasagne.layers.DenseLayer(l_in_drop,
num_units=800,
nonlinearity=lasagne.nonlinearities.rectify,
W=lasagne.init.GlorotUniform())
num_units
表示全连接层的单元数目,nonlinearity
用以定义激活层函数,激活层函数封装在lasagne.nonlinearities
中,这里选择的ReLU函数,而网络参数的初始化封装在lasagne.init
里,只需要分别进行调用就可以了。
之后再添加50%的dropout:
l_hid1_drop = lasagne.layers.DropoutLayer(l_hid1, p=0.5)
第二个隐藏层的定义与此类似
输出层
输出层依旧是一个全连接网络,只是不同的是这里是做分类任务,所以需要将非线性函数/激活函数修改为softmax
,如下:
l_out = lasagne.layers.DenseLayer(
l_hid2_drop, num_units=10,
nonlinearity=lasagne.nonlinearities.softmax)
这样就得到了一个包含两个隐藏层的多层感知机了。
网友评论