tensorflow现在已经更新到2.0,学习时还是使用的1.0的版本,之后更新的所有代码都是版本1.0上写的。
环境:tensorflow1.0、python3.6
tensorflow数据流图:
import tensorflow as tf
tensorflow-图
-
图默认已经注册,一组表示tf.Openration计算单位的对象和tf.Tensor表示操作之间流动的数据单元的对象
-
获取调用:
- tf.get_default_graph()
- op、sess或者tensor的graph属性
图的创建
-
tf.Graph()
-
使用新创建的图
import tensorflow as tf
g = tf.Graph()
with g.as_default():
a = tf.constant(1.0)
assert a.graph is g
tensorflow-会话
-
tf.Session() 运行tensorflow操作图的类,使用默认注册的图(可以指定运行图)
-
会话资源 会话可能会有很多资源,如 tf.Variable, tf.QueueBase 和 tf.ReaderBase,会话结束后需要进行资源释放
- sess = tf.Session() sess.run(...) sess.close()
- 使用上下文管理器 with tf.Session() as sess: sess.run(...)
会话的run()方法
run(fetches, feed_dict=None, graph=None)
- 运行op和计算tensor,嵌套列表,元祖,nameduple, dict或OrereddDict(重载的运算符也能运行)
- feed_dict 允许调用者覆盖图中指定张量的值,提供给placeholder使用
- 返回值异常
- RuntimeError:如果它Session处于无效状态(例如已关闭)
- TypeError:如果feed_dict键是不合格的类型
- ValueError:如果fetches或feed_dict键无效或引用Tensor不存在
tensorflow feed操作
- 意义:在程序执行的时候不确定输入的是什么,提前“占个坑”
- 语法:placeholder提供占位符,run时候通过feed_dict指定参数
import tensorflow as tf
input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)
output = tf.add(input1, input2)
with tf.Session() as sess:
print(sess.run([output], feed_dict={input1: 10.0, input2: 20.0}))
代码示例:
# -*- coding: utf-8 -*-
import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # 忽略警告
# 实现一个简单的加法操作 使用tensorflow的api实现线性回归等等
# 定义的所有tensorflow的API都是op
# op有的是装有数据内容的op
# 打印的就是op当中的tensor
# 新创建一个图
# 在不同的图当中做不同的事情
g = tf.Graph()
with g.as_default():
c = tf.constant(10.0)
d = tf.constant(11.0)
sum1 = tf.add(c, d)
print(c, d, sum1)
print(g)
a = tf.constant(3.0)
b = tf.constant(4.0)
print(a, b)
# 定义加法
sum = tf.add(a, b)
# 获取图
gra = tf.get_default_graph()
print(gra)
# 通常做法
# sess = tf.Session()
# sess.run()
# sess.close()
# 上下文管理器
# tensorflow当中session会话,会话会掌握很多资源,默认开启的图,会话才可以使用这个图的资源
# 打印设备
# with tf.Session() as sess:
# print(sess.run(sum))
# python定义变量
name1 = 2.0
cal = name1 + b
print(cal)
with tf.compat.v1.Session(config=tf.ConfigProto(log_device_placement=True)) as sess:
# eval()是必须在会话的上下文环境运行, 作用:eval = sess.run()
# print(a.eval())
# print(sess.run(sum))
print(sess.run([a, b, sum]))
print(sess.run(cal))
# 对于run的解释 对于多个值要放到列表里或者元祖里一起读取打印,int、、等等类型不能在tensorflow的会话当中去去运行