一个轻量级的深度学习框架
Dandelion的Python项目详细描述
蒲公英
这是一个非常轻量的深层学习框架,它提供了灵活性和抽象性之间的平衡。目标用户
研究人员需要灵活性和便利性来实验各种^ {EM1}$非标准特色
- 易于使用和扩展,支持任何神经网络结构。
- 松耦合,框架的每个部分都可以独立修改。
- 更像是一个方便的深度学习模块库。
- 常见的模块,如cnn、lstm、gru、dense、dropout、batch normalization,以及常见的优化方法,如sgd、adam、adadelta、rmsprop,都是现成的。
- plug&play,直接在无张量上操作,不应用上层抽象。
- 与以前的框架(如keras、lasagne等)不同,蒲公英直接在张量上操作,而不是在层抽象上操作,因此很容易插入第三部分定义的深度学习模块(由keras/lasagne定义的层),反之亦然。
文档
在线提供文档:https://david-leon.github.io/Dandelion/
安装
使用PIP通道进行稳定释放
pip install dandelion --upgrade
或从源安装以获取最新版本:
pip install git+https://github.com/david-leon/Dandelion.git
依赖性
- 不等于1.0
- scipy(由
dandelion.ext.CV
要求) - 枕头(由
dandelion.ext.CV
要求) - opencv(由
dandelion.ext.CV
要求)
快速游览
importtheanoimporttheano.tensorastensorfromdandelion.moduleimport*fromdandelion.updateimport*fromdandelion.functionalimport*fromdandelion.utilimportgpickleclassmodel(Module):def__init__(self,batchsize=None,input_length=None,Nclass=6,noise=(0.5,0.2,0.7,0.7,0.7)):super().__init__()self.batchsize=batchsizeself.input_length=input_lengthself.Nclass=Nclassself.noise=noiseself.dropout0=Dropout()self.dropout1=Dropout()self.dropout2=Dropout()self.dropout3=Dropout()self.dropout4=Dropout()W=gpickle.load('word_embedding(6336, 256).gpkl')self.embedding=Embedding(num_embeddings=6336,embedding_dim=256,W=W)self.lstm0=LSTM(input_dims=256,hidden_dim=100)self.lstm1=LSTM(input_dims=256,hidden_dim=100)self.lstm2=LSTM(input_dims=200,hidden_dim=100)self.lstm3=LSTM(input_dims=200,hidden_dim=100)self.lstm4=LSTM(input_dims=200,hidden_dim=100)self.lstm5=LSTM(input_dims=200,hidden_dim=100)self.dense=Dense(input_dims=200,output_dim=Nclass)defforward(self,x):self.work_mode='train'x=self.dropout0.forward(x,p=self.noise[0],rescale=False)x=self.embedding.forward(x)# (B, T, D)x=self.dropout1.forward(x,p=self.noise[1],rescale=True)x=x.dimshuffle((1,0,2))# (B, T, D) -> (T, B, D)x_f=self.lstm0.forward(x,None,None,None)x_b=self.lstm1.forward(x,None,None,None,backward=True)x=tensor.concatenate([x_f,x_b],axis=2)x=pool_1d(x,ws=2,ignore_border=True,mode='average_exc_pad',axis=0)x=self.dropout2.forward(x,p=self.noise[2],rescale=True)x_f=self.lstm2.forward(x,None,None,None)x_b=self.lstm3.forward(x,None,None,None,backward=True)x=tensor.concatenate([x_f,x_b],axis=2)x=self.dropout3.forward(x,p=self.noise[3],rescale=True)x_f=self.lstm4.forward(x,None,None,None,only_return_final=True)x_b=self.lstm5.forward(x,None,None,None,only_return_final=True,backward=True)x=tensor.concatenate([x_f,x_b],axis=1)x=self.dropout4.forward(x,p=self.noise[4],rescale=True)y=sigmoid(self.dense.forward(x))returnydefpredict(self,x):self.work_mode='inference'x=self.embedding.predict(x)x=x.dimshuffle((1,0,2))# (B, T, D) -> (T, B, D)x_f=self.lstm0.predict(x,None,None,None)x_b=self.lstm1.predict(x,None,None,None,backward=True)x=tensor.concatenate([x_f,x_b],axis=2)x=pool_1d(x,ws=2,ignore_border=True,mode='average_exc_pad',axis=0)x_f=self.lstm2.predict(x,None,None,None)x_b=self.lstm3.predict(x,None,None,None,backward=True)x=tensor.concatenate([x_f,x_b],axis=2)x_f=self.lstm4.predict(x,None,None,None,only_return_final=True)x_b=self.lstm5.predict(x,None,None,None,only_return_final=True,backward=True)x=tensor.concatenate([x_f,x_b],axis=1)y=sigmoid(self.dense.predict(x))returny
为什么选择另一个dl框架
-
这是因为现有的DL框架缺乏灵活性,如Keras、Lasane、Bug等。
- {STR 1 } $“灵活性”< /强>,我们意味着修改或扩展框架是否容易。
- 著名的dl框架keras被设计成面向初学者的,代价是很难修改。 与Keras相比,另一个较不著名的框架千层面提供了更大的灵活性。对于小型神经网络,用Lasgne编写自己的层更容易,然而,对于复杂的神经网络,它仍然需要相当多的人工工作,因为与其他现有的框架一样,LaaGeNe操作于抽象的“层”类而不是原始张量变量。
项目布局
Python Module | Explanation |
---|---|
module | all neual network module definitions |
functional | operations on tensor with no parameter to be learned |
initialization | initialization methods for neural network modules |
activation | definition of all activation functions |
objective | definition of all loss objectives |
update | definition of all optimizers |
util | utility functions |
model | model implementations out-of-the-box |
ext | extensions |
学分
蒲公英的设计大量使用了Lasagne和Pytorch,这两个都是我最喜欢的dl库。
特别感谢radomir dopieralski,他将pypi上的dandelion
项目名称转移给了我们。现在您可以通过简单的pip install dandelion
来安装包。