深度学习(3)-TensorFlow入门(常数张量和变量)

news/2025/2/24 6:27:42

低阶张量操作是所有现代机器学习的底层架构,可以转化为TensorFlow API。

张量,包括存储神经网络状态的特殊张量(变量)​。
张量运算,比如加法、relu、matmul。
反向传播,一种计算数学表达式梯度的方法(在TensorFlow中通过GradientTape对象来实现)​。

然后是高阶深度学习概念。这可以转化为Keras API。

,多层可以构成模型。
损失函数,它定义了用于学习的反馈信号。(必须是可微的)
优化器,它决定学习过程如何进行。
评估模型性能的指标,比如精度。
训练循环,执行小批量梯度随机下降。

常数张量和变量

要使用TensorFlow,我们需要用到一些张量。创建张量需要给定初始值。例如,可以创建全1张量或全0张量(见代码清单3-1)​,也可以从随机分布中取值来创建张量(见代码清单3-2)​。

代码清单3-1 全1张量或全0张量

python">import tensorflow as tf
x = tf.ones(shape=(2, 1))
#←----等同于np.ones(shape=(2, 1))
print(x)
x = tf.zeros(shape=(2, 1))
#←----等同于np.zeros(shape=(2, 1))
print(x)

代码清单3-2 随机张量

python">x = tf.random.normal(shape=(3, 1), mean=0., stddev=1.)
#←----从均值为0、标准差为1的正态分布中抽取的随机张量,等同于np.random.normal(size=(3, 1), loc=0., scale=1.)
# mean的中文含义就是均值

print(x)

x = tf.random.uniform(shape=(3, 1), minval=0., maxval=1.)
#←----从0和1之间的均匀分布中抽取的随机张量,等同于np.random.uniform(size=(3, 1), low=0., high=1.)
print(x)

NumPy数组和TensorFlow张量之间的一个重要区别是,TensorFlow张量是不可赋值的,它是常量。举例来说,在NumPy中,你可以执行以下操作,如代码清单3-3所示。

代码清单3-3 NumPy数组是可赋值的

python">import numpy as np
x = np.ones(shape=(2, 2))
x[0, 0] = 0.

如果在TensorFlow中执行同样的操作(如代码清单3-4所示)​,那么程序会报错:EagerTensor object does not support item assignment(EagerTensor对象不支持对元素进行赋值)​。

代码清单3-4 TensorFlow张量是不可赋值的

python">x = tf.ones(shape=(2, 2))----程序会报错,因为张量是不可赋值的
x[0, 0] = 0.

要训练模型,我们需要更新其状态,而模型状态是一组张量。如果张量不可赋值,那么我们该怎么做呢?这时就需要用到变量(variable)​。tf.Variable是一个类,其作用是管理TensorFlow中的可变状态。要创建一个变量,你需要为其提供初始值,比如随机张量,如代码清单3-5所示。

python">>>> v = tf.Variable(initial_value=tf.random.normal(shape=(3, 1)))
>>> print(v)
array([[-0.75133973],
       [-0.4872893 ],
       [ 1.6626885 ]], dtype=float32)

变量的状态可以通过其assign方法进行修改,如代码清单3-6所示。

代码清单3-6 为TensorFlow变量赋值

python">>>> v.assign(tf.ones((3, 1)))
array([[1.],
       [1.],
       [1.]], dtype=float32)

这种方法也适用于变量的子集,如代码清单3-7所示。

代码清单3-7 为TensorFlow变量的子集赋值

python">>>> v[0, 0].assign(3.)
array([[3.],
       [1.],
       [1.]], dtype=float32)

与此类似,assign_add()和assign_sub()分别等同于+=和-=的效果,如代码清单3-8所示。

代码清单3-8 使用assign_add()

python">>>> v.assign_add(tf.ones((3, 1)))
array([[2.],
       [2.],
       [2.]], dtype=float32)

就像NumPy一样,TensorFlow提供了许多张量运算来表达数学公式。我们来看几个例子,如代码清单3-9所示。

代码清单3-9 一些基本的数学运算

python">a = tf.ones((2, 2))
b = tf.square(a)----求平方
c = tf.sqrt(a)----求平方根
d = b + c  ←----两个张量(逐元素)相加
e = tf.matmul(a, b)----计算两个张量的积(详见第2章)
e *= d  ←----两个张量(逐元素)相乘

重要的是,代码清单3-9中的每一个运算都是即刻执行的:任何时候都可以打印出当前结果,就像在NumPy中一样。我们称这种情况为急切执行(eager execution)​。

本文可运行全部代码集合,大家可以直接在装了tensorflow的python3环境下运行。

python">import tensorflow as tf
x = tf.ones(shape=(2, 1))
#←----等同于np.ones(shape=(2, 1))
print(x)
x = tf.zeros(shape=(2, 1))
#←----等同于np.zeros(shape=(2, 1))
print(x)

x = tf.random.normal(shape=(3, 1), mean=0., stddev=1.)
#←----从均值为0、标准差为1的正态分布中抽取的随机张量,等同于np.random.normal(size=(3, 1), loc=0., scale=1.)
# mean的中文含义就是均值

print(x)

x = tf.random.uniform(shape=(3, 1), minval=0., maxval=1.)
#←----从0和1之间的均匀分布中抽取的随机张量,等同于np.random.uniform(size=(3, 1), low=0., high=1.)
print(x)

import numpy as np
x = np.ones(shape=(2, 2))
x[0, 0] = 0.

print(x)

v = tf.Variable(initial_value=tf.random.normal(shape=(3, 1)))
print(v)

v.assign(tf.ones((3, 1)))
print(v)

v[0, 0].assign(3.)
print(v)

v.assign_add(tf.ones((3, 1)))
print(v)

http://www.niftyadmin.cn/n/5864028.html

相关文章

【微服务优化】ELK日志聚合与查询性能提升实战指南

网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…

Docker 高级网络配置

Docker 提供了灵活且强大的网络功能,用于管理容器之间的通信、访问控制、隔离等。通过正确配置 Docker 网络,可以优化容器之间的通信,确保应用在不同环境下的稳定性、安全性和可扩展性。 在本文中,我们将深入探讨 Docker 高级网络…

Ollama 模型交互

Ollama 提供了多种方式与模型进行交互&#xff0c;其中最常见的就是通过命令行进行推理操作。 1. 命令行交互 通过命令行直接与模型进行交互是最简单的方式。 运行模型 使用 ollama run 命令启动模型并进入交互模式&#xff1a; ollama run <model-name> 例如下载 …

【应急响应工具教程】流量嗅探工具-Tcpdump

1.工具简介 Tcpdump 是一款命令行数据包嗅探工具&#xff0c;能够直接从文件或网络接口捕获并解析数据帧。它适用于任何类 Unix 操作系统。 Tcpdump是一款功能强大的命令行数据包嗅探工具&#xff0c;支持从网络接口实时捕获或从文件解析数据包。作为Unix/Linux系统的标准网络…

Django项目设计一个简单CRUD

在Django中实现一个学生类&#xff08;Student&#xff09;的CRUD&#xff08;创建、读取、更新、删除&#xff09;操作需要几个步骤&#xff0c;包括定义模型、创建视图、设置URL、以及配置模板。以下是一个基本的实现步骤&#xff1a; 1. 创建Django项目和应用 首先&#x…

easyexcel和poi同时存在版本问题,使用easyexcel导出excel设置日期格式

这两天在使用easyexcel导出excel的时候日期格式全都是字符串导致导出的excel列无法筛选 后来调整了一下终于弄好了&#xff0c;看一下最终效果 这里涉及到easyexcel和poi版本冲突的问题&#xff0c;一直没搞定&#xff0c;最后狠下心来把所有的都升级到了最新版&#xff0c;然…

网络安全之攻防笔记--通用安全漏洞SQL注入sqlmapOraclemongodbDB2

通用安全漏洞SQL注入&sqlmap&Oracle&mongodb&DB2 数据库类型 ACCESS 特性 没数据库用户 没数据库权限 没数据库查询参数 没有高权限注入说法 暴力猜解&#xff0c;借助字典得到数据 注入方式 联合注入 偏移注入 表名列名猜解不到 偏移注入 MySQL 低权限 常…

基于Flask的短视频流量数据可视化系统的设计与实现

【Flask】基于Flask的短视频流量数据可视化系统的设计与实现&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 随着移动互联网的普及和短视频平台的兴起&#xff0c;短视频已成为人们日常生活中不…