一,认识TensorFlow
二,安装Tensorflow
安装的1.13版本,目前已更新2.0+版本
pip install tensorflow==1.13.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
三,TensorFlow图的结构
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # 修改警告级别,不显示警告
import tensorflow as tf
# 实现一个加法运算
a = tf.constant(5.0)
b = tf.constant(6.0)
print(a,b)
with tf.Session() as sess: # 上下文管理器
pass
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # 修改警告级别,不显示警告
import tensorflow as tf
# 实现一个加法运算
a = tf.constant(5.0)
b = tf.constant(6.0)
sum1 = tf.add(a,b)
print(sum1)
with tf.Session() as sess: # 上下文管理器
print(sess.run(sum1))
1,数据流图
数据:tensor:张量
operation:(OP):专门运算的操作节点,所有操作都是一个op
图:graph:你的整个程序的结构
边是由流动的Tensor组成;
每个节点是Operation操作,即一些数学的操作、激励函数的操作等,作为Operation的输入和输出都是Tensor(张量);
边和节点共同构成了Graph,即数据流图;
对于数据流图的运行,需要创建Session这样一个会话来运行,Session可以在不同的设备上运行,例如GPU、CPU等。
2,图
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # 修改警告级别,不显示警告
import tensorflow as tf
# 实现一个加法运算
a = tf.constant(5.0)
b = tf.constant(6.0)
sum1 = tf.add(a,b)
graph = tf.get_default_graph() # 默认的这张图,相当于是给程序分配一段内存地址
print(graph)
with tf.Session() as sess: # 上下文管理器
print(sess.run(sum1))
print(a.graph)
print(sum1.graph)
print(sess.graph)
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # 修改警告级别,不显示警告
import tensorflow as tf
# 创建一张图(包含了一组op和tensor)
g = tf.Graph()
with g.as_default():
c = tf.constant(10.0)
print(c.graph)
# 实现一个加法运算
a = tf.constant(5.0)
b = tf.constant(6.0)
sum1 = tf.add(a,b)
graph = tf.get_default_graph() # 默认的这张图,相当于是给程序分配一段内存地址
print(graph)
with tf.Session() as sess: # 上下文管理器
print(sess.run(sum1))
print(sum1.graph)
创建一张图(包含了一组op和tensor)
op: 只要使用了TensorFlow的API定义的函数,都是op
张量(tensor):指的就是数据
3,会话
在编译环境中,输入要执行的Tensorflow代码,当创建会话执行相应的功能时,首先客户端会创建一个图,接着,使用会话的run操作,这是会将需要执行的操作传入服务端,服务端使用C++语言完成相应的操作, 得出结果后,将结果传回客户端,然后根据代码命令最后输出返回的结果。
import os
import tensorflow as tf
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # 修改警告级别,不显示警告
# 实现一个加法运算
a = tf.constant(5.0)
b = tf.constant(6.0)
sum1 = tf.add(a,b)
graph = tf.get_default_graph() # 默认的这张图,相当于是给程序分配一段内存地址
print(graph)
with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as sess: # 上下文管理器
print(sess.run(sum1))
print(sum1.graph)
import os
import tensorflow as tf
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # 修改警告级别,不显示警告
# 实现一个加法运算
a = tf.constant(5.0)
b = tf.constant(6.0)
sum1 = tf.add(a,b)
graph = tf.get_default_graph() # 默认的这张图,相当于是给程序分配一段内存地址
print(graph)
with tf.Session() as sess: # 上下文管理器
print(sess.run(sum1))
print("-"*50)
print(sum1.graph)
print("-" * 50)
print(sum1.eval()) # 只要有绘画的上下文环境,就可以使用方便的eval()
4,会话里的run()方法
import os
import tensorflow as tf
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # 修改警告级别,不显示警告
# 实现一个加法运算
a = tf.constant(5.0)
b = tf.constant(6.0)
sum1 = tf.add(a,b)
graph = tf.get_default_graph() # 默认的这张图,相当于是给程序分配一段内存地址
with tf.Session() as sess: # 上下文管理器
print(sess.run([a,b,sum1]))
print("-"*50)
重载机制
import os
import tensorflow as tf
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # 修改警告级别,不显示警告
# 实现一个加法运算
a = tf.constant(5.0)
b = tf.constant(6.0)
sum1 = tf.add(a,b)
# 不是op不能直接运行
aa = 1.0
bb = 2.0
sum2 = aa + bb
# 重载机制(只要一部分是op类型,那么默认会给运算符重载成op类型)
sum3 = a + aa
graph = tf.get_default_graph() # 默认的这张图,相当于是给程序分配一段内存地址
with tf.Session() as sess: # 上下文管理器
print(sess.run(sum3))
print("-"*50)
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # 修改警告级别,不显示警告
import tensorflow as tf
# 训练模型,实时提供数据去进行训练
# placeholder 是一个占位符,feed_dict是一个字典
plt = tf.placeholder(tf.float32,[2,3]) # 2行3列
with tf.Session() as sess: # 上下文管理器
print(sess.run(plt,feed_dict={plt:[[1,2,3],[4,5,6]]}))
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # 修改警告级别,不显示警告
import tensorflow as tf
# 训练模型,实时提供数据去进行训练
# placeholder 是一个占位符,feed_dict是一个字典
plt = tf.placeholder(tf.float32,[None,3]) # 行不固定,3列
print(plt)
with tf.Session() as sess: # 上下文管理器
print(sess.run(plt,feed_dict={plt:[[1,2,3],[4,5,6],[7,8,9]]}))
5,张量的定义及数据
数据的类型代表进度不一样
import os
import tensorflow as tf
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # 修改警告级别,不显示警告
# # 实现一个加法运算
a = tf.constant(5.0)
b = tf.constant(6.0)
sum1 = tf.add(a,b)
graph = tf.get_default_graph() # 默认的这张图,相当于是给程序分配一段内存地址
with tf.Session() as sess: # 上下文管理器
print(sum1.graph)
print("-"*50)
print(sum1.name)
print("-"*50)
print(sum1.op)
print("-"*50)
print(sum1.shape)
在TensorFlow中:打印出来的形状表示如下:
0维:() 1维:(5)
2维:(5,6) 3维(2,3,4)
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # 修改警告级别,不显示警告
import tensorflow as tf
# placeholder 是一个占位符,feed_dict是一个字典
plt = tf.placeholder(tf.float32,[None,3]) # 形状不固定
print(plt)
# 形状的改变(静态形状,动态形状)
plt.set_shape([2,3])
print(plt)
with tf.Session() as sess: # 上下文管理器
pass
import tensorflow as tf
# placeholder 是一个占位符,feed_dict是一个字典
plt = tf.placeholder(tf.float32,[None,3]) # 形状不固定
print(plt)
# 形状的改变(静态形状,动态形状)
plt.set_shape([4,3])
print(plt)
# plt.set_shape([4,3]) # 对于静态形状来说,一旦张量形状固定了,不能再次设置静态形状
plt_reshape = tf.reshape(plt,[2,6]) # 动态形状可以去创建一个新的张量,注意:元素数量必须匹配
print(plt_reshape)
with tf.Session() as sess: # 上下文管理器
pass
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # 修改警告级别,不显示警告
import tensorflow as tf
# placeholder 是一个占位符,feed_dict是一个字典
plt = tf.placeholder(tf.float32,[None,3]) # 形状不固定
print(plt)
# 形状的改变(静态形状,动态形状)
plt.set_shape([4,3])
print(plt)
# plt.set_shape([4,3]) # 对于静态形状来说,一旦张量形状固定了,不能再次设置静态形状,不能跨维度修改
plt_reshape = tf.reshape(plt,[2,6]) # 动态形状可以去创建一个新的张量,注意:元素数量必须匹配
print(plt_reshape)
plt_reshape2 = tf.reshape(plt,[2,3,2]) # 动态形状可以去创建一个新的张量,注意:元素数量必须匹配,可以跨维度修改
print(plt_reshape2)
with tf.Session() as sess: # 上下文管理器
pass
6,运算API介绍
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # 修改警告级别,不显示警告
import tensorflow as tf
zero = tf.zeros([3,4],tf.float32)
ones = tf.ones([3,4],tf.float32)
with tf.Session() as sess: # 上下文管理器
print(zero.eval())
print("-"*50)
print(ones.eval())
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # 修改警告级别,不显示警告
import tensorflow as tf
a = [[1,2,3],[4,5,6]]
b = [[7,8,9],[10,11,12]]
c = tf.concat([a,b],axis=0) # 按行合并
d = tf.concat([a,b],axis=1) # 按列合并
with tf.Session() as sess: # 上下文管理器
print(sess.run(c))
print("-"*50)
print(sess.run(d))
四,可视化学习
1,变量能够持久化保存,普通张量op不能
2,当定义一个变量op的时候,一定要在会话当中去运行初始化
3,name参数:在tensorboard使用的时候显示名字,可以让相同的op名字进行区分
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # 修改警告级别,不显示警告
import tensorflow as tf
# 变量op
a = tf.constant([1,2,3,4,5]) # 张量
var = tf.Variable(tf.random_normal([2,3],mean=0.0,stddev=1.0)) # 创建一个随机变量
print(a,var)
# 必须做一步显示的初始化
init_op = tf.global_variables_initializer()
with tf.Session() as sess: # 上下文管理器
# 必须运行初始化op
sess.run(init_op)
print(sess.run([a,var]))
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # 修改警告级别,不显示警告
import tensorflow as tf
# 变量op
a = tf.constant([1,2,3,4,5]) # 张量
var = tf.Variable(tf.random_normal([2,3],mean=0.0,stddev=1.0)) # 创建一个随机变量
print(a,var)
# 必须做一步显示的初始化
init_op = tf.global_variables_initializer()
with tf.Session() as sess: # 上下文管理器
# 必须运行初始化op
sess.run(init_op)
# 把程序的图结构写入事件文件,graph:把指定的图写入事件文件当中
filewriter = tf.summary.FileWriter("./test",graph=sess.graph)
print(sess.run([a,var]))