(1)介绍:
深度学习,如深度神经网络、卷积神经网络和递归神经网络已被应用
计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域
并获取了极好的效果。
(1)认识Tensorflow
(2)Tensorflow特点
(3)tensorflow安装
conda create -n name python==3.6
activate name
conda install -n name tensorflow==1.15.0
(4)tensorflow初体验
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)
sum1 = tf.add(a,b)
print(sum1) # Tensor("Add:0", shape=(), dtype=float32)
with tf.Session() as sess:
print(sess.run(sum1)) # 11.0
图默认已经注册,一组表示 tf.Operation计算单位的对象和tf.Tensor
表示操作之间流动的数据单元的对象
(1)获取调用
1、tf.get_default_graph()
2、op、sess或者tensor 的graph属性
(2)图的创建
tf.Graph()
使用新创建的图
g = tf.Graph()
with g.as_default():
a = tf.constant(1.0)
assert c.graph is g
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
import tensorflow as tf
# 创建一张图包含了一组op和tensor,上下文环境
# op:只要使用tensorflow的API定义的函数都是op
# 张量:就指代的是数据
g = tf.Graph()
print(g) #
with g.as_default():
c = tf.constant(11.0)
print(c.graph) #
# 实现一个加法运算
a = tf.constant(5.0)
b = tf.constant(6.0)
sum1 = tf.add(a,b)
# print(sum1) # Tensor("Add:0", shape=(), dtype=float32)
# 默认的这张图,相当于是给程序分配一段内存
graph = tf.get_default_graph()
print(graph) #
with tf.Session() as sess:
print(sess.run(sum1)) # 11.0
print(a.graph)
print(sum1.graph)
print(sess.graph) #
# 这些都是一张图,都在一个地址
(1)作用:
(2)使用:
# 只能运行一个图,可以在会话当中指定图去运行
with tf.Session(graph=g) as sess:
print(sess.run(c)) # 11.0
运行TensorFlow操作图的类,使用默认注册的图(可以指定运行图)
sess = tf.Session()
sess.run(...) # 会话的启用,启动整个图
sess.close() # 进行资源释放
使用上下文管理器:(默认结束时运行sess.close())
with tf.Session() as sess:
sess.run(...)
打印设备:
config=tf.ConfigProto(log_device_placement=True)
with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as sess:
print(sess.run(sum1)) # 11.0
sess.run(sum1) == sum1.eval()
# 只要有会话的上下文环境,就可以使用方便的eval()
(3)会话里的run()方法(会话的启动)
run(fetches, feed_dict=None,graph=None)
其中:
# 不是op不能放入会话的run方法运行
var1 = 1
var2 = 3
sum2 = var1+var2
# 有重载的机制,默认会给运算符重载成op类型
sum3 = var1+a # 呗重载成op类型
with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as sess:
print(sess.run([sum1,a,b])) # op元组类型
print(sess.run(sum2)) # 报错,不是op类型
print(sess.run(sum3))
# 训练模型
# 实时的提供数据进行训练
# placeholder是一个占位符,feed_dict一个字典
plt = tf.placeholder(tf.float32,[None,3])
print(plt)
with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as sess:
print(sess.run(plt,feed_dict={plt:[[1,2,3],[4,5,6]]}))
# 只能运行一个图,可以在会话当中指定图去运行
with tf.Session(graph=g) as sess:
print(sess.run(c)) # 11.0
张量:相当于numpy中的ndarray数组
(1)张量的阶(维度)
(2)张量的数据类型
(3)张量的属性
with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as sess:
print(sess.run(plt,feed_dict={plt:[[1,2,3],[4,5,6]]}))
print(a.graph)
print("---------")
print(a.shape)
print(plt.shape)
print("--------")
print(a.name)
print("-------")
print(a.op)
区别:在于有没有生成一个新的张量数据
TensorFlow中,张量具有静态形状和动态形状
静态形状:
创建一个张量或者由操作推导出一个张量时,初始状态的形状
tf.Tensor.get_shape:获取静态形状
tf.Tensor.set_shape():更新Tensor对象的静态形状,通常用于在不能直接推断的情况下
注意:对于静态形状来说,一旦张量形状固定了,不能再次设置静态形状,不能跨维度修改 1D->1D,2D->2D
动态形状:
一种描述原始张量在执行过程中的一种形状
tf.reshape:创建一个具有不同动态形状的新张量
注意:动态形状可以去创建一个新的张量,改变时候一定要注意元素数量要匹配 1D->2D,1D->3D
要点:1、转换静态形状的时候,1-D到1-D,2-D到2-D,不能跨阶数改变形状
2、 对于已经固定或者设置静态形状的张量/变量,不能再次设置静态形状
3、tf.reshape()动态创建新张量时,元素个数不能不匹配
plt = tf.placeholder(tf.float32,[None,2])
print(plt)
plt.set_shape([3,2])
print(plt)
# plt.set_shape([4,2]) # 不能再次修改
plt_reshape = tf.reshape(plt,[2,3])
print(plt_reshape)
(4)张量的操作
tf.InteractiveSession() # 开启交互式会话
zero = tf.zeros([3,4],tf.float32)
print(zero.eval()) # 只要有会话的上下文环境,就可以使用方便的eval()
random = tf.random_normal([3,4],mean=4,stddev=0.2,dtype=tf.float32)
print(random.eval())
正态分布:
3. 张量变换
(1)改变类型
(2)形状和变换
(3)切片和拓展
a = [[1,2,3],[4,5,6]]
b = [[4,5,6],[7,8,9]]
c = tf.concat([a,b],axis=0)
print(c.eval())
d = tf.concat([a,b],axis=1)
print(d.eval())
https://www.tensorflow.org/versions/r1.0/api_guides/python/math_ops