深度学习之Tensorflow

文章目录

    • 深度学习介绍
    • Tensorflow
      • 1、图(op+tensor)
      • 2、会话
      • 3、张量

深度学习介绍

(1)介绍:

深度学习,如深度神经网络、卷积神经网络和递归神经网络已被应用
计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域
并获取了极好的效果。

(2)深度学习框架
深度学习之Tensorflow_第1张图片

Tensorflow

(1)认识Tensorflow
深度学习之Tensorflow_第2张图片
(2)Tensorflow特点

  1. 真正的可移植性
    引入各种计算设备的支持包括CPU/GPU/TPU,以及能够很好地运行在移动端,
    如安卓设备、ios、树莓派等等
  2. 多语言支持
    Tensorflow 有一个合理的c++使用界面,也有一个易用的python使用界面来构建和
    执行你的graphs,你可以直接写python/c++程序。
  3. 高度的灵活性与效率
    TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源软件库
    能够灵活进行组装图,执行图。随着开发的进展,Tensorflow的效率不算在提高
  4. 支持 TensorFlow 由谷歌提供支持,谷歌投入了大量精力开发 TensorFlow,它希望 TensorFlow 成为机器学习研究人员和开发人员的通用语言

(3)tensorflow安装

  1. conda创建一个新的python环境conda create -n name python==3.6
  2. 激活环境activate name
  3. 在该环境下下载tensorflowconda install -n name tensorflow==1.15.0
  4. pycharm下使用该环境即可

(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

运行结果:
在这里插入图片描述
(5)分析

  1. 数据流图:
    深度学习之Tensorflow_第3张图片
    其中:
    tensor:张量【一种数据类型】
    operation(op):专门运算的操作节点,所有操作都是一个op
    graph(图):你的整个程序的结构
    深度学习之Tensorflow_第4张图片
    (6)tensorflow进阶
    1、图
    2、会话
    3、张量
    4、变量
    5、模型保存和加载
    6、自定义命令行参数

1、图(op+tensor)

默认已经注册,一组表示 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

(3)哪些是op
深度学习之Tensorflow_第5张图片
(4)举例

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) # 
    # 这些都是一张图,都在一个地址

2、会话

(1)作用:

  1. 运行图的结构
  2. 分配资源计算
  3. 掌控资源(变量的资源,队列,线程)

(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

在这里插入图片描述
交互式:tf.InteractiveSession()

sess.run(sum1)  ==  sum1.eval()
# 只要有会话的上下文环境,就可以使用方便的eval()

(3)会话里的run()方法(会话的启动)

run(fetches, feed_dict=None,graph=None)

其中:

  1. fetches:嵌套列表,元组,namedtuple,dict或OrderedDict(重载的运算符也能运行)
# 不是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))
  1. feed_dict:允许调用者覆盖图中指定张量的值,提供给placeholder使用(语法:placeholder提供占位符,run时候通过feed_dict指定参数)
    意义:在程序执行的时候,不确定输入的是什么,提前“占个坑”
# 训练模型
# 实时的提供数据进行训练
# 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]]}))
  1. graph:指定图去运行
# 只能运行一个图,可以在会话当中指定图去运行
with tf.Session(graph=g) as sess:
    print(sess.run(c))  # 11.0
  1. 返回值异常:
    RuntimeError:如果它Session处于无效状态(例如已关闭)。
    TypeError:如果fetches或feed_dict键是不合适的类型。
    ValueError:如果fetches或feed_dict键无效或引用 Tensor不存在

3、张量

张量:相当于numpy中的ndarray数组

(1)张量的阶(维度)深度学习之Tensorflow_第6张图片
(2)张量的数据类型
深度学习之Tensorflow_第7张图片
(3)张量的属性

  1. graph : 张量所属的默认图
  2. op :张量的操作名
  3. name : 张量的字符串描述
  4. shape : 张量形状
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_第8张图片
(4)张量的动态形状与静态形状

区别:在于有没有生成一个新的张量数据

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)

深度学习之Tensorflow_第9张图片

(4)张量的操作

  1. 生成固定值张量
    深度学习之Tensorflow_第10张图片
tf.InteractiveSession()  # 开启交互式会话
zero = tf.zeros([3,4],tf.float32)
print(zero.eval())  # 只要有会话的上下文环境,就可以使用方便的eval()

深度学习之Tensorflow_第11张图片

  1. 生成随机值张量
    深度学习之Tensorflow_第12张图片
    其中:mean为期望平均值,stddev为标准差
random = tf.random_normal([3,4],mean=4,stddev=0.2,dtype=tf.float32)
print(random.eval())

深度学习之Tensorflow_第13张图片
正态分布:
深度学习之Tensorflow_第14张图片
3. 张量变换
(1)改变类型
深度学习之Tensorflow_第15张图片
(2)形状和变换
深度学习之Tensorflow_第16张图片
(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())

深度学习之Tensorflow_第17张图片
(4)提供给Tensor运算的数学函数

https://www.tensorflow.org/versions/r1.0/api_guides/python/math_ops

深度学习之Tensorflow_第18张图片

你可能感兴趣的:(笔记,tensorflow,深度学习)