深度学习框架Lasagne的一些总结和技巧
来源:互联网 发布:sqlserver 卸载 编辑:程序博客网 时间:2024/05/01 10:31
深度学习框架也用过几个了,一直比较喜欢的是Lasagne,因为其设计哲学是不回避底层(theano),而且封装得比较灵活,不像Keras那样完全一套自己的逻辑,底层借口暴露的太少,导致想做自己的模型的时候用keras非常费力。
从某种意义上说,个人觉得Lasagne其实不太能称得上是一个神经网络的框架,而是theano的一个非常好的toolbox,其整个设计都是把theano变得更好使用。
由于学习时间的多变,导致有时候会集中时间写一段时间的代码,有时候会集中时间看paper,所以经常忘掉 lasagne里的一些逻辑和规则,这次在这里我就不定期总结一些,当做给自己的一个tips. 所以其实很多技巧和经验是theano的经验,一并写一下。
声明网络输入变量的时候,需要提前设计好属性(vector或者matrix或者4d等等),如下:
c = T.imatrix()
q = T.ivector()
y = T.imatrix()
c_pe = T.tensor4()
q_pe = T.tensor4()属性的确定,是需要考虑到batch这个维度的,所以,单个输入是一个向量的话,声明的时候就是matrix,
另外,网络输出目标 y 是一个[batch_size,n_classes]的矩阵。label的转换问题,通常情况下,对于label都需要转换成为one-hot的向量,
有一个方便的工具from sklearn.preprocessing import LabelBinarizer,label_binarize
举例:
>>> label_binarize([1, 6], classes=[1, 6, 4, 2]) array([[1, 0, 0, 0], [0, 1, 0, 0]])
另外统计错误率的一个简单语句是
numpy.count_nonzero(y_true-y_predict)
关于theano建模过程中的输入样本的问题
theano中建模的通常形式是,用x=T.matrix(),y=T.tensor()这种,这种变量的类型是:theanoTensor.
这就要求我们在建模过程中,接触不到实际数据,而是用一个变量抽象代替它。实际上,theano的function中的输入形式是很多样的,典型的有:
(1)train_model=theano.function([x,y],cost,updates=updates)
cost=train_model(x_batch,y_batch)(2)
givens = {
x: x_shared,
y: y_shared,
}
train_model=theano.function([],cost,givens=givens,updates=updates)
x_shared.set_value(x_batch)
y_shared.set_value(y_batch)
cost=train_model()
第一种没有太多的技巧而言,第二种来说其实我们可以不用声明变量,直接用theanoSharedTensor变量直接代替它。
例如:
可初始化y_shared=theano.shared(np.zeros((batch_size,1),dtype=np.int32),borrow=True),
而在建模过程中需要用y的地方用y_shared代替。
这样的好处是更直观。而且不用有givens={x:x_shared,y:y_shared}的过程。关于对theano.function的使用需要注意的地方
theano.function在建立模型的时候,输入是一个列表,即便没有输入。
例如 cc= theano.function(Inputs=[aa,bb],outputs=[cost])
但是在调用的时候,是不用用列表的形式传送的。
dd=cc(a1,b1)[0] 。
这点一定要注意,否则很容易出现传送变量错误,但是代报错信息却不会提示,只会在导入数据到模型中出错而提示具体的表面上的错误。
- 深度学习框架Lasagne的一些总结和技巧
- 深度学习框架Lasagne的技巧总结(2)——参数的更新与不更新
- 从Theano到Lasagne:基于Python的深度学习的框架和库
- 从Theano到Lasagne:基于Python的深度学习的框架和库
- 从Theano到Lasagne:基于Python的深度学习的框架和库
- 从Theano到Lasagne:基于Python的深度学习的框架和库
- 从Theano到Lasagne:基于Python的深度学习的框架和库
- 从Theano到Lasagne:基于Python的深度学习的框架和库
- 从Theano到Lasagne:基于Python的深度学习的框架和库
- 从Theano到Lasagne:基于Python的深度学习的框架和库
- 基于深度学习框架theano的库-----Lasagne
- 深度|NTM-Lasagne:基于Lasagne的神经图灵机函数库
- 深度学习中卷积和池化的一些总结
- 深度学习中卷积和池化的一些总结
- 视频+代码+资料:Nils Reimers面向NLP的深度学习(Theano/Lasagne)系列教程
- 视频+代码+资料:Nils Reimers面向NLP的深度学习(Theano/Lasagne)系列教程
- 深度学习框架总结
- 深度学习框架总结
- 基于QT 5.5.1 for Android的Windows开发环境搭建
- python之生成器
- linux学习知识体系
- 深入理解JSON对象
- JVM 性能调优实战之:使用阿里开源工具 TProfiler 在海量业务代码中精确定位性能代码
- 深度学习框架Lasagne的一些总结和技巧
- MAC下搭建Android Studio
- 如何通过google earth生成cad里单位高程离散点
- iOS10开发需要注意的一些问题(转)
- mysql -- 查看并更改mysql 数据存储的物理地址
- 编译IJKPlayer android版时遇到的一些问题
- java命令行
- 简单说一下编译ijkplayer
- centos使用yum报错Could not retrieve mirrorlist解决