tensorflow2.0基础二
一、查看版本
import tensorflow as tf
print("TensorFlow版本是:",tf.__version__)
#显示Tensorflow版本,注意:是两个下划线
区别一:输出数值
#tensorflow输出节点数值时要使用一个会话
#tensorflow2.0版本可以使用numpy()方法,以下是使用numpy()方法输出数值
import tensorflow as tf
node1 = tf.constant([[3.0,1.5],[2.5,6.0]],tf.float32)
node2 = tf.constant([[4.0,1.0],[5.0,2.5]],tf.float32)
node3 = tf.add(node1,node2)#定义加法计算
#输出运算结果Tensorflow值
print(node3.numpy())
区别二、创建常量
- tensorFlow2.0在创建的同时指定数据类型,在数值兼容的情况下会自动做数据类型转换
b = tf.constant([3,4],tf.float32)
b
#2.0版本中不会报错,可以兼容,
#而在1.0版本中会报错,数据类型必须一致
- 如果shape参数值被设定,则会做相应的reshape工作
c = tf.constant([1,2,3,4,5,6],shape=[2,3])
#在1.0版本中会报错,shape必须一致
#输出结果:
<tf.Tensor:id=18,shape=(2,3),dtype=int32,numpy=array([[1,2,3],[4,5,6]])>
区别三、变量
- 变量在创建时必须确定初始值,可以像定义常量一样
v1 =tf.Variable([1,2])
v2 = tf.Variable([3,4],tf.float32)
v1,v2
输出:
(<tf.Variable 'Variable:0' shape(2,) dtype=int32 numpy=array([1,2])>,
<tf.Variable 'Variable:0' shape(2,) dtype=int32 numpy=array([3,4])>)
#这里的变量是与前面常量的变化,即使定义了数据类型float,但是返回的还是变量本身的数据类型int
- 也可以用一个张量作为初始值,1…0版本报错
c = tf.constant(1)
v = tf.Variable(c)
c,v
输出:
(<tf.Tensor:id=36,shape=(),dtype=int32,numpy=1>,<tf.Variable 'Variable:0' shape=(),dtype=int32,numpy=1>)
- 在tensorFlow中变量和普通编辑语言中的变量有着较大区别
- tensorFlow中的变量是一种特殊的设计,是可以被机器优化过程中自动改变值的张量,可以理解为待优化的张量。
- 在TensorFlow中变量创建后,一般无需人工赋值,系统会根据算法模型,在训练优化过程中自动调整变量的值
- 在变量的参数中,Trainable参数用来表征当前变量是否需要被自动优化创建变量对象时默认是启用自动优化标志。
- 与传统的编程语言不同,TensorFlow中的变量定义后,一般无需人工赋值,系统会根据算法模型,训练优化过程中自动调整变量对应的数值
- 特殊情况需要人工更新的,可以用变量赋值语句assign()来实现。
#人工赋值案例
v = tf.Variable(5)
v.assign(v+1)
v
#tensorFlow还直接提供了assign_add(),assign_sub()方法来实现变量的加法和减法值更新
v1=tf.Variable(5)
v2= tf.Variable(5)
v1.assign_add(1)
v2.assign_sub(1)
v1,v2
二、在TensorFlow2.0中实现TensorFlow1.x的静态图执行模式
- TensorFlow2 代码的执行机制默认采用Eager Execution(动态执行机制)
- TensorFlow 1.x版本代码的执行主要是基于传统的Grap Execution(静态图执行)机制,存在一定阿达弊端,如入门门槛高、调试困难、灵活性差、无法使用Python原生控制语句等
- 静态图执行模式对于即时执行模式效率会更高,所以通常当模型开发调试完成,部署采用图执行模式会有更高运行效率。TensorFlow2里也支持以函数的方式调用计算图。
三、在tensorFlow2中实现图执行模式开发
-
tensorFlow2虽然TensorFlow1.x有较大差异,不能直接兼容TensorFlow1.x代码。但实际上还是提供了对TensorFlow1.x的API支持
-
原有的TensorFlow1.x的API整理到tensorFlow.compat.v1包里去了
-
TensorFlow2 中执行或者开发TensorFlow1.x代码,可以做如下处理:
-
导入TensorFlow时使用 import tensorflow.compat.v1 as tf 代替 import tensorflow as tf;
-
执行tf.disable_eager_execution()禁用tensorflow2 默认的即时执行模式
-
#体验案例:计算两数之和
#在tensorflow2 下执行tensorflow1.x版本代码
import tensorflow.compat.v1 as tf
tf.disable_eager_execution() #改为图执行模式运行
#定义了一个简单的”计算图“
node1= tf.constant(3.0,tf.float32,name="node1")
node2= tf.constant(4.0,tf.float32,name="node2")
node3= tf.add(node1,node2)
print(node3 )