前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【深度学习】讲透深度学习第3篇:TensorFlow张量操作(代码文档已分享)

【深度学习】讲透深度学习第3篇:TensorFlow张量操作(代码文档已分享)

原创
作者头像
程序员一诺
发布2024-02-04 18:36:27
1230
发布2024-02-04 18:36:27
举报
文章被收录于专栏:深度学习深度学习
本系列文章md笔记(已分享)主要讨论深度学习相关知识。可以让大家熟练掌握机器学习基础,如分类、回归(含代码),熟练掌握numpy,pandas,sklearn等框架使用。在算法上,掌握神经网络的数学原理,手动实现简单的神经网络结构,在应用上熟练掌握TensorFlow框架使用,掌握神经网络图像相关案例。具体包括:TensorFlow的数据流图结构,神经网络与tf.keras,卷积神经网络(CNN),商品物体检测项目介绍,YOLO与SSD,商品检测数据集训练和模型导出与部署。

全套笔记和代码自取移步gitee仓库: gitee仓库获取完整文档和代码

感兴趣的小伙伴可以自取哦,欢迎大家点赞转发~


共 9 章,60 子模块

TensorFlow介绍

代码语言:javascript
复制
说明TensorFlow的数据流图结构
应用TensorFlow操作图
说明会话在TensorFlow程序中的作用
应用TensorFlow实现张量的创建、形状类型修改操作
应用Variable实现变量op的创建
应用Tensorboard实现图结构以及张量值的显示
应用tf.train.saver实现TensorFlow的模型保存以及加载
应用tf.app.flags实现命令行参数添加和使用
应用TensorFlow实现线性回归

2.4 张量

学习目标

  • 目标
    • 知道常见的TensorFlow创建张量
    • 知道常见的张量数学运算操作
    • 说明numpy的数组和张量相同性
    • 说明张量的两种形状改变特点
    • 应用set_shape和tf.reshape实现张量形状的修改
    • 应用tf.matmul实现张量的矩阵运算修改
    • 应用tf.cast实现张量的类型
  • 应用
  • 内容预览
    • 2.4.1 张量(Tensor)
      • 1 张量的类型
      • 2 张量的阶
    • 2.4.2 创建张量的指令
      • 固定值张量
      • 随机值张量
    • 2.4.3 张量的变换
      • 1 类型改变
      • 2 形状改变
    • 2.4.4 张量的数学运算

在编写 TensorFlow 程序时,程序传递和运算的主要目标是tf.Tensor

2.4.1 张量(Tensor)

TensorFlow 的张量就是一个 n 维数组, 类型为tf.Tensor。Tensor具有以下两个重要的属性

  • type:数据类型
  • shape:形状(阶)

2.4.1.1 张量的类型

类型
类型

2.4.1.2 张量的阶

阶

形状有0阶、1阶、2阶….

代码语言:javascript
复制
tensor1 = tf.constant(4.0)
tensor2 = tf.constant([1, 2, 3, 4])
linear_squares = tf.constant([[4], [9], [16], [25]], dtype=tf.int32)
?
print(tensor1.shape)
  
  
# 0维:()   1维:(10, )   2维:(3, 4)   3维:(3, 4, 5)

2.4.2 创建张量的指令

  • 固定值张量
固定值张量
固定值张量
  • 随机值张量
随机值张量
随机值张量
  • 其它特殊的创建张量的op
    • tf.Variable
    • tf.placeholder

2.4.3 张量的变换

1 类型改变

类型变换
类型变换

2 形状改变

TensorFlow的张量具有两种形状变换,动态形状和静态形状

  • tf.reshape
  • tf.set_shape

关于动态形状和静态形状必须符合以下规则

  • 静态形状
    • 转换静态形状的时候,1-D到1-D,2-D到2-D,不能跨阶数改变形状
    • 对于已经固定的张量的静态形状的张量,不能再次设置静态形状
  • 动态形状
    • tf.reshape()动态创建新张量时,张量的元素个数必须匹配
代码语言:javascript
复制
def tensor_demo():
    """
    张量的介绍
    :return:
    """
    a = tf.constant(value=30.0, dtype=tf.float32, name="a")
    b = tf.constant([[1, 2], [3, 4]], dtype=tf.int32, name="b")
    a2 = tf.constant(value=30.0, dtype=tf.float32, name="a2")
    c = tf.placeholder(dtype=tf.float32, shape=[2, 3, 4], name="c")
    sum = tf.add(a, a2, name="my_add")
    print(a, a2, b, c)
    print(sum)
    # 获取张量属性
    print("a的图属性:\n", a.graph)
    print("b的名字:\n", b.name)
    print("a2的形状:\n", a2.shape)
    print("c的数据类型:\n", c.dtype)
    print("sum的op:\n", sum.op)
?
    # 获取静态形状
    print("b的静态形状:\n", b.get_shape())
?
    # 定义占位符
    a_p = tf.placeholder(dtype=tf.float32, shape=[None, None])
    b_p = tf.placeholder(dtype=tf.float32, shape=[None, 10])
    c_p = tf.placeholder(dtype=tf.float32, shape=[3, 2])
    # 获取静态形状
    print("a_p的静态形状为:\n", a_p.get_shape())
    print("b_p的静态形状为:\n", b_p.get_shape())
    print("c_p的静态形状为:\n", c_p.get_shape())
?
    # 形状更新
    # a_p.set_shape([2, 3])
    # 静态形状已经固定部分就不能修改了
    # b_p.set_shape([10, 3])
    # c_p.set_shape([2, 3])
?
    # 静态形状已经固定的部分包括它的阶数,如果阶数固定了,就不能跨阶更新形状
    # 如果想要跨阶改变形状,就要用动态形状
    # a_p.set_shape([1, 2, 3])
    # 获取静态形状
    print("a_p的静态形状为:\n", a_p.get_shape())
    print("b_p的静态形状为:\n", b_p.get_shape())
    print("c_p的静态形状为:\n", c_p.get_shape())
?
    # 动态形状
    # c_p_r = tf.reshape(c_p, [1, 2, 3])
    c_p_r = tf.reshape(c_p, [2, 3])
    # 动态形状,改变的时候,不能改变元素的总个数
    # c_p_r2 = tf.reshape(c_p, [3, 1])
    print("动态形状的结果:\n", c_p_r)
    # print("动态形状的结果2:\n", c_p_r2)
    return None

2.4.4 张量的数学运算

  • 算术运算符
  • 基本数学函数
  • 矩阵运算
  • reduce操作
  • 序列索引操作

这些API使用,我们在使用的时候介绍,具体参考文档

2.5 变量OP

  • 目标
    • 说明变量op的特殊作用
    • 说明变量op的trainable参数的作用
    • 应用global_variables_initializer实现变量op的初始化
  • 应用
  • 内容预览
    • 2.5.1 创建变量
    • 2.5.2 使用tf.variable_scope()修改变量的命名空间

TensorFlow变量是表示程序处理的共享持久状态的最佳方法。变量通过 tf.Variable OP类进行操作。变量的特点:

  • 存储持久化
  • 可修改值
  • 可指定被训练

2.5.1 创建变量

  • tf.Variable(initial_value=None,trainable=True,collections=None,name=None)
    • initial_value:初始化的值
    • trainable:是否被训练
    • collections:新变量将添加到列出的图的集合中collections,默认为[GraphKeys.GLOBAL_VARIABLES],如果trainable是True变量也被添加到图形集合 GraphKeys.TRAINABLE_VARIABLES
  • 变量需要显式初始化,才能运行值
代码语言:javascript
复制
def variable_demo():
    """
    变量的演示
    :return:
    """
    # 定义变量
    a = tf.Variable(initial_value=30)
    b = tf.Variable(initial_value=40)
    sum = tf.add(a, b)
?
    # 初始化变量
    init = tf.global_variables_initializer()
?
    # 开启会话
    with tf.Session() as sess:
        # 变量初始化
        sess.run(init)
        print("sum:\n", sess.run(sum))
?
    return None

2.5.2 使用tf.variable_scope()修改变量的命名空间

会在OP的名字前面增加命名空间的指定名字

代码语言:javascript
复制
with tf.variable_scope("name"):
    var = tf.Variable(name='var', initial_value=[4], dtype=tf.float32)
    var_double = tf.Variable(name='var', initial_value=[4], dtype=tf.float32)
?
<tf.Variable 'name/var:0' shape=() dtype=float32_ref>
<tf.Variable 'name/var_1:0' shape=() dtype=float32_ref>

请期待下一期

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • 全套笔记和代码自取移步gitee仓库: gitee仓库获取完整文档和代码
  • 感兴趣的小伙伴可以自取哦,欢迎大家点赞转发~
    • 共 9 章,60 子模块
    • TensorFlow介绍
    • 2.4 张量
      • 学习目标
        • 2.4.1 张量(Tensor)
          • 2.4.1.1 张量的类型
          • 2.4.1.2 张量的阶
        • 2.4.2 创建张量的指令
          • 2.4.3 张量的变换
            • 1 类型改变
            • 2 形状改变
          • 2.4.4 张量的数学运算
            • 2.5.1 创建变量
            • 2.5.2 使用tf.variable_scope()修改变量的命名空间
        • 2.5 变量OP
        • 请期待下一期
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
        http://www.vxiaotou.com