基于theano的前馈和递归神经网络
theanets的Python项目详细描述
网络
theanets是一个深度学习和神经网络工具包。它是 用python编写,以便与优秀的工具(如 numpy 和 SCIKIT学习,并在可能的情况下使用 theano 加速计算 使用你的GPU。该套餐旨在提供:
- 一个用于构建和训练常见类型神经网络模型的简单api;
- 详尽的文档;
- 易于阅读的代码;
- 以及,在引擎盖下,一个完全表达的图形计算框架。
该方案力求"使容易的事情变得容易,困难的事情变得困难" "有可能。"请试一试,让我们知道你的想法!
安装
使用pip安装最新发布的代码:
pip install theanets
或者下载当前源并从中运行:
git clone http://github.com/lmjohns3/theanets cd theanets python setup.py develop
请注意,本自述文件的内容链接到 网络的版本 你正在使用的。如果您正在查看github上的 自述文件,则需要 当前的github代码;如果您正在查看pypi发行版的自述文件, 您需要与该版本相关联的代码。
快速入门:分类
假设您想要创建一个分类器并在大约100维上训练它 你已经分为10类的数据点。没问题!只是一个 你可以(a)提供一些数据,(b)建立和(c)训练一个模型, 以及(d)评估模型:
importclimateimporttheanetsfromsklearn.datasetsimportmake_classificationfromsklearn.metricsimportconfusion_matrixclimate.enable_default_logging()# Create a classification dataset.X,y=make_classification(n_samples=3000,n_features=100,n_classes=10,n_informative=10)X=X.astype('f')y=y.astype('i')cut=int(len(X)*0.8)# training / validation splittrain=X[:cut],y[:cut]valid=X[cut:],y[cut:]# Build a classifier model with 100 inputs and 10 outputs.net=theanets.Classifier(layers=[100,10])# Train the model using SGD with momentum.net.train(train,valid,algo='sgd',learning_rate=1e-4,momentum=0.9)# Show confusion matrices on the training/validation splits.forlabel,(X,y)in(('training:',train),('validation:',valid)):print(label)print(confusion_matrix(y,net.predict(X)))
层
上面的模型非常简单!通过添加 隐藏层:
net=theanets.Classifier([100,1000,10])
实际上,您可以轻松地创建3个(或任意数量的)隐藏层:
net=theanets.Classifier([100,1000,1000,1000,10])
默认情况下,隐藏层使用relu传输函数。通过传递元组 您可以将其中一些层更改为使用不同的 激活 :
maxout=(1000,'maxout:4')# maxout with 4 pieces.net=theanets.Classifier([100,1000,maxout,(1000,'tanh'),10])
通过传递字典,您可以指定每个 层 ,就像它的参数是如何初始化的一样:
# Sparsely-initialized layer with large nonzero weights.foo=dict(name='foo',size=1000,std=1,sparsity=0.9)net=theanets.Classifier([100,foo,(1000,'maxout:4'),(1000,'tanh'),10])
在 theanets 中,指定层是构建模型的核心。多读 关于这一点,请参见指定层
正则化
添加正则化器也很容易!把它们传给训练方法。为了 例如,可以训练具有权重衰减的稀疏分类模型:
# Penalize hidden-unit activity (L1 norm) and weights (L2 norm).net.train(train,valid,hidden_l1=0.001,weight_l2=0.001)
在 中,网络 退出被视为一个正则化器,可以在许多 一次分层:
net.train(train,valid,hidden_dropout=0.5)
或仅在特定层:
pip install theanets0
类似地,您可以将高斯噪声添加到任何层(此处,仅添加到 输入层):
pip install theanets1
优化算法
你可以优化您的模型使用的任何算法都是由 下坡提供的 (sgd、nag、rmsprop、adadelta等),或者另外使用 特定于神经网络的预训练方法 。
您还可以随意连续调用train()多次。每次通话都可以 包括不同的训练算法:
pip install theanets2
不同的学习超参数:
pip install theanets3
以及不同的正则化超参数:
pip install theanets4
训练模式比科学更具艺术性,但网络试图 很容易评估不同的训练方法。在中阅读有关此的详细信息 培训模型
快速入门:循环模式
递归神经网络对于许多基于序列的 机器学习中的任务;一个流行的玩具例子是 生成类似于训练文本正文的文本。
在这些模型中,我们建立了一个递归分类器来预测 给定前面所有字符的文本序列中的下一个字符。这个 模型的输入是来自 文本和相应的输出是后续 性格。 theanets 代码有一个 文本的帮助类 整数类之间的文本编码和解码;使用helper 使顶层代码看起来像:
pip install theanets5
本例使用 theanets 的几个特性,这些特性使建模成为神经 网络既有趣又有趣。该模型使用一个由 选通递归单元组成的层 捕获数据中的时间依赖关系。它还使用可调用的 向模型提供数据,并利用迭代训练 在每个训练阶段之后,对模型的输出进行采样。
要运行此示例,请下载要建模的文本(例如,herman 梅尔维尔的《白鲸》,并将其保存在corpus.txt中:
pip install theanets6
然后运行脚本时,输出可能如下所示 (缩写为显示模式):
pip install theanets7
在这里,种子文本显示在管道字符的左侧,而 采样序列如下。在paranthes中是每个字符的精度值 在训练台上训练模特。学习模式继续 从几乎随机的字符生成,到产生一组字母 用空格隔开,产生似乎属于 《白鲸记》 ,比如"船长"、"啊哈,也是"和"经常使用线圈"。
许多乐趣可以从一个时间模型中得到,它在 这种方式。毕竟,我们怎么会想到"peqooders", "星巴克"还是"金雀"?
更多信息
来源:https://github.com/lmjohns3/theanets" rel="nofollow">https://github.com/lmjohns3/theanets
文档:http://theanets.readthedocs.org" rel="nofollow">http://theanets.readthedocs.org