![78461eb3b616fb2e8ad6ce51cff47a36.png](https://i-blog.csdnimg.cn/blog_migrate/23b07d320c656012fd0102709ee4d484.jpeg)
上期分享,我给大家分享了pytorch的相关基础,不少小伙伴跟我吐苦水说能不能搞个Tensorflow的教程呀,Tensorflow的应用太乱了,那本期就是Tensorflow教程啦!!
本期的内容包括:
- Tensorflow的排序与张量
- Tensorflow 计算图
- Tensorflow中的占位符
- Tensorflow 的变量
- 建立回归模型
- 在Tensorflow计算图中用张量名执行对象
- 在Tensorflow中储存和恢复模型
- 把张量转换成多维数据阵列
- 利用控制流构图
- 用TensorBoard可视化图
1. Tensorflow的排序与张量
Tensorflow允许用户把张量操作和功能定义为计算图。张量是通用的数学符号,代表保存数据值的多维列阵,张量的维数称为阶。
![1c4ca5d9624fce61afc4c9df785faec0.png](https://i-blog.csdnimg.cn/blog_migrate/62ef606bf53d3e24be9d403b94a70841.jpeg)
引用相关的库
import tensorflow as tf
import numpy as np
获取张量的阶(从下面例子看到tf的计算过程)
# 获取张量的阶(从下面例子看到tf的计算过程)
g = tf.Graph()
# 定义一个计算图
with g.as_default():
## 定义张量t1,t2,t3
t1 = tf.constant(np.pi)
t2 = tf.constant([1,2,3,4])
t3 = tf.constant([[1,2],[3,4]])
## 获取张量的阶
r1 = tf.rank(t1)
r2 = tf.rank(t2)
r3 = tf.rank(t3)
## 获取他们的shapes
s1 = t1.get_shape()
s2 = t2.get_shape()
s3 = t3.get_shape()
print("shapes:",s1,s2,s3)
# 启动前面定义的图来进行下一步操作
with tf.Session(graph=g) as sess:
print("Ranks:",r1.eval(),r2.eval(),r3.eval())
![3d2ae3347d8fcb57ad4c220ec310e732.png](https://i-blog.csdnimg.cn/blog_migrate/efb910a05a2f042a2a512077d3a8106e.jpeg)
2. Tensorflow 计算图
Tensorflow 的核心在于构建计算图,并用计算图推导从输入到输出的所有张量之间的关系。
假设有0阶张量a,b,c,要评估
![614dba39b06ba3c91d8ce56ac11b0c38.png](https://i-blog.csdnimg.cn/blog_migrate/0901115d56c076c208a09423ff2edc88.png)
可以看到,计算图就是一个节点网络,每个节点就像是一个操作,将函数应用到输入张量,然后返回0个或者更多个张量作为张量作为输出。
在Tensorflow编制计算图步骤如下:
- 1.初始化一个空的计算图
- 2.为该计算图加入节点(张量和操作)
- 3.执行计算图:
- a.开始一个新的会话
- b.初始化图中的变量
- c.运行会话中的计算图
# 初始化一个空的计算图
g = tf.Graph()
# 为该计算图加入节点(张量和操作)
with g.as_default():
a = tf.constant(1,name="a")
b = tf.constant(2,name="b")
c = tf.constant(3,name="c")
z = 2*(a-b)+c
# 执行计算图
## 通过调用tf.Session产生会话对象,该调用可以接受一个图为参数(这里是g),否则将启动默认的空图
## 执行张量操作的用sess.run(),他将返回大小均匀的列表
with tf.Session(graph=g) as sess:
print('2*(a-b)+c =>',sess.run(z))
![e6d0adc1323e53cdd054cf228f9b5061.png](https://i-blog.csdnimg.cn/blog_migrate/bad153951937469cfaca765030300d3d.jpeg)
3. Tensorflow中的占位符
Tensorflow有提供数据的特别机制。其中一种机制就是使用占位符,他们是一些预先定义好类型和形状的张量。
通过调用tf.placeholder函数把这些张量加入计算图中,而且他们不包括任何数据。然而一旦执行图中的特定节点就需要提供数据阵列。
(1)定义占位符
g = tf.Graph()
with g.as_default():
tf_a = tf.placeholder(tf.int32,shape=(),name="tf_a") # shape=[]就是定义0阶张量,更高阶张量可以用【n1,n2,n3】表示,如shape=(3,4,5)
tf_b = tf.placeholder(tf.int32,shape=(),name="tf_b")
tf_c = tf.placeholder(tf.int32,shape=(),name="tf_c")
r1 = tf_a - tf_b
r2 = 2*r1
z = r2 + tf_c
(2)为占位符提供数据
当在图中处理节点的时候,需要产生python字典来为占位符来提供数据阵列。
with tf.Session(graph=g) as sess:
feed = {
tf_a:1,
tf_b:2,
tf_c:3
}
print('z:',sess.run(z,feed_dict=feed))
![421f064e867f5dbb6b2de3070af471e3.png](https://i-blog.csdnimg.cn/blog_migrate/bf63cf727d24a3f1450670235f7cd4d3.png)
(3)用batch_sizes为数据阵列定义占位符
在研发神经网络模型的时候,有时会碰到大小规模不一致的小批量数据。占位符的一个功能是把大小无法确定的维度定义为None。
g = tf.Graph()
with g.as_default():
tf_x = tf.placeholder(tf.float32,shape=(None,2),name="tf_x")
x_mean = tf.reduce_mean(tf_x,axis=0,name="mean")
np.random.seed(123)
with tf.Session(graph=g) as sess:
x1 = np.random.uniform(low=0,high=1,size=(5,2))
print("Feeding data with shape",x1.shape)
print("Result:",sess.run(x_mean,feed_dict={tf_x:x1}))
x2 = np.random.uniform(low=0,high=1,size=(10,2))
print("Feeding data with shape",x2.shape)
print("Result:",sess.run(x_mean,feed_dict={tf_x:x2}))