01. tensorflow基础(一)

1. 认识tensorflow

1.1. 深度学习介绍

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

1.2. 深度学习框架和支持语言

在这里插入图片描述
在这里插入图片描述

1.3. tensorflow 简介

在这里插入图片描述
在这里插入图片描述

1.4. tensorflow 特点

  • 真正的可移植性

    • 引入各种计算设备的支持包括CPU/GPU/TPU,以及能够很好地运行在移动端,如安卓设备、ios、树莓派等等
  • 多语言支持

    • Tensorflow 有一个合理的c++使用界面,也有一个易用的python使用界面来构建和执行你的graphs,你可以直接写python/c++程序。
  • 高度的灵活性与效率

    • TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源软件库能够灵活进行组装图,执行图。随着开发的进展,Tensorflow的效率不算在提高
  • 支持

    • TensorFlow 由谷歌提供支持,谷歌投入了大量精力开发 TensorFlow,它希望 TensorFlow 成为机器学习研究人员和开发人员的通用语言

1.5. tensorflow安装

  • CPU版本:https://blog.csdn.net/niuxinzan/article/details/80269345
  • GPU版本:https://blog.csdn.net/weixin_41294780/article/details/80482186

2. tensorflow图的结构

2.1. 名词解释

  • tensor: 张量,要区别与变量(就指代的是数据)
  • operation(op):专门运算的操作结点,所有操作都是一个op(只要使用tensorflow的API定义的函数都是op)
  • graph(图): 整个程序的结构
  • session(会话): 运算程序的图

2.2. 入门案例

  • tensorflow1.15
import tensorflow as tf

a = tf.constant(5.0)
b = tf.constant(6.0)

sum1 = tf.add(a, b)
with tf.Session() as sess:
    print(sess.run(sum1))
    
  • tensorflow2.0
import tensorflow as tf

g = tf.Graph()
with g.as_default():
    a = tf.constant(2.0)
    b = tf.constant(1.0)

    sum1 = tf.add(a, b)
    print(sum1)

with tf.compat.v1.Session(graph=g) as sess:
    print(sess.run(sum1))

2.3. 图

2.3.1. 默认的图(tensorflow2.0已经没有默认的图了)

  • 图默认已经注册,一组表示 tf.Operation计算单位的对象和tf.Tensor表示操作之间流动的数据单元的对象
  • 获取调用
    • tf.get_default_graph() (注意:tensorflow2.0已经没有这个方法了)
    • op、sess或者tensor 的graph属性

2.3.2. 图的创建

import tensorflow as tf

# 创建一张图,包含了op和tensor 上下文环境
# op: 只要使用tensorflow的API定义的函数都是op
# tensor: 就指代的是数据

g = tf.Graph()
with g.as_default():
    c = tf.constant(11.0)
    # 断言
    assert c.graph is g

2.3.3. op的类型

  • 标量运算:Add、Sub、Mul、Div、Exp、Log、Greater、Less、Equal
  • 向量运算:Concat、Slice、Splot、Constant、Rank、Shape、Shuffle
  • 矩阵运算:Matmul、MatrixInverse、MatrixDeterminant
  • 带状态的运算:Variable、Assign、AssignAdd
  • 神经网络组件:SoftMax、Sigmoid、ReLU、Convolution2D、MaxPooling
  • 存储、恢复:Save、Restore
  • 队列及同步运算:Enqueue、Dequeue、MutexAcquire、MutexRelease
  • 控制流:Merge、Switch、Enter、Leave、Nextlteration

2.4. 会话

2.4.1. tensorflow 前后端系统

  • 前端系统: 定义程序的图结构
  • 后端系统: 运算图结构

2.4.2. 会话的作用

  • 运行图的结构
  • 分配资源计算
  • 掌握资源(变量的资源,队列,线程)

2.4.3. 会话的参数

  • config=tf.compat.v1.ConfigProto(log_device_placement=True) 打印相关运行的设备信息

    • tensorflow1.15

      import tensorflow as tf
      
      g = tf.Graph()
      
      with g.as_default():
          a = tf.constant(3.0)
          b = tf.constant(4.0)
          sum1 = tf.add(a, b)
      
      with tf.Session(graph=g, config=tf.ConfigProto(log_device_placement=True)) as sess:
          print(sess.run(a))
          print(sess.run(b))
          print(sess.run(sum1))
          print(sum1.eval())
      
    • tensorflow2.0

      import tensorflow as tf
      
      g = tf.Graph()
      
      with g.as_default():
          a = tf.constant(3.0)
          b = tf.constant(4.0)
          sum1 = tf.add(a, b)
      
      with tf.compat.v1.Session(graph=g, config=tf.compat.v1.ConfigProto(log_device_placement=True)) as sess:
          print(sess.run(a))
          print(sess.run(b))
          print(sess.run(sum1))
          print(sum1.eval())
      
  • 交互式:tf.compat.v1.InteractiveSession() 开启交互式会话,方便测试

  • a.eval() 相当于 sess.run(a)

    • 注意: 在tensorflow2.0中使用了a.numpy()

2.4.4. 会话的run方法

  • run(fetches, feed_dict=None,graph=None)运行ops和计算tensor

    • 嵌套列表,元组,

      • namedtuple,dict或OrderedDict(重载的运算符也能运行, 比如tensorflow中的张量与python中的数据进行加减乘除运算)
    • feed_dict 允许调用者覆盖图中指定张量的值,提供给

    • placeholder使用

  • 返回值异常

    • RuntimeError:如果它Session处于无效状态(例如已关闭)。
    • TypeError:如果fetches或feed_dict键是不合适的类型。
    • ValueError:如果fetches或feed_dict键无效或引用 Tensor不存在
  • 重载逻辑

import tensorflow as tf

g = tf.Graph()

with g.as_default():
    a = tf.constant(3.0)
    # 重载
    sum2 = a + 10

with tf.compat.v1.Session(graph=g, config=tf.compat.v1.ConfigProto(log_device_placement=True)) as sess:
    print(sess.run(sum2))
    # 直接打印python普通变量报错
    # print(sess.run(var1))
  • placeholder占位符
import tensorflow as tf

g = tf.Graph()

with g.as_default():
    # 训练模型
    # 实时的提供数据区进行训练

    # placeholder是一个占位符, feed_dict是一个字典,plt也是一个op
    plt = tf.compat.v1.placeholder(tf.float32, [None, 3])


with tf.compat.v1.Session(graph=g, config=tf.compat.v1.ConfigProto(log_device_placement=True)) as sess:
    print(sess.run(plt, feed_dict={plt:[[1,2,3],[4,5,6]]}))

3. 张量的定义及数据

3.1. 张量

- Tensorflow基本的数据格式,可以理解为numpy中的数组
- 一个类型化的N维度数组(tf.Tensor)
- 由三部分,名字,形状,数据类型

3.2. 张量的阶

  • 阶就是维度的意思,注意,0阶也就是标量

3.3. 张量的数据类型

  • 一般比较常用的tf.float32 和 tf.int32

3.4. 张量的属性

  • graph: 张量所属的图
  • op: 张量的操作名
  • name:张量的字符串描述
  • shape:张量的形状
    • tensorflow:打印出来的形状表示
      • 0维:()
      • 1维:(5)
      • 2维:(2,3)
      • 3维:(2,3,4)

3.5. 张量的动态形状和静态形状

  • 静态形状

    • 创建一个张量或者由操作推导出一个张量时,初始状态的形状
      • tf.Tensor.get_shape:获取静态形状
      • tf.Tensor.set_shape():更新Tensor对象的静态形状
      import tensorflow as tf
      
      g = tf.Graph()
      
      with g.as_default():
          # 训练模型
          # 实时的提供数据区进行训练
      
          # placeholder是一个占位符, feed_dict是一个字典,plt也是一个op
          plt = tf.compat.v1.placeholder(tf.float32, [None, 2])
          print(plt)
          print(plt.get_shape())
          # 固定形状
          plt.set_shape([3,2])
          print(plt.get_shape())
      
  • 动态形状

    • 一种描述原始张量在执行过程中的一种形状
      • tf.reshape:创建一个具有不同动态形状的新张量(注意: numpy中reshape直接修改原数据,tensorflow中创建了一个新的,不修改原来的)
      import tensorflow as tf
      
      g = tf.Graph()
      
      with g.as_default():
          # 训练模型
          # 实时的提供数据区进行训练
      
          # placeholder是一个占位符, feed_dict是一个字典,plt也是一个op
          plt = tf.compat.v1.placeholder(tf.float32, [None, 2])
          # 动态修改形状,生成了一个新的张量
          plt_reshape = tf.reshape(plt, [2,2])
          print(plt)
          print(plt_reshape)
      
  • 注意要点:

    • 转换静态形状的时候, 1-D到1-D,2-D到2-D,不能跨阶数改变
    • 对于已经固定或者设置静态形状的张量/变量, 不能再次设置静态形状
    • tf.reshape()动态创建新张量时, 元素个数不能不匹配
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值