“pydot”上的一个简单的包装,它可以固定一些锋利的边缘
fastdot的Python项目详细描述
快速点
A simple wrapper over
pydot
to make it more consistent, unsurprising, and pythonic
承认:fastdot
深受{a1}的影响,他基于他设计的高度灵活的数据结构构建了一个绘制图形的系统。在
安装
我们建议使用conda安装:conda install -c fastai fastdot
。您也可以使用pip进行安装:pip install fastdot
;但是,如果您使用这种方法,您还需要安装graphviz(例如使用apt
,brew
,等等)。在
概要
从表示对象和对象之间的连接的一些数据开始(例如,它们通常不是像本例中那样的字符串,而是神经网络层、用户和产品、或汽车旅行等):
layers1=['conv','conv','lin']layers2=['conv','lin']block1,block2=['block1','block2']conns=((block1,block2),(block1,layers2[-1]))
然后将它们直接映射到视觉效果:
^{pr2}$请参阅下面的符号图和object graphs部分以获得更完整的示例。在
fastdot概述
fastdot
是优秀的pydot程序之上的一个薄型包装器(它反过来又是绝对精彩的Graphviz software之上的一个薄型包装器),旨在使它更加一致、不令人惊讶和python。(删除shoppress的示例:pydot.Node('node')
给出了一个模糊的编译异常,因为node
是底层graphviz
程序中的关键字,而{fastdot
中提供名称;您可以直接在对象之间创建边。在
下面是一些主要功能的快速示例:
g=Dot()c=Cluster('cl',fillcolor='pink')a1,a2,b=c.add_items('a','a','b')c.add_items(a1.connect(a2),a2.connect(b))g.add_item(Node('Check tooltip',tooltip="I have a tooltip!"))g.add_item(c)g
如您所见,图形知道如何在Jupyter笔记本中直接显示自己,并且可以导出为HTML(它在幕后使用SVG)。工具提示出现在笔记本和导出的HTML页面中。默认情况下,具有相同标签的节点设置为相同的颜色。同样,如上所示,您可以使用add_item
或{
符号图
fastdot
被特别设计成更容易以符号方式创建图形——例如,对于Python字典、PyTorch/TensorFlow模型等等。下面是一个简单的例子,其中包含一些模拟神经网络层和序列模型。首先,让我们定义我们的模拟类:
@dataclass(frozen=True)classLayer:name:str;n_filters:int=1classLinear(Layer):passclassConv2d(Layer):pass@dataclass(frozen=True)classSequential:layers:list;name:str
以下是我们的“模型”的顺序块:
block1=Sequential([Conv2d('conv',5),Linear('lin',3)],'block1')block2=Sequential([Conv2d('conv1',8),Conv2d('conv2',2),Linear('lin')],'block2')
fastdot
可以直接从对象创建所有节点属性;您只需定义描述如何将对象属性映射到图形属性的函数。这些映射包含在node_defaults
和cluster_defaults
字典中(尽管默认情况下标签是使用^{
node_defaults['fillcolor']=lambdao:'greenyellow'ifisinstance(o,Linear)else'pink'cluster_defaults['label']=node_defaults['label']=attrgetter('name')node_defaults['tooltip']=str
有了它,我们可以直接从对象创建节点,例如使用方便的seq_cluster
函数:
c1=seq_cluster(block1.layers,block1)c2=seq_cluster(block2.layers,block2)e1,e2=c1.connect(c2),c1.connect(c2.last())graph_items(c1,c2,e1,e2)
注意,在这个例子中,我们甚至不需要单独创建Dot
对象-graph_items
直接从提供的图形项创建它。在
使用对象图
在上面的例子中,我们直接在fastdot
对象之间定义了我们的边。但是,在实际操作中,很可能直接在python对象之间定义边,例如:
conns=((block1,block2),(block1,block2.layers[-1]),)
在本例中,您需要某种方法将python对象连接到表示它们的fastdot
图形项。映射由fastdot
自动存储,并通过object2graph
函数提供:
g=graph_items(seq_cluster(block1.layers,block1),seq_cluster(block2.layers,block2))object2graph(block1.layers[-1])
<pydot.Node at 0x7f013180c310>
无需使用图形即可访问图形:
g.add_items(*[object2graph(a).connect(object2graph(b))fora,binconns])g
有一个helper函数,object_connections
,它为您创建这些连接。因此,上述内容可以简化为:
g=graph_items(seq_cluster(block1.layers,block1),seq_cluster(block2.layers,block2))g.add_items(*object_connections(conns))g
- 项目
标签: