python是静态还是动态_PyTorch学习:动态图和静态图的例子

本文介绍了神经网络框架中的动态图和静态图概念,对比了PyTorch(动态图)与TensorFlow(静态图)的使用差异。动态图方便调试,直观,而静态图运行速度快,但需先定义后运行。示例展示了在两种框架中实现相同功能的不同方式。
摘要由CSDN通过智能技术生成

动态图和静态图

目前神经网络框架分为静态图框架和动态图框架,PyTorch 和 TensorFlow、Caffe 等框架最大的区别就是他们拥有不同的计算图表现形式。 TensorFlow 使用静态图,这意味着我们先定义计算图,然后不断使用它,而在 PyTorch 中,每次都会重新构建一个新的计算图。通过这次课程,我们会了解静态图和动态图之间的优缺点。

对于使用者来说,两种形式的计算图有着非常大的区别,同时静态图和动态图都有他们各自的优点,比如动态图比较方便debug,使用者能够用任何他们喜欢的方式进行debug,同时非常直观,而静态图是通过先定义后运行的方式,之后再次运行的时候就不再需要重新构建计算图,所以速度会比动态图更快。

# tensorflow

import tensorflow as tf

first_counter = tf.constant(0)

second_counter = tf.constant(10)

# tensorflow

import tensorflow as tf

first_counter = tf.constant(0)

second_counter = tf.constant(10)

def cond(first_counter, second_counter, *args):

return first_counter < second_counter

def body(first_counter, second_counter):

first_counter = tf.add(first_counter, 2)

second_counter = tf.add(second_counter, 1)

return first_counter, second_counter

c1, c2 = tf.while_loop(cond, body, [first_counter, second_counter])

with tf.Session() as sess:

counter_1_res, counter_2_res = sess.run([c1, c2])

print(counter_1_res)

print(counter_2_res)

可以看到 TensorFlow 需要将整个图构建成静态的,换句话说,每次运行的时候图都是一样的,是不能够改变的,所以不能直接使用 Python 的 while 循环语句,需要使用辅助函数 tf.while_loop 写成 TensorFlow 内部的形式

# pytorch

import torch

first_counter = torch.Tensor([0])

second_counter = torch.Tensor([10])

while (first_counter < second_counter)[0]:

first_counter += 2

second_counter += 1

print(first_counter)

print(second_counter)

可以看到 PyTorch 的写法跟 Python 的写法是完全一致的,没有任何额外的学习成本

以上这篇PyTorch学习:动态图和静态图的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值