一个轻量级的深度学习框架

Dandelion的Python项目详细描述


蒲公英

License: MPL 2.0Python 3.xPyPI versionTravis CI

这是一个非常轻量的深层学习框架,它提供了灵活性和抽象性之间的平衡。

目标用户

研究人员需要灵活性和便利性来实验各种^ {EM1}$非标准网络结构,以及Theano的稳定性。

特色

    {STR 1 } $,旨在在灵活性和抽象之间提供更好的平衡。< /强>
    • 易于使用和扩展,支持任何神经网络结构。
    • 松耦合,框架的每个部分都可以独立修改。
  • 更像是一个方便的深度学习模块库。
    • 常见的模块,如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 ModuleExplanation
moduleall neual network module definitions
functionaloperations on tensor with no parameter to be learned
initializationinitialization methods for neural network modules
activationdefinition of all activation functions
objectivedefinition of all loss objectives
updatedefinition of all optimizers
utilutility functions
modelmodel implementations out-of-the-box
extextensions

学分

蒲公英的设计大量使用了LasagnePytorch,这两个都是我最喜欢的dl库。 特别感谢radomir dopieralski,他将pypi上的dandelion项目名称转移给了我们。现在您可以通过简单的pip install dandelion来安装包。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java GridBagLayout不填充区域   java Memozied Fibonacci未运行与常规Fibonacci解决方案   Java Web启动未启动问题   Java中异常和if-then的区别   java从命令提示符运行批处理文件获取错误   socket在Java中验证SSL证书的公共名称   如何在JAVA中检查字符串数组中的相等字   用java语言将音频文件转换成文本文件的语音识别   java为什么foo(1,2,3)没有传递给varargs方法foo(对象…)作为整数[]   java通过蓝牙将奇怪的数据从Arduino传输到Android   java ContainerRequestFilter获取空entitystream   java如何从安卓 studio中删除不兼容类型错误   基本Java错误   在Spring引导中使用REST API时发生java错误   javascript通过从SQL查询派生的URL打开页面