import tensorflow.compat.v1 as tf
tf.disable_eager_execution()
# 创建一个常量运算,将其作为一个节点加入到默认计算图中
hello = tf.constant("Hello World")
# 创建一个对话
sess = tf.Session()
#运行并获得结果
print(sess.run(hello))
b'Hello World'
输出前面的’b’ 表示Bytes literals(字节文字)
计算图是一个有向图,由以下内容构成:
• 一组节点,每个 节点都代表一个 操作,是一种 运算
• 一组有向边,每条 边代表节点之间的 关系(数据传递和控制依赖)
TensorFlow有两种边:
• 常规边(实线):代表数据依赖关系。一个节点的运算输出成为另一个节点的输入,两个节点之间有tensor流动( 值传递)
• 特殊边(虚线):不携带值,表示两个节点之间的 控制相关性。比如, happens- - before 关系,源节点必须在目的节点执行前完成执行
node1 = tf.constant(3.0,tf.float32,name="node1")
node2 = tf.constant(4.0,tf.float32,name="node1")
node3 = tf.add(node1,node2)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u14X61zp-1588692296058)(attachment:image.png)]
print(node3)
# 输出的结果不是一个具体的数字,而是一个张量的结构
Tensor("Add_1:0", shape=(), dtype=float32)
# 建立对话并显示运行结果
sess = tf.Session()
print("运行sess.run(node1)的结果:",sess.run(node1))
运行sess.run(node1)的结果: 3.0
# 更新变量并返回计算结果
print("运行sess.run(node13)的结果:",sess.run(node3))
# 关闭session
sess.close()
运行sess.run(node13)的结果: 7.0
tens1 = tf.constant([[[1,2],[2,3]],[[3,4],[5,6]]])
sess = tf.Session()
print(sess.run(tens1)[1,1,0])
print(sess.run(tens1)[1,0])
sess.close()
5
[3 4]
import tensorflow.compat.v1 as tf
tf.disable_eager_execution()
tf.reset_default_graph() #清除default graph和不断增加的节点
a = tf.Variable(1, name="a")# a
b = tf.add(a,1,name="b")# b=a+1
c = tf.multiply(b,4,name="c")#c=b*4
d = tf.subtract(c,b,name="d")#d=c-b
#logdir改为自己机器上的合适路径
logdir = 'D:/log'
#生成一个写日志的writer,并将当前的TensorFlow计算图写入日志
writer = tf.summary.FileWriter(logdir,tf.get_default_graph())
writer.close()
WARNING:tensorflow:From C:\Users\PC\Anaconda3\lib\site-packages\tensorflow_core\python\ops\resource_variable_ops.py:1630: calling BaseResourceVariable.__init__ (from tensorflow.python.ops.resource_variable_ops) with constraint is deprecated and will be removed in a future version.
Instructions for updating:
If using Keras pass *_constraint arguments to layers.
# 定义计算图
tens1 = tf.constant([1,2,3])
#创建一个会话
sess = tf.Session()
#使用这个创建好的会话得到关心的运算的结果,比如可以调用sess.run(result)
#来得到张量result的取值
print(sess.run(tens1))
# 关闭会话使得本次运行使用到的资源可以被释放
sess.close()
[1 2 3]
需要明确调用 Session.close()函数来关闭会话并释放资源
当程序因为异常退出时,关闭会话函数可能就不会被执行从而导致资源泄漏
# 定义计算图
tens1 = tf.constant([1,2,3])
#创建一个会话
sess = tf.Session()
try:
#使用这个创建好的会话得到关心的运算的结果,比如可以调用sess.run(result)
#来得到张量result的取值
print(sess.run(tens1))
except:
print("Exception")
finally:
# 关闭会话使得本次运行使用到的资源可以被释放
sess.close()
[1 2 3]
node1 = tf.constant(3.0,tf.float32,name="node1")
node2 = tf.constant(4.0,tf.float32,name="node2")
result = tf.add(node1,node2)
#创建一个会话,并通过Python中的上下文管理器来管理这个会话
with tf.Session() as sess:
#使用这创建好的会话来计算关心的结果
print(sess.run(result))
# 不需要再调用 Session.close()函数来关闭会话
# 当上下文退出时会话关闭和资源释放也自动完成了
7.0
TensorFlow不会自动生成默认的会话,需要手动指定
当默认的会话被指定之后可以通过 tf.Tensor.eval 函数来计算一个张量的取值
node1 = tf.constant(3.0,tf.float32,name="node1")
node2 = tf.constant(4.0,tf.float32,name="node2")
result = tf.add(node1,node2)
sess = tf.Session()
with sess.as_default():
print(result.eval())
7.0
sess = tf.Session()
print(sess.run(result))
print(result.eval(session=sess))
7.0
7.0
node1 = tf.constant(3.0,tf.float32,name="node1")
node2 = tf.constant(4.0,tf.float32,name="node2")
result = tf.add(node1,node2)
sess = tf.InteractiveSession()
print(result.eval())
sess.close()
7.0
import tensorflow.compat.v1 as tf
tf.disable_eager_execution()
a = tf.constant(1)
b = tf.constant(2)
c = tf.add(a,b)
sess = tf.Session()
c =sess.run(c)
print(c)
sess.close()
3
node1 = tf.Variable(3.0,tf.float32,name="node1")
node2 = tf.Variable(4.0,tf.float32,name="node2")
result = tf.add(node1,node2,name="add")
sess = tf.Session()
# 变量初始化:定义
init = tf.global_variables_initializer()
#执行
sess.run(init)
print(sess.run(result))
7.0
# 通过变量赋值输出1、2、3...10
# 并求和
import tensorflow.compat.v1 as tf
tf.disable_eager_execution()
value = tf.Variable(0,name="value")
sum_value = tf.Variable(0,name="sum_value")
one = tf.constant(1)
new_value = tf.add(value,one)# new_value = value + one
update_value = tf.assign(value,new_value)# 这个节点:value = new_value
# 变量初始化:定义
init = tf.global_variables_initializer()
# 上下文执行方式
with tf.Session() as sess:
sess.run(init)
for i in range(10):
sess.run(update_value)
print(sess.run(value))
sum_value = sum_value + sess.run(value)
print(sess.run(sum_value))
1
2
3
4
5
6
7
8
9
10
55
x = tf.placeholder(tf.float32,[2,3],name = "tx")
# 此代码生成一个2x3的二维数组,矩阵中每个元素的类型都是tf.float32,内部对应的符号名称是txt
如果构建了一个包含placeholder操作的计算图,当在session中调用run方法时,placeholder占用的变量必须通过 feed_dict参数传递进去,否则报错
import tensorflow.compat.v1 as tf
tf.disable_eager_execution()
a = tf.placeholder(tf.float32,name = "a")
b = tf.placeholder(tf.float32,name = "b")
c = tf.multiply(a,b,name="c")
#init = tf.global_variables_initializer()
with tf.Session() as sess:
# sess.run(init)
#通过feed_dict的参数传值,按字典格式
result = sess.run(c,feed_dict={a:8.0,b:3.5})
print(result)
28.0
多个操作可以通过一次Feed完成执行
a = tf.placeholder(tf.float32,name = "a")
b = tf.placeholder(tf.float32,name = "b")
c = tf.multiply(a,b,name="c")
d = tf.subtract(a,b,name="d")
#init = tf.global_variables_initializer()
with tf.Session() as sess:
# sess.run(init)
#通过feed_dict的参数传值,按字典格式
result = sess.run([c,d],feed_dict={a:[3,4,5],b:[1,2,3]}) # [] 表示列表
print(result)
print(result[0])
print(result[1])
[array([ 3., 8., 15.], dtype=float32), array([2., 2., 2.], dtype=float32)]
[ 3. 8. 15.]
[2. 2. 2.]
# 分开赋值
a = tf.placeholder(tf.float32,name = "a")
b = tf.placeholder(tf.float32,name = "b")
c = tf.multiply(a,b,name="c")
d = tf.subtract(a,b,name="d")
with tf.Session() as sess:
#通过feed_dict的参数传值,按字典格式
rc,rd = sess.run([c,d],feed_dict={a:[3,4,5],b:[1,2,3]}) # [] 表示列表
print("Value of ‘+’ = ",rc,"Value of ‘-’ = ",rd)
Value of ‘+’ = [ 3. 8. 15.] Value of ‘-’ = [2. 2. 2.]