【深度学习】嘿马深度学习笔记第2篇:TensorFlow介绍,2.4 张量【附代码文档】

举报
程序员一诺python 发表于 2025/06/20 15:56:28 2025/06/20
【摘要】 要求 目标 1.1 深度学习与机器学习的区别 学习目标 1.1.1 区别 1.1.1.1 特征提取方面 1.1.2 算法代表 深度学习的应用场景 1.2 深度学习框架介绍 1.2.2 TensorFlow的特点 深度学习介绍 2.1 TF数据流图 2.1.1 案例:TensorFlow实现一个加法运算 2.2 图与TensorBoard 2.2.1 什么是图结构 2.2.2 图

教程总体简介:要求 目标 1.1 深度学习与机器学习的区别 学习目标 1.1.1 区别 1.1.1.1 特征提取方面 1.1.2 算法代表 深度学习的应用场景 1.2 深度学习框架介绍 1.2.2 TensorFlow的特点 深度学习介绍 2.1 TF数据流图 2.1.1 案例:TensorFlow实现一个加法运算 2.2 图与TensorBoard 2.2.1 什么是图结构 2.2.2 图相关操作 1 默认图 2 创建图 2.2.4 OP 2.2.4.2 指令名称 2.3 会话 卷积神经网络 2.5 CNN网络实战技巧 3.1 迁移学习案例 3.1.1 案例:基于VGG对五种图片类别识别的迁移学习 3.1.1.2 数据集以及迁移需求 3.1.1.3 思路和步骤 3.1.1.4 训练的时候读取本地图片以及类别 假定最后一层CNN的层输出为(None, 8, 8, 2048) 取每一个特征图的平均值作为输出,用以替代全连接层 100为类别 在__init__中添加 1.1 项目演示 1.2 开发环境搭建 3.2 目标检测任务描述 3.2.4 目标定位的简单实现思路 商品物体检测项目介绍 3.3 R-CNN 3.3.1 目标检测-Overfeat模型 3.3.7 问题? 3.3.8 SPPNet 3.5 Faster R-CNN 3.5.2 RPN原理 3.5.4 效果对比 YOLO与SSD 3.6 YOLO(You only look once) 3.6.1 YOLO 3.6.2 单元格(grid cell) 3.6.3 非最大抑制(NMS) 3.6.4 训练 3.7 SSD(Single Shot MultiBox Detector) 3.7.1 SSD 问题:SSD中的多个Detector & classifier有什么作用? 3.7.2 训练与测试流程 SSD网络接口实现 4.3 案例:SSD进行物体检测 4.3.1 案例效果 4.3.3 步骤分析以及代码 循环读取图片进行多个图片输出检测 预测 定义BBox工具 使用非最大抑制算法过滤 5.1 项目训练结构介绍 5.1.1 项目目录结构 商品检测数据集训练 5.2 标注数据读取与存储 5.2.1 案例:xml读取本地文件存储到pkl 5.2.1.1 解析结构 one_hot编码函数 5.3 训练 5.3.3 多GPU训练代码修改 5.4 本地预测测试 5.4.1 预测代码 5.6 Web与模型服务对接逻辑 5.5 模型导出 5.4.1 keras 模型进行TensorFlow导出 Docker部署环境使用介绍 5.7 TF Serving 与 Web开启服务 4.8.2 安装Tensorflow Serving 5.7.2 案例操作:commodity模型服务运行 TensorFlow Client对接模型服务 Web Server开启 模型导出与部署 2.4 张量 2.4.1 张量(Tensor) 2.4.1.1 张量的类型 2.4.4 张量的数学运算 2.5 变量OP 2.5.1 创建变量 2.5.2 使用tf.variable_scope()修改变量的命名空间 2.7 案例:实现线性回归 2.7.1 线性回归原理复习 2.7.3 增加其他功能 2 增加命名空间 3 模型的保存与加载 4 命令行参数使用 完整代码 1.2 神经网络基础 tf.keras介绍 神经网络与tf.keras 1.4 深层神经网络 3.1 卷积神经网络(CNN)原理 2.2案例:CIFAR100类别分类 2.2.2 API 使用 2.2.3 步骤分析以及代码实现(缩减版LeNet5) 2.2 梯度下降算法改进 2.4 经典分类网络结构 2.4.6 案例:使用pre_trained模型进行VGG预测

完整笔记资料代码:https://gitee.com/yinuo112/AI/tree/master/深度学习/嘿马深度学习笔记/note.md

感兴趣的小伙伴可以自取哦~


全套教程部分目录:


部分文件图片:

TensorFlow介绍

1
2
3
4
5
6
7
8
9
说明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阶….

1
2
3
4
5
6
7
8
9
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()动态创建新张量时,张量的元素个数必须匹配

1
2
3
4
5
6
7
8
9
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

  • 变量需要显式初始化,才能运行值

1
2
3
4
5
6
7
8
9
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的名字前面增加命名空间的指定名字

1
2
3
4
5
6
7
8
9
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>

TensorFlow介绍

1
2
3
4
5
6
7
8
9
说明TensorFlow的数据流图结构
应用TensorFlow操作图
说明会话在TensorFlow程序中的作用
应用TensorFlow实现张量的创建形状类型修改操作
应用Variable实现变量op的创建
应用Tensorboard实现图结构以及张量值的显示
应用tf.train.saver实现TensorFlow的模型保存以及加载
应用tf.app.flags实现命令行参数添加和使用
应用TensorFlow实现线性回归

2.7 案例:实现线性回归

学习目标

  • 目标

  • 应用op的name参数实现op的名字修改

  • 应用variable_scope实现图程序作用域的添加
  • 应用scalar或histogram实现张量值的跟踪显示
  • 应用merge_all实现张量值的合并
  • 应用add_summary实现张量值写入文件
  • 应用tf.train.saver实现TensorFlow的模型保存以及加载
  • 应用tf.app.flags实现命令行参数添加和使用
  • 应用reduce_mean、square实现均方误差计算
  • 应用tf.train.GradientDescentOptimizer实现有梯度下降优化器创建
  • 应用minimize函数优化损失
  • 知道梯度爆炸以及常见解决技巧

  • 应用

  • 实现线性回

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。