Tensorflow2——Eager模式简介以及运用

1、什么是Eager模式?

使用过TensorFlow的大家都会知道, TF通过计算图将计算的定义和执行分隔开, 这是一种声明式(declaretive)的编程模型. 确实, 这种静态图的执行模式优点很多,但是在debug时确实非常不方便(类似于对编译好的C语言程序调用,此时是我们无法对其进行内部的调试), 因此有了Eager Execution, 这在TensorFlow v1.5首次引入.
引入的Eager Execution模式后, TensorFlow就拥有了类似于Pytorch一样动态图模型能力, 我们可以不必再等到see.run(*)才能看到执行结果, 可以方便在IDE随时调试代码,查看OPs执行结果.
tf.keras封装的太好了 。不利于适用于自定义的循环与训练,添加自定义的循环
是一个命令式的编程环境,它使得我们可以立即评估操作产生的结果,而无需构建计算图。

图运算模式:把一系列的操作搭建好,然后再进行操作,某一步出现错误的话,很难排查,不利于自定义的动作
eager模式:做一步,就能看到结果,交互模式(命令行模式),增加了网络调试的灵活程度,在TensorFlow2的时候,默认的使用了eager模式

首先声明一个比较常见的问题:
至于为什么要导入除了第一行意外的另外几行,我在训练的时候遇到了一个问题,问题如下:
“Failed to get convolution algorithm. This is probably because cuDNN failed to initialize”
网上大多数人说什么tf和cuDNN的版本不匹配啊啥的,最后发现可能是GPU内存不足造成的。需要在程序前加以下一段代码:————参考了这篇博客 “Failed to get convolution algorithm. This is probably because cuDNN failed to initialize”错误的解决办法.成功的解决了问题。意思是对GPU进行按需分配。主要原因是我的图像比较大,消耗GPU资源较多。但我的显卡(GTX1060TI)显存只有6GB,所以会出现这个错误。这个错误提示有很大的误导性,让人一直纠结CUDA和CuDNN的版本问题。

#先导入必要的库
import tensorflow as tf
#下面就是加入的部分
from tensorflow.compat.v1 import ConfigProto
from tensorflow.compat.v1 import InteractiveSession

config = ConfigProto()
config.gpu_options.allow_growth = True
session = InteractiveSession(config=config)

2、Eager模式下的基本运算

1)基本运算

x=[[2,]] #返回[[2]]
m=tf.matmul(x,x)  #两个X相乘  返回一个tensor  <tf.Tensor: shape=(1, 1), dtype=int32, numpy=array([[4]])>
m.numpy()   #将tensor转化为numpy数组 

#例如定义一个二维数组
a=tf.constant([[1,2],[3,4]])
a.numpy()   #array([[1, 2],[3, 4]])

c=tf.multiply(a,m)    
#  c返回值:<tf.Tensor: shape=(2, 2), dtype=int32, numpy=array([[ 4,  8],[12, 16]])>
# 再看一个例子
num=tf.convert_to_tensor(10)  #将numpy数字转化为tensor _——> <tf.Tensor: shape=()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值