用于构建深度学习模型的高级tensorflow库

tensorgraph的Python项目详细描述


[![构建状态](https://travis-ci.org/hycis/tensorgraph.svg?branch=master)(https://travis ci.org/hycis/tensorgraph)

以及在tensorflow上建立任何可想象模型的干净框架。

似乎我们需要一些易于使用的框架来快速构建这些模型,这就是tensorgraph的设计目的。这是一个非常简单的
框架,它在tensorflow之上添加了一个非常薄的层。它适用于更高级的
用户,他们希望对自己的模型构建有更多的控制和灵活性,同时也希望获得效率。

----
对模型的构建有太多的限制和太多的黑匣子,并且有人不想不断地重写tensorflow中的标准层。也适用于希望在团队之间轻松共享深度学习模型的企业用户。

----
pip
``bash
``sudo pip install tensorgraph
`````
,或者对于边缘版本do
``bash
`sudo pip install--升级git+https://github.com/hycis/tensorgraph.git@master
````
,或者只需克隆并添加到"pythonpath".
``bash
git clonehttps://github.com/hycis/tensorgraph.git
导出pythonpath=/path/to/tensorgraph:$pythonpath
```
,以便通过导出"pythonpath"持久化安装。将'pythonpath=/path/to/tensorgraph:$pythonpath'添加到Linux的`.bashrc'或Mac的
`.bash_profile'。此方法有效时,必须确保安装了[setup.py](setup.py)中的所有依赖项。

----
vgg或resnet等模型可以是一个层。resnet的标识块或densenet的密集块也可以是层。在TensorgGraph中建立模型和用乐高积木建立玩具是一样的。例如,可以通过将"basemodel"层子类化并在"model a"层中使用"denseblock"层来创建新模型(层)。从tensorgraph.layers导入denseblock、basemodel、flatten、linear,softmax
将tensorgraph导入为tg

class modela(basemodel):
@basemodel.init_name_scope
def_u init_u(self):
层=[]
层。附加(denseblock())
层。附加(flatten())
层。附加(linear())
layers.append(softmax())
self.startnode=tg.startnode(输入变量=[none])
hn=tg.hiddenode(prev=[self.startnode],layers=layers)
self.endnode=tg.endnode(prev=[hn])
````

他很容易做到这一点=tg.startnode(输入变量=[none])
hn=tg.hiddenode(prev=[self.startnode],layers=layers)
self.endnode=tg.endnode(prev=[hn])
`````

要将"variables"连接到图中,可以执行"train-fprop(x)"或"test-fprop(x)"来创建tensorflow图。通过将"variable"创建从链接"variable"节点到图中的过程中抽象出来,可以防止某些在调用时总是重新初始化其权重的tensorflow层的问题,例如[`tf.nn.batch_normalization`](https://www.tensorflow.org/api_docs/python/tf/nn/batch_normalization)层。另外,有一个单独的培训和测试渠道是为了满足具有不同培训和测试行为的层,例如batchnorm和dropout。

``python
modelb=modelb()
x ph=tf.placeholder()
y train=modelb.train fprop(xph)
y测试=模型b.测试fprop(x_-ph)
```


检查tensorgraph
1中的一些著名模型。[vgg16编码](tensorgraph/layers/backbones.py l37)和[vgg19编码](tensorgraph/layers/backbones.py l125)—[用于大规模图像识别的非常深卷积网络](https://arxiv.org/abs/1409.1556)
2。[Densenet代码](tensorgraph/layers/backbones.py l477)-[密集连接卷积网络](https://arxiv.org/abs/1608.06993)
3.[resnet代码](tensorgraph/layers/backbones.py l225)-[图像识别的深度残差学习](https://arxiv.org/abs/1512.03385)
4.[u net代码](tensorgraph/layers/backbones.py l531)—[u-net:生物医学图像分割的卷积网络](https://arxiv.org/abs/1505.04597)

----
您可以很容易地将其与[horovod]集成(https://github.com/uber/horovod)。

``python
import horovod.tensorflow as hvd
from tensorflow.python.framework import ops
import tensorflow as tf
hvd.init()

=模型b()
x庠ph=tf.placeholder()
y庠ph=tf.placeholder()
y庠train=b.train庠fprop(x庠ph)
y庠test=b.test庠fprop(x庠ph)

train庠cost=mse(y庠train,y庠ph)
test庠cost=mse(y庠test,y_ph)

opt=hvd.distributedooptimizer(opt)


batchnormalization layer所需的=opt.minimize(train_cost)

init_op=tf.group(tf.global_variables_initializer(),
tf.local_variables_initializer())
bcast=hvd.broadcast_global_variables(0)

=str(hvd.local_rank())

tf.session(graph=graph,config=config)作为sess:sess.run(init_op)
bcast.run()

feed_dict={x_ph:x,y_ph:y})
````

在tensorgraph中,我们定义了三种类型的节点。startnode:用于图形的输入
2。hiddendnode:用于将连续层放入
3。endnode:为了从模型中获取输出,我们将所有的序列层放在一个"hiddendnode"中,并将隐藏的节点连接在一起,以构建您想要的体系结构。图形总是以"startnode"开头,以"endnode"结尾。"startnode"是放置
起点的位置,它可以是"占位符"、另一个图形的符号输出、
或"tfrecords"的数据输出。` endnode`是从
图形中获取输出的地方,在这里,输出可用于计算损耗,或者只是查看特定层上的
输出。下面显示了一个构建张量图的
[示例](examples/example.py)。

----
\graph example

<;img src="draw/graph.png"height="250">;

首先定义用于放置输入占位符的"startnode"
``python
y1 dim=50
y2 dim=100
batchsize=32
学习率=0.01

y1=tf.placeholder('float32',[none,y1 dim])
y2=tf.placeholder('float32',[none,y2 dim])
s1=startnode(input_vars=[y1])
s2=startnode(input_vars=[y2])
`````
然后定义"hiddenode",用于将序列层放入每个"hiddenode"
``python
h1=hiddenode(prev=[s1,s2],
input_merge_mode=concat(),
层=[线性(y1 dim+y2 dim,y2 dim),relu())
h2=hiddendnode(prev=[s2],
layers=[linear(y2 dim,y2 dim),relu())
h3=hiddendnode(prev=[h1,h2],
input_merge_mode=sum(),
layers=[linear(y2 dim,y1 dim),relu())
````
然后定义"endnode"。` endnode`用于回溯图形以将节点连接在一起。
`` python
e1=endnode(prev=[h3])
e2=endnode(prev=[h2])
`````
最后通过将'start nodes'和'endnodes'放入'graph`
`` python
graph=graph(start=[s1,s2],end=[e1,e2])
```
运行列车正向传播以从列车模式获得符号输出。"graph.train-fprop"的输出数
与"graph`
``python
o1,o2=graph.train-fprop()
````
``最终构建一个优化器来优化目标函数=tf.reduce_mean((y2-o2)**2)
mse=o1_mse+o2_mse
optimizer=tf.train.adamoptimizer(learning_rate).minimize(mse)
`````
----
softmax](示例/hierarchical_softmax.py)
其中,较低的hierarchical softmax层可以在所有较高的
hierarchical softmax层上进行调节。

<;img src="draw/hsoftmax.png"height="250">;

`` python
组件维度]
y2 ph=tf.placeholder('float32',[none,组件维度])
y3 ph=tf.placeholder('float32',[none,组件维度])

softmax())
h2=hiddenode(prev=[h1],layers=[linear(component dim,component dim,softmax()])
h3=hiddenode(prev=[h2],layers=[linear(component dim,component dim),softmax()])


e2=endnode(prev=[h1,h2],input_merge_mode=sum())
e3=endnode(prev=[h1,h2,h3],input_merge_mode=sum())


graph=graph(start=[start],end=[e1,e2,e3])

o1,o2,O3=graph.train_fprop()

>O1_mse=tf.reduce平均值((y1 ph-O1)**2)
>O2_mse=tf.reduce平均值((y2 ph-O2)**2)
>O3_mse=tf.reduce平均值((y3 ph-O3)**2)
>mse=O1_mse+O2_mse+O3_mse=reduce平均值((y2 ph-O2)**2)
>mse=O1_mse+O2_mse+O3_mse
>优化器=br/>>优化器=tf.train.train.train最小化(mse)
````

----
###下面的转移学习示例是一个使用双模态输入的转移学习示例,并在中间层使用共享表示进行合并,事实上,tensorgraph可以用于构建任意数量的转移学习模式。

<;img src="draw/transferlearn.png"height="250">;


`` python
参数
x1u dim=50
x2 dim=100
共享共享dim=200
y dim=100
batchsize=32
学习率=0.01


x1-ph=tf.placeholholder('float32',[none,x1 dim])
x2 ph=x2 ph=200
batchsize=32
batchsize=32
学习学习率=0.01






tf.placeholder('float32',[无,x2庠])
y庠ph=tf.placeholder('float32',[none,y庠dim])

s2=startnode(input庠vars=[x1庠ph])
s2=startnode(input庠vars=[x2庠ph])

h1=hiddenode(prev=[s1],layers=[线性(x1庠dim,共享庠dim),relu())
h2=隐藏节点(prev=[s2],layers=[线性(x2维度,共享维度),relu())
h3=隐藏节点(prev=[h1,h2],input_merge_mode=sum(),
层=[线性(共享维度,y维度),softmax()])


o1,=graph.train_fprop()

mse=tf.reduce_mean((y_ph-o1)**2)
优化器=tf.train.adamoptimizer(学习速率)。最小化(mse)
```

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

推荐PyPI第三方库


热门话题
java Webdriver预期条件失败:等待元素不再可见BLR   java如何清除UserPrincipal缓存   Java中的oracle:如何将时间戳格式更改为其他格式?   java List<List<String>>到String[]   使用参数列表从powershell调用java   java如何使用JsonFormat注释或任何其他spring日期注释验证即时类型字段的ISO标准格式的日期值?   java嵌套JTrees:表达式树   连接modelica模型和Java模型   java为什么是用户。dir可以设置为“.”?   具有不同切点的java XGBoost交叉验证   linux从所有JVM获取所有Java类的列表?   java进程在停止嵌入式下拖时结束,退出代码为1   java如何为2D数组进行Hibernate ORM映射   java使用什么事务管理器?(JPA,Spring)