动态图动态图意味着计算图的构建和计算同时发生(define by run)该机制可以实时获得中间结果的值,便于调试,同时也便于将大脑中的想法转化为代码计划,便于编程实现Pytorch由于使用了动态的图形机制,使用起来更方便,样式更pythonic,受到科学家的欢迎。
静态图表
在静态图则意味着计算图的构建和实际计算是分开(define and run)的静态图中,由于事先理解并定义了整个运算流,所以在之后再次执行时不需要再构筑计算图(可以理解为编译),所以比动态图速度更快,爸爸但是,这意味着在期望的程序和编译器实际执行之间存在更多的替代方案,代码中的错误很难发现,也就无法像动态图那样随时获得中间计算结果。 Tensorflow缺省使用静态图像机制,这也是其名称的由来,在定义整个计算流(flow )后计算数据(tensor )。
比较动态图和静态图之间的差异
一个代码分别基于pytorch和tensorflow的实现
pytorch
importtorchfirst _ counter=torch.tensor ([0] ) second _ counter=torch.tensor ([ 10 ] ) while ) first _ counters _ cor
importtensorflowastffirst_counter *=TF.constant (0) second_counter=TF.constant ) 10 ) defcond ) first _ counter args ) : return first _ countersecond_counterdefbody (first _ counter,second _ counter ) :first_counter=) 1 ) return first_counter,second_counter c1,C2=TF.while _ lile second _ counter (withtf.session ) ) as sess 333333
Tensorflow使用内置的辅助函数tfwhile loop,而不是直接使用Python的while循环语句,因为在静态图表模式下每次运算的计算图表都是相同的。 而且,会像TF.session(.run )那样胡来。
另一方面,Pytorch是动态图表的模型,每次运算时都会构筑新的计算图表,实现编程不需要额外的学习成本