【深度学习笔记】TensorFlow 基础

在 TensorFlow 2.0 及之后的版本中,默认采用 Eager Execution 的方式,不再使用 1.0 版本的 Session 创建会话。Eager Execution 使用更自然地方式组织代码,无需构建计算图,可以立即进行数学计算,简化了代码调试的过程。本文主要介绍 TensorFlow 的基本用法,通过构建一个简单损失函数,介绍 TensorFlow 优化损失函数的过程。

目录

1 tf.Tensor

2 tf.Variable

3 tf.GradientTape


TensorFlow 是一个用于机器学习的端到端平台。它支持以下内容:

  • 基于多维数组的数值计算(类似于 NumPy)
  • GPU 和分布式处理
  • 自动微分
  • 模型构建、训练和导出

1 tf.Tensor


        TensorFlow 用 tf.Tensor 对象处理多维数组(或张量),以下是一个 2 维张量例子:

import tensorflow as tf
x = tf.constant([[1., 2., 3.],
                 [4., 5., 6.]])
print(x)

tf.Tensor(
[[1. 2. 3.]
 [4. 5. 6.]], shape=(2, 3), dtype=float32)

tf.Tensor 对象最重要的属性是 shape 与 dtype:

  • Tensor.shape  返回张量每个维度的大小
  • Tensor.dtype   返回张量中元素的数据类型

print(x.shape)

(2, 3)

print(x.dtype)

<dtype: 'float32'>

        TensorFlow 实现了张量的标准数学运算,同时也包括为机器学习定制的运算。以下是一些示例:

x + x
5 * x
tf.transpose(x)
tf.nn.softmax(x, axis=-1)
tf.reduce_sum(x)

2 tf.Variable

        在 TensorFlow 中,模型的权重用 tf.Variable 对象存储,称为变量。

import tensorflow as tf

x = tf.Variable([0., 0., 0.])
x.assign([1, 2, 3])

<tf.Variable 'UnreadVariable' shape=(3,) dtype=float32, 
numpy=array([1., 2., 3.], dtype=float32)>

        tf.Variable 对象的数值可以改变,在 TensorFlow 2.0 中,不再使用 Session 启动计算,变量可以直接算出结果。

x.assign_add([1, 1, 1,])

<tf.Variable 'UnreadVariable' shape=(3,) dtype=float32, 
numpy=array([2., 3., 4.], dtype=float32)>

x.assign_sub([1, 1, 1])

<tf.Variable 'UnreadVariable' shape=(3,) dtype=float32, 
numpy=array([1., 2., 3.], dtype=float32)>

3 tf.GradientTape

        梯度下降法与相关算法是现在机器学习的基础。TensorFLow 实现了自动微分来计算梯度,通常用于计算机器学习模型的损失函数的梯度。

        TensorFlow 2.0 提供了 tf.GradientTape 对象,可以理解为“梯度流”,顾名思义,tf.GradientTape 是用来计算梯度用的。

        以下是一个简单的示例:

import tensorflow as tf

def f(x):
   return x**2 + 2*x - 5

x = tf.Variable(1.0)

with tf.GradientTape() as tape:
   y = f(x)
g_x = tape.gradient(y, x) # 计算 y 在 x = 1.0 处的梯度
print(g_x)

4.0

最后,构建一个简单损失函数,并使用 TensorFlow 计算最小值。

import tensorflow as tf

def loss(x):
   return x**2 - 10*x + 25

x = tf.Variable(1.0) # 随机初始值

losses = [] # 记录损失函数值
for i in range(100):
   with tf.GradientTape() as tape:
      one_loss = loss(x)
   lossed.append(one_loss)
   grad = tape.gradient(one_loss, x)
   x.assign_sub(0.1 * grad) # 执行一次梯度下降法

print("The mininum of loss function is: ")
tf.print(x)

The mininum of loss function is: 

4.99999905

# 可视化优化过程
import matplotlib
from matplotlib import pyplot as plt

matplotlib.rcParams['figure.figsize'] = [8, 5]

plt.figure()
plt.plot(losses)
plt.title('Loss vs training iterations')
plt.xlabel('iterations')
plt.ylabel('loss')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/69083.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

KAFKA第二课之生产者(面试重点)

生产者学习 1.1 生产者消息发送流程 在消息发送的过程中&#xff0c;涉及到了两个线程——main线程和Sender线程。在main线程中创建了一个双端队列RecordAccumulator。main线程将消息发送给RecordAccumulator&#xff0c;Sender线程不断从RecordAccumulator中拉取消息发送到K…

泰国的区块链和NFT市场调研

泰国的区块链和NFT市场调研 基本介绍 参考&#xff1a; https://zh.wikipedia.org/zh-hans/%E6%B3%B0%E5%9B%BD参考&#xff1a; https://hktdc.infogram.com/thsc–1h7k2303zo75v2x zz制度&#xff1a; 君主立宪制&#xff08;议会制&#xff09; 国王&#xff1a; 玛哈哇集拉…

基于vue3+webpack5+qiankun实现微前端

一 主应用改造&#xff08;又称基座改造&#xff09; 1 在主应用中安装qiankun(npm i qiankun -S) 2 在src下新建micro-app.js文件&#xff0c;用于存放所有子应用。 const microApps [// 当匹配到activeRule 的时候&#xff0c;请求获取entry资源&#xff0c;渲染到containe…

JVM内存管理

文章目录 1、运行时数据区域1.1 程序计数器&#xff08;线程私有&#xff09;1.2 JAVA虚拟机栈&#xff08;线程私有&#xff09;1.3 本地方法栈1.4 Java堆&#xff08;线程共享&#xff09;1.5 方法区&#xff08;线程共享&#xff09;1.6 直接内存&#xff08;非运行时数据区…

拥抱AIGC浪潮,亚信科技将如何把握时代新增量?

去年底&#xff0c;由ChatGPT带起的AIGC浪潮以迅雷不及掩耳之势席卷全球。 当互联网技术的人口红利逐渐消退之际&#xff0c;AIGC就像打开通用人工智能大门的那把秘钥&#xff0c;加速开启数智化时代的到来。正如OpenAI CEO Sam Altman所言&#xff1a;一个全新的摩尔定律可能…

560. 和为 K 的子数组

思路 本题的主要思路为创建一个哈希表记录每个0~i的和&#xff0c;在遍历这个数组的时候查询有没有sum-k的值在哈希表中&#xff0c;如果有&#xff0c;说明有个位置到当前位置的和为k。   有可能不止一个&#xff0c;哈希表负责记录有几个sum-k&#xff0c;将和记录下来。这…

10个问题,带你重新认识smardaten企业级无代码

很多新客户在接触数睿数据&#xff0c;或者在初步认识smardaten企业级无代码的时候&#xff0c;大家更多地以为只是个普通的无代码工具。在交流过程中&#xff0c;大家也提出了很多疑惑&#xff1a; smardaten无代码平台包括哪些能力&#xff1f; 适合开发哪些应用&#xff1f…

AI自动驾驶

AI自动驾驶 一、自动驾驶的原理二、自动驾驶的分类三、自动驾驶的挑战四、自动驾驶的前景五、关键技术六、自动驾驶的安全问题七、AI数据与自动驾驶八、自动驾驶的AI算法总结 自动驾驶技术是近年来备受关注的热门话题。它代表了人工智能和机器学习在汽车行业的重要应用。本文将…

web集群学习:源码安装nginx配置启动服务脚本、IP、端口、域名的虚拟主机

目录 1、源码安装nginx&#xff0c;并提供服务脚本。 2、配置基于ip地址的虚拟主机 3、配置基于端口的虚拟主机 4、配置基于域名的虚拟主机 1、源码安装nginx&#xff0c;并提供服务脚本。 1、源码安装会有一些软件依赖 &#xff08;1&#xff09;检查并安装 Nginx 基础依赖…

PHP智能人才招聘网站mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP智能人才招聘网站 是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 下载地址 https://download.csdn.net/download/qq_41221322/88199392 视频演示 PH…

TextBrewer:融合并改进了NLP和CV中的多种知识蒸馏技术、提供便捷快速的知识蒸馏框架、提升模型的推理速度,减少内存占用

TextBrewer:融合并改进了NLP和CV中的多种知识蒸馏技术、提供便捷快速的知识蒸馏框架、提升模型的推理速度&#xff0c;减少内存占用 TextBrewer是一个基于PyTorch的、为实现NLP中的知识蒸馏任务而设计的工具包&#xff0c; 融合并改进了NLP和CV中的多种知识蒸馏技术&#xff0…

GB28181智慧可视化指挥控制系统之执法记录仪设计探讨

什么是智慧可视化指挥控制系统&#xff1f; 智慧可视化指挥控制平台通过4G/5G网络、WIFI实时传输视音频数据至指挥中心&#xff0c;特别是在有突发情况时&#xff0c;可以指定一台执法仪为现场视频监控器&#xff0c;实时传输当前画面到指挥中心&#xff0c;指挥中心工作人员可…

支持对接鸿蒙系统的无线模块及其常见应用介绍

近距离的无线通信得益于万物互联网的快速发展&#xff0c;基于集成部近距离无线连接&#xff0c;为固定和移动设备建立通信的蓝牙技术也已经广泛应用于汽车领域、工业生产及医疗领域。为协助物联网企业终端产品能快速接入鸿蒙生态系统&#xff0c;SKYLAB联手国产芯片厂家研发推…

VR家装提升用户信任度,线上体验家装空间感

近些年&#xff0c;VR家装逐渐被各大装修公司引入&#xff0c;VR全景装修的盛行&#xff0c;大大增加了客户“所见即所得”的沉浸式体验感&#xff0c;不再是传统二维平面的看房模式&#xff0c;而是让客户通过视觉、听觉、交互等功能更加真实的体验家装后的效果。 对于传统家装…

造个轮子-任务调度执行小框架-任务执行器代理实现

文章目录 前言执行器代理代理对象任务清单代理对象任务清单执项对象处理handler对象状态对象代理工厂任务清单代理工厂清单任务项代理工厂总结前言 不知道为啥,今天好像学不进去,没办法,那就继续编码吧。那么今天的话,加更一篇文章,那就是咱们这个任务执行器的实现。先前…

opencv基础57-模板匹配cv2.matchTemplate()->(目标检测、图像识别、特征提取)

OpenCV 提供了模板匹配&#xff08;Template Matching&#xff09;的功能&#xff0c;它允许你在图像中寻找特定模板&#xff08;小图像&#xff09;在目标图像中的匹配位置。模板匹配在计算机视觉中用于目标检测、图像识别、特征提取等领域。 以下是 OpenCV 中使用模板匹配的基…

Java SPI介绍

SPI Java SPI : Service Provider Interface 是Java平台提供的一种机制&#xff0c;用于动态的加载和扩展功能的机制&#xff0c;它为框架和库提供了一种松耦合的扩展方式&#xff0c;核心是解耦。 例如JDBC驱动&#xff0c;日志框架&#xff0c;等应用&#xff0c;它为开发…

Linux——基础IO(1)

目录 0. 文件先前理解 1. C文件接口 1.1 写文件 1.2 读文件 1.3 输出信息到显示器 1.4 总结 and stdin & stdout & stderr 2. 系统调用文件I/O 2.1 系统接口使用示例 2.2 接口介绍 2.3 open函数返回值 3. 文件描述符fd及重定向 3.1 0 & 1 & 2 3.2…

记录--前端重新部署如何通知用户

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 1. 场景 前端构建完上线&#xff0c;用户还停留还在老页面&#xff0c;用户不知道网页重新部署了&#xff0c;跳转页面的时候有时候js连接hash变了导致报错跳不过去&#xff0c;并且用户体验不到新功能…

SAP Fiori 问题收集

事务代码篇 启动工作台&#xff1a;/N/UI2/FLP 错误日志&#xff1a; /n/IWFND/ERROR_LOG 服务清单&#xff1a; /n/IWFND/MAINT_SERVICE 创建语义对象&#xff1a;/N/UI2/SEMOBJ 创建目录&#xff1a;/N/UI2/FLPD_CONF&#xff08;cross-client&#xff09;或 /N/UI2…