《动手学深度学习》学习笔记(八)

本文探讨了命令式编程和符号式编程在计算性能上的差异,指出符号式编程通过编译优化能提高效率。此外,介绍了MXNet的异步计算如何提升性能,以及自动并行计算和多GPU计算在提升计算性能上的应用。最后提到了Gluon的HybridSequential类在混合式编程中的作用,允许在保持灵活性的同时优化模型计算。

第八章 计算性能

影响计算性能的重要因子:命令式编程、符号式编程异步计算、自动并行计算和多GPU计算。

一、命令式和符号式混合编程

之前我们用的全是命令式编程,使用编程语句改变程序状态。

import timeit
def add(a, b):
    return a+b

def fancy_func(a, b, c, d):
    e = add(a, b)
    f = add(c, d)
    g = add(e, f)
    return g

t1 = timeit.Timer("fancy_func(1, 2, 3, 4)", "from __main__ import fancy_func")
print("time cost %.5f seconds \n" % t1.timeit(number=1000))

# time cost 0.00081 seconds 

 命令式编程很方便,但是运行速度慢:

  • 函数add被多次重复调用。python 会逐一执行三条add命令。
  • 需要保存变量e和f的值,直到整体执行结束。

符号式编程通常在计算流程完全定义好后才被执行。多个深度学习框架,如Theano和TensorFlow,都使用了符号式编程。

符号式编程的程序需要3个步骤:

1、定义计算流程;

2、把计算机流程编译成可执行的程序;

3、给定输入,调用编译好的程序执行。

下面使用符号式编程重新实现上面的命令式编程代码。

import timeit
def add_str():
    return '''
def ad
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值