基于theano的各种模型构建深度学习包

mozi的Python项目详细描述


墨子是基于一个干净而锐利的设计,墨子的**设计理念。**快速简单**:包的主引擎只有200行代码。只有一个完整的编译图用于训练,确保所有的数据操作都在一个管道中进行,从而使其成为超级快速的包。
2.**高度模块化**:在墨子中建立模型就像用乐高积木建造房子一样,你可以设计任何可以想象的层,并轻松地将它们堆叠在一起。
3.**培训中的模型摘要**:为了便于培训模型的实际应用,将模型从培训模块中抽象出来,并尽可能保持最小。目标是允许实时部署和轻松的模型交换。
4.**日志系统**:mozi提供了完整的日志记录功能,允许用户将训练结果和超参数记录到数据库中,以便进行超自然概述。此外,它还允许自动保存最佳模型并记录所有培训输出,以便进行后续分析。

--
\pip安装git+https://github.com/hycis/mozi.git@master
````
,或者简单地克隆并添加到"pythonpath"。
```bash
git克隆https://github.com/hycis/mozi.git
export pythonpath=/path/to/mozi:$pythonpath
```
,以便通过导出"pythonpath"继续安装。将'pythonpath=/path/to/tensorgraph:$pythonpath'添加到Linux的`.bashrc'或Mac的
`.bash_profile'。此方法有效时,必须确保安装了[setup.py](setup.py)中的所有依赖项。

--
_ path`是保存和加载数据集的目录。
"mozi_save_path"是保存所有模型、输出日志和epoch错误的目录。
`mozi_database_path`是保存数据库的目录,其中包含记录每个培训作业的超参数和测试错误的表。

--

在mozi中构建模型非常简单,只需从mozi导入no.tensor as t

`` python
model import sequential
model=sequential(input_var=t.matrix(),output_var=t.matrix())
```
input_var`是与dimensi的数量相对应的输入张量变量。输入数据集的。"output_var"是对应于数据集目标的张量变量。` t.matrix表示"2d data",t.tensor3表示"3d data",t.tensor4表示"4d data"。接下来添加mozi.layers.linear import linear
from mozi.layers.activation import relu,softmax
from mozi.layers.noise import dropout


model.add(linear(prev_dim=28*28,this懔dim=200))
model.add(relu())
model.add(linear(prev懔dim=200,this懔dim=200=100))
model.add(relu())
model.add(dropout(0.5))
model.add(linear(prev_dim=100,this_dim=10))
model.add(softmax())
`````
要训练模型,首先构建一个数据集和一个学习方法,这里我们使用mnist数据集和来自mozi.datasets.mnist import mnis的sgd
``python
t
从mozi.learning_method导入sgd

data=mnist(批处理大小=64,训练有效的测试比率=5,1,1])
learning_method=sgd(学习率=0.1,动量=0.9,lr_衰减因子=0.9,衰减批处理=10000)
`````
最后构建一个训练对象并将所有内容放入模型中进行训练
``` python
来自mozi.train_object import trainobject
来自mozi.cost import mse,error


train_object=trainobject(model=model,
log=none,
dataset=data,
训练成本=mse,
有效成本=error,
学习方法=learning方法,
停止标准=max epoch:10,
epoch look:5,
"减少百分比":0.01}

train_object.setup()
train_object.run()
````
````````
````````停止条件={'max_epoch':10,
"epoch_look_back":5,
"减少百分比"":0.01}
```
此处的停止标准意味着,如果培训已达到"max_epoch"的10,或者验证错误在过去5个epoch中没有至少减少1%,则培训将停止。
测试模型
就这样!训练完成后,要测试模型,只需调用模型中的前向传播"fprop(x)"
``python
import numpy as np

ypred=np.argmax(ypred,axis=1)
y=np.argmax(data.get_test().y,axis=1)
accurity=np.equal(ypred,y).astype('f4').sum()/len(y)
打印"测试准确度:",准确度
````
--
更多示例
mozi可用于有效构建任何类型的体系结构。下面是另外几个例子
*[**卷积神经网络**](doc/cnn.md)
*[**去噪自动编码器**](doc/dae.md)
*[**变分自动编码器**](doc/vae.md)
*[**alexnet**](example/voc_alexnet.py)

--
层模板要实现模板
`` python
类模板(对象):
""
描述:
要由任何层实现的接口。
""
def初始(self):
self.params=[];需要通过培训更新的所有参数都会进入列表

def _test _fprop(self,state謺下面):
謺在数据流经此轨迹后不执行参数更新的测试轨迹
raise notimplementederror()

def _train _fprop(self,state謺下面):
謺参数更新的训练轨迹d每次数据流经此磁道时,都会引发notimplementederror()

def\u layer\u stats(self,state\u below,layer\u output):
ormat[('w max',t.max(w)),('w min',t.min(w))]。
此方法提供对层的窥视,并可用于调试。
return[]
````
每个层提供两个轨迹:训练轨迹和测试轨迹。在训练过程中,模型将调用每一层中的"train"fprop,模型的输出将用于更新每一层中"self.params"中的参数。在测试过程中,每一层都调用了"test"fprop,输出用于评估模型,并根据"trainobject"中设置的停止标准判断模型是否应该停止训练。我们还可以通过将我们想知道的关于层的信息放入"层统计信息"来窥视每一层。例如,如果我们想知道一个层中的最大权重是多少,我们可以计算"t.max(w)",并从"层统计"返回"[('w max',t.max(w))"",这样在每个历元之后,将为该层计算"w max",并输出到屏幕。

--
mozi提供的数据接口两个数据接口,一个是足够小的数据集,可以全部装入内存[(singleblock)](mozi/datasets/dataset.py l99),另一个是大数据集,不能一次性装入内存,必须分成块,每次装入一个训练块[(data blocks)](mozi/d数据集/数据集.py l185)。
查看[mnist](mozi/datasets/mnist.py)或[cifar10](mozi/datasets/cifar10.py)有关如何构建数据集的示例。

gleblock directly
除了子类化"singleblock"或"datablocks"以创建mnist和cifar10示例这样的数据集外,我们还可以直接使用"singleblock"或"datablocks"从mozi.datasets.dataset import singleblock
将numpy导入为np
x=np.random.rand(1000,5)
y=np.random.rand(1000,3)
data=singleblock(x=x,y=y,batch_size=100,train_valid_test_ratio=[3,1,1])
train_object=trainobject(dataset=data)
```

可以使用"datablocks"逐块训练。下面是一个演示示例。您还可以从mozi.datasets.dataset import datablocks中运行[示例](example/datablocks-exp.py)
``python
y1=np.rand(1000,10)
,open('x1.npy','wb')为xin,open('y1.npy','wb')为yin:
np.save(xin,x1)
np.save(yin,y1)

x2=np.rand(1000,3,32,32)
y2=np.rand(1000,10)
,open('x2.npy','wb')为xin,open('y2.npy','wb')为yin:
np.save(xin,x1)
np.save(yin,y1)

1.npy'),('x2.npy','y2.npy'),
批处理大小=100,列有效的列测试比率=[3,1,1])
列对象=列对象(数据集=data)
````

--
logging
mozi提供了一个日志模块,用于自动保存最佳模型并记录每个历元的错误。


`` python
来自mozi.log import log

log=log(实验名称=mlp,
描述='this is a tutorial',
保存输出=true,记录屏幕上的所有输出
保存模型=true,保存最佳模型
保存纪元or=true,每个历元的日志错误
保存到数据库{'name':'example.db',
'records':{'batch'size':数据。batch'size,
'learning'rate':学习方法。学习率,
"动量":学习方法。动量}
)结束日志
```
日志模块允许记录屏幕输出,保存最佳模型和纪元错误。它还允许使用"save-to-u database"参数将超参数记录到数据库,而"save-to-u database"参数接受包含两个字段"name"和"records"的字典。`'name'`表示要保存记录表的数据库的名称。录制表的名称将在参数"experiment\u name"下的实验名称后面。"records"字段接受一个字典,其中包含我们要记录的不受限制数量的超参数。"'records'"只接受原始数据类型(str,int,float)。
一旦构建了日志对象,它就可以作为
``python
trainobject(log=log)
`````
<;!--###更多功能-->;
<;!--#####数据迭代器-->;
<;!--#####自定义学习方法-->;
<;!--#####自定义权重初始化-->;
--
模型以pickle格式序列化,以便加载保存的模型。我们可以使用cpickle.
``python
import cpickle
,open('model.pkl','rb')作为fout:
model=cpickle.load(fout)
y=model.fprop(x)
```
--


[墨子](https://en.wikiquote.org/wiki/mozi)(公元前470年-公元前391年)是中国人战国哲学家,主张和平、朴素、博爱、务实。

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

推荐PyPI第三方库


热门话题
java使用ContentExchange设置请求属性   java Spark/Hdfs/Hdfsclient兼容性   java springcloudstreamkafka配置:instanceCount和instanceIndex   Java中web服务序列化日期   java用动态数据替换占位符   java git gc似乎覆盖了一个packfile,留下了一个打开的文件描述符,其中包含对“oldxxx.pack”的引用   为什么Apache项目对Java版本敏感?   java Anylogic帮助如何在导入的3dobject通过输送机上的多个“站”时更改其颜色?   JavaEclipseNeonM2E可以导入一个大型项目,但似乎不能自动解决依赖关系   java@FindBy搜索具有满足条件的子元素的元素   java如何将ActionEvent e与键绑定一起使用?   java转换以集中方式从外部库抛出的异常   java中用户文件/数据文件与系统/程序文件的区别   java使用变量字符串或字符作为对象名   字体使用Java图形操纵字符串中每个字符的形状   JavaFX图表移动数据   java RandomAccessFile:将所有项设置为相同的字节数?   java Google Play inapp Billing onPurchasesUpdated()错误响应代码1   java在不知道属性名和属性数的情况下处理json对象   java是否可以一次从HazelcastInstance(映射和列表)中删除所有数据?