基于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 theanets
0

类似地,您可以将高斯噪声添加到任何层(此处,仅添加到 输入层):

pip install theanets
1

优化算法

你可以优化您的模型使用的任何算法都是由 下坡提供的 (sgd、nag、rmsprop、adadelta等),或者另外使用 特定于神经网络的预训练方法

您还可以随意连续调用train()多次。每次通话都可以 包括不同的训练算法:

pip install theanets
2

不同的学习超参数:

pip install theanets
3

以及不同的正则化超参数:

pip install theanets
4

训练模式比科学更具艺术性,但网络试图 很容易评估不同的训练方法。在中阅读有关此的详细信息 培训模型

快速入门:循环模式

递归神经网络对于许多基于序列的 机器学习中的任务;一个流行的玩具例子是 生成类似于训练文本正文的文本。

在这些模型中,我们建立了一个递归分类器来预测 给定前面所有字符的文本序列中的下一个字符。这个 模型的输入是来自 文本和相应的输出是后续 性格。 theanets 代码有一个 文本的帮助类 整数类之间的文本编码和解码;使用helper 使顶层代码看起来像:

pip install theanets
5

本例使用 theanets 的几个特性,这些特性使建模成为神经 网络既有趣又有趣。该模型使用一个由 选通递归单元组成的层 捕获数据中的时间依赖关系。它还使用可调用的 向模型提供数据,并利用迭代训练 在每个训练阶段之后,对模型的输出进行采样。

要运行此示例,请下载要建模的文本(例如,herman 梅尔维尔的《白鲸》,并将其保存在corpus.txt中:

pip install theanets
6

然后运行脚本时,输出可能如下所示 (缩写为显示模式):

pip install theanets
7

在这里,种子文本显示在管道字符的左侧,而 采样序列如下。在paranthes中是每个字符的精度值 在训练台上训练模特。学习模式继续 从几乎随机的字符生成,到产生一组字母 用空格隔开,产生似乎属于 《白鲸记》 ,比如"船长"、"啊哈,也是"和"经常使用线圈"。

许多乐趣可以从一个时间模型中得到,它在 这种方式。毕竟,我们怎么会想到"peqooders", "星巴克"还是"金雀"?

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

推荐PyPI第三方库


热门话题
java无法从布尔值中获得正确显示的结果   json java流逗号分隔   java ArrayList索引超出范围,但实际上没有?   Android中的java左对齐文本   当excel中的某些更改未保存时,如何在java中使用poi读取   java如何重新排列数组,使空值占据数组的开头?   查找多维数组是否在Java数组中   在Java中实现无数据库的数据   java什么是系统负载?   java在启动活动时“错误类型3错误:活动类{}不存在”,错误类型3活动类不存在”   java如何在textView中显示多个值   java JDBC:如何从结果集中检索SQL COUNT函数的结果?   JAXRS客户端的java应答   java奇怪的包装器类行为==和=   爪哇改变油漆的颜色会改变所有的颜色   在IntelliJ中使用Maven、Spring和ApacheSpark的java会导致错误   java清单文件的用途是什么   编译为什么Java编译器默认不缩短名称?(用于性能和模糊处理)   java JPA查询创建bean时出错