从零开始学TensorFlow【什么是TensorFlow?】

从零开始的TensorFlow入门指南:构建第一个模型并可视化训练过程 当谈到深度学习框架时,TensorFlow是最流行的之一。它是一个由Google开发的开源框架,被广泛应用于图像识别、语音识别、自然语言处理和强化学习等领域。本篇文章将介绍TensorFlow的基本概念和入门步骤,帮助初学者快速掌握TensorFlow。 一、TensorFlow基础概念TensorFlow是一个用于构建和训练机器学习模型的框架。它主要包括以下几个核心概念:张量(Tensor):张量是TensorFlow中的基本数据类型,可以看作是一个n维数组。例如,标量是一个零维张量,向量是一维张量,矩阵 阅读详情

 

前言

只有光头才能变强。

文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y

TensorFlow是什么意思?Tensor?Flow?这篇文章介绍TensorFlow一些最基础的知识。

一、Tensor介绍

在介绍之前,首先要记住一个结论:TensorFlow使用Tensor来表示数据

接着我们来看看什么是Tensor,在官网的文档中,Tensor被翻译成”张量“。其中也给出了一个定义:

张量是对矢量和矩阵向潜在的更高维度的泛化,TensorFlow 在内部将张量表示为基本数据类型的n维数组。

不知道你们看完这句话有啥感受,反正我当时就看不懂,啥是”张量“?。于是,我就跑去知乎里边用关键字搜了一下:”张量是什么“。果真给我搜到了相关的问题:《怎么通俗地理解张量?》

我本以为通过知乎,就可以通俗易懂地理解什么是张量,能给我一个清晰的认识。殊不知,大多数答主都在回答在物理和数学中张量的定义,随后贴出了一堆我看不懂的公式。其中,也看到了一种相对通俗易懂的定义:

一个量, 在不同的参考系下按照某种特定的法则进行变换, 就是张量.

把所有答主的回答都阅读了一遍,看完就更加抽象了。再回到官方文档中,看看官方介绍张量的例子,貌似有点懂了。

目前为止我们有两个结论:

我再翻译一下上面的两句话:在TensorFlow所有的数据都是一个n维的数组,只是我们给它起了个名字叫做张量(Tensor)

中间折腾了一大堆,实际上还是将最开头的结论和官方的定义再翻译成自己觉得好理解的话…但很多时候,学习就这么一个过程。

1.1Tensor的基础

从上面我们已经得知,Tensor(张量)实际上就是一个n维的数组。这就延伸了几个的术语:

1.1.1阶(秩)

其实上,阶就是平时我们所说的维数。

以前在写Java的时候,可能一般接触到的都是二维的,但在机器学习上就很可能有很高的维度,那维数我们怎么数?很简单,我们数括号就行了。举个例子,我们可能会看到有下面的一个数组输出形式:

[[[9 6]  [6 9]  [8 8]  [7 9]] [[6 1]  [3 5]  [1 7]  [9 4]]]6]
  [6 9]
  [8 8]
  [7 9]]
 [[6 1]
  [3 5]
  [1 7]
  [9 4]]]

我们直接看第一个括号到第一个数字,有多少个括号就知道了。[[[9可以发现有3个括号,那这个就是一个三维的数组,它的阶(秩)就是3

1.1.2形状

张量的形状可以让我们看到每个维度中元素的数量。

比如我们在Java中创建出一个二维的数组:int [][] array = new int[3][4],我们就可以知道这个数组有三行有四列。但如果我们创建出一个多维的数组,单单只用行和列就描述不清了。所以,在TensorFlow一般我们会这样描述:

如果我们要打印上面数组的形状时,我们可以得到这样的结果:shape = (3,4)。我们再看看第一篇写”机器学习HelloWorld“的时候,再来看看当时打印的结果:shape = (60000, 28, 28)。通过shape我们就可以得到一些信息:

那我们如果拿到一个数组,怎么通过肉眼看他的shape呢?

比如说:m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]],这个很简单,一眼就可以看出这个是一个二维数组(矩阵),有三行三列。所以shape的结果应该是(3,3)

再来看一个:t = [[[2], [4], [6]], [[8], [10], [12]], [[14], [16], [18]]],从多个括号上我们可以看出,这是三维的。我们先把最外层括号去掉得到的结果是[[2], [4], [6]], [[8], [10], [12]], [[14], [16], [18]]

Ok,到这一步,我们可以理解成有三个子数组,于是我们的shape可以先写成shape(3,?,?)

随后,我们继续把外层的括号去除,得到这样的结果:[2], [4], [6],也是有三个元素,于是我们的shape就可以填成shape(3,3,?)

最后,再把括号去掉,我们可以发现只有一个元素,于是最后的结果就是shape(3,3,1)

我们可以看下图来巩固一下上面所说的概念:

640?wx_fmt=png
例子
1.1.3 Tensor数据类型

TensorFlow 在内部将张量表示为基本数据类型的 n维数组,没错的。在一个数组里边,我们总得知道我们的存进去的数据究竟是什么类型。

Tensor的数据类型如下所示:

640?wx_fmt=png
Tenor的数据类型

二、特殊的张量

特殊的张量由一下几种:

这次,我们先来讲讲前三种(比较好理解),分别是变量、常量和占位符。

2.1 常量

常量就是常量的意思,一经创建就不会被改变。(相信大家还是能够理解的)

在TensorFlow中,创建常量的方式十分简单:

a = tf.constant(2)b = tf.constant(3)
b = tf.constant(3)

2.2变量

变量也挺好理解的(就将编程语言的概念跟这里类比就好了)。一般来说,我们在训练过程中的参数一般用变量进行存储起来,因为我们的参数会不停的变化。

在TensorFlow创建变量有两种方式:

# 1.使用Variable类来创建# tf.random_normal 方法返回形状为(1,4)的张量。它的4个元素符合均值为100、标准差为0.35的正态分布。W = tf.Variable(initial_value=tf.random_normal(shape=(1, 4), mean=100, stddev=0.35), name="W")b = tf.Variable(tf.zeros([4]), name="b")# 2.使用get_variable的方式来创建my_int_variable = tf.get_variable("my_int_variable", [1, 2, 3], dtype=tf.int32,  initializer=tf.zeros_initializer)
# tf.random_normal 方法返回形状为(1,4)的张量。它的4个元素符合均值为100、标准差为0.35的正态分布。
W = tf.Variable(initial_value=tf.random_normal(shape=(1, 4), mean=100, stddev=0.35), name="W")
b = tf.Variable(tf.zeros([4]), name="b")

# 2.使用get_variable的方式来创建
my_int_variable = tf.get_variable("my_int_variable", [1, 2, 3], dtype=tf.int32,
  initializer=tf.zeros_initializer)

值得注意的是:当我们创建完变量以后,我们每次使用之前,都需要为其进行初始化!

tf.global_variables_initializer()

2.3占位符

我最早接触占位符这个概念的时候是在JDBC的时候。因为SQL需要传入的参数才能确定下来,所以我们可能会写出这样的SQL语句:select * from user where id =?

同样地,在TensorFlow占位符也是这么一个概念,可能需要等到运行的时候才把某些变量确定下来,于是我们就有了占位符。

在TensorFlow使用占位符也很简单:

# 文件名需要等到运行的时候才确定下来train_filenames = tf.placeholder(tf.string, shape=[None])#  ..省略一堆细节# 运行的时候,通过feed_dict将占位符具体的值给确定下来feed_dict={train_filenames: training_filenames}
train_filenames = tf.placeholder(tf.string, shape=[None])

#  ..省略一堆细节
# 运行的时候,通过feed_dict将占位符具体的值给确定下来
feed_dict={train_filenames: training_filenames}

上面的东西说白了在编程语言中都是有的,只是语法变了而已。

三、Flow?介绍图和节点

我们将Flow翻译成中文:流,所以现在是Tensor流?

其实,在TensorFlow中,使用图 (graph) 来表示计算任务。其实TensorFlow默认会给我们一张空白的图,一般我们会叫这个为”数据流图“。数据流图由有向边和节点组成,在使用TensorFlow的时候我们会在图中创建各种的节点,而Tensor会在这些节点中流通。所以,就叫做TensorFlow

那有人就会好奇,我们执行什么操作会创建节点呢?在TensorFlow中,节点的类型可以分为三种:

看到这里的同学,可能就反应过来了:原来在上面创建的变量、常量和占位符在TensorFlow中都会生成一个节点!对于这类的操作Operation(行为)一般大家会简说成op

所以,op就是在TensorFlow中所执行的一个操作统称而已(有可能是创建变量的操作、也有可能是计算的操作)。在TensorFlow的常见的op有以下:

640?wx_fmt=png
Tensorflow常见的op

其实说白了就是TensorFlow会给我们一张空白的数据流图,我们往这张数据流图填充(创建节点),从而实现想要效果。

我们来看看官方的给出数据流图的gif,加深下印象。

640?wx_fmt=gif
数据流图

四、啥是session?

TensorFlow程序通常被组织成一个构建阶段和执行阶段. 在构建阶段, op的执行步骤被描述成一个图. 在执行阶段, 使用会话执行执行图中的op。

说白了,就是当我们在编写代码的时候,实际上就是在将TensorFlow给我们的空白图描述成一张我们想要的图。但我们想要运行出图的结果,那就必须通过session来执行。

举个小例子:

import tensorflow as tf# 创建数据流图:y = W * x + b,其中W和b为存储节点,x为数据节点。x = tf.placeholder(tf.float32)W = tf.Variable(1.0)b = tf.Variable(1.0)y = W * x + b# =========如果不使用session来运行,那上面的代码只是一张图。我们通过session运行这张图,得到想要的结果with tf.Session() as sess:    tf.global_variables_initializer().run() # Operation.run    fetch = y.eval(feed_dict={x: 3.0})      # Tensor.eval    print(fetch)   # fetch = 1.0 * 3.0 + 1.0as tf
# 创建数据流图:y = W * x + b,其中W和b为存储节点,x为数据节点。
x = tf.placeholder(tf.float32)
W = tf.Variable(1.0)
b = tf.Variable(1.0)
y = W * x + b

# =========如果不使用session来运行,那上面的代码只是一张图。我们通过session运行这张图,得到想要的结果
with tf.Session() as sess:
    tf.global_variables_initializer().run() # Operation.run
    fetch = y.eval(feed_dict={x: 3.0})      # Tensor.eval
    print(fetch)   # fetch = 1.0 * 3.0 + 1.0

4.1 Fetch是啥?

Fetch就时候可以在session.run的时候传入多个op(tensor),然后返回多个tensor(如果只传入一个tensor的话,那就是返回一个tensor)

4.2tensor.eval()和Operation.run()

有的同学在查阅资料的时候,发现可能调用的不是session.run,而是tensor.eval()和Operation.run()。其实,他们最后的调用的还是session.run。不同的是session.run可以一次返回多个tensor(通过Fetch)。

640?wx_fmt=png
最后实际还是掉session.run

最后

曾经看到一段话总结得不错:

TensorFlow 是一个编程系统, 使用图来表示计算任务. 图中的节点被称之为 op (operation 的缩写). 一个 op 获得 0 个或多个 Tensor, 执行计算, 产生 0 个或多个 Tensor. 每个 Tensor 是一个类型化的多维数组.

这篇文章简单讲了TensorFlow是啥意思以及一些基础的概念。但我也只是简单以我的理解方式来说了一些常见概念。里头的知识点还是比较多的(比如创建变量的时候一般我们会指定哪些参数….),这些就交由大家去官网、博客、书籍去学习了。

我相信,只要了解了这些概念,那学习一定可以事半功倍!

下一篇TensorFlow文章敬请期待~

参考资料:

乐于输出干货的Java技术公众号:Java3y。公众号内有200多篇原创技术文章、海量视频资源、精美脑图,不妨来关注一下!

640?wx_fmt=jpeg
帅的人都关注了
推荐阅读: 漫话:如何给女朋友解释什么是反向代理?

有帮助?好看!转发! 640
TensorFlow 基本概念与使用场景 TensorFlow是一个开源的深度学习框架,由 Google Brain 团队开发和维护。它用于构建和训练机器学习模型,尤其是深度神经网络。TensorFlow 支持多种平台,包括桌面、移动设备、Web 和云端,并且具有良好的可扩展性,可以在不同的硬件上运行,如 CPU、GPU,甚至 TPU(Tensor Processing Unit,Google 定制的硬件加速器)。TensorFlow 的核心概念是张量(Tensor),它是表示数据的基本单位。 阅读详情

相关推荐

单片机控制板故障排查六步法:解决上电无反应、死机与现场抽风

嵌入式系统开发中,单片机控制板的可靠性往往决定整个设备的成败。工程师常遇到上电完全无反应、运行中突然死机、现场间歇性“抽风”三类棘手问题,看似成因各异,实则共享一套系统化的排查逻辑。本文从最基础的电源供电链路入手,逐步深入到复位电路、晶振起振、最小系统运行验证、外设接口与IO驱动能力,再专项分析运行中死机的软件与硬件诱因,最后攻克现场环境下接触不良、电磁干扰、共地回流与温漂等顽固故障。整个排查过程强调先记录现象再动手测量,以概念—原理—技术价值—应用场景的工程思维,帮助开发者快速缩小故障范围,将偶发的“玄学

weixin_34050005的博客 235

TensorFlow什么意思?TensorFlow是什么?

对于jetty你都了解吗?那么jetty究竟是什么东西?它是什么意思?下面就让我们一起通过下面的文章来了解一下jetty吧。 jetty是什么? 其实,jetty就是一个开源的servlet容器。 jetty为基于java的web容器,例JSP和servlet提供运行环境。 jetty是用java语言编写的,它的API以一组JAR包的形式发布。 开发者可以将Jetty容器实例化成一个对象,这样能够为一些独立运行的java应用提供网络和web连接。 对于jetty你都了解了吧!那么下面就继续来一起

gp16674213804的博客 5122

晶圆测试厂wafer map管理建议

按照Recipe设定bin定义 应有版本管理概念,一般使用最新版本做为活动版本即可 Bin明细中应包含 BinID、BinCode、BinName、BinType、BinColor、Description BinID可使用数字类型 BinCode可参照实际机台的Bin,用于匹配 有些公司也将BinID、BinCode理解为SBin和HBin 即 Software Bin & Hardware Bin 一般也将BinID对应到客户的Bin BinType

凯神做开发 1万+

TensorFlow是什么(转)

TensorFlow 是一个开源的、基于 Python 的机器学习框架,它由 Google 开发,并在图形分类、音频处理、推荐系统和自然语言处理等场景下有着丰富的应用,是目前最热门的机器学习框架。 除了 Python,TensorFlow 也提供了 C/C++、Java、Go、R 等其它编程语言的接口。 任何曾经试图在Python中只利用 NumPy 编写神经网络代码的人都知道那是多么麻烦。编写一个简单的一层前馈网络的代码尚且需要 40 多行代码,当增加层数时,编写代码将会更加困难,执行时间也会更长..

qq_42731532的博客 9518

SAP ALV表格F4搜索帮助不触发DATA_CHANGE?3步排查搞定

本文针对SAP ALV表格中F4搜索帮助选择值后,DATA_CHANGE事件不触发的经典问题,提供了三步系统性排查方法。核心在于理解F4值回写机制,并需在事件处理中手动填充修改表以通知ALV控件数据变更,从而确保后续校验、自动计算等依赖DATA_CHANGE的逻辑能正常执行。

c2d3e4f的博客 1133

从零开始玩转机械臂:用Matlab+Robotics Toolbox实现四自由度机械臂运动仿真

本文详细介绍了如何利用Matlab及其Robotics Toolbox工具箱,从零开始构建并仿真一个四自由度机械臂。通过D-H参数建模、正向运动学验证、交互式操控以及轨迹规划等实践步骤,帮助初学者在虚拟环境中直观理解机器人运动学核心概念,为后续硬件实现奠定坚实基础。

weixin_29055699的博客 325

什么是tensorflow

一、前言还是到了深度学习这一模块,再不学习一下真的是跟不上浪潮了,在这还是要抓住浪潮的尾巴。关于 TensorFlowTensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间像话联系的多维数据组,即张量(tensor)。它灵活的架构让你可以在多种平台上展开计算,例如台式计算机中的一

秋水顽石 4202

Android存储方案对比(SharedPreferences 、 MMKV 、 DataStore)

简介:本文介绍了Android开发中常用的键值对存储方案,包括SharedPreferences、MMKV和DataStore,并且对比了它们在性能、并发处理、易用性和稳定性上的特点。通过实际代码示例,帮助开发者根据项目需求选择最适合的存储方案,提升应用性能和用户体验。

LiuYong_01的博客 1789

调用栈溢出排查指南:从原理到Call Stack Diffs实战

在JavaScript开发中,调用栈(Call Stack)是一本记录函数调用顺序的实时台账,也是排查递归、循环引用等运行时问题的核心线索。当程序出现Maximum call stack size exceeded这类栈溢出错误时,往往意味着某个递归缺少终止条件,或数据结构中存在环状引用,导致函数帧无限压栈。理解调用栈的工作原理,有助于开发者快速定位性能瓶颈与异常递归。Call Stack Diffs是一种比“看栈”更高效的“比栈”技巧,通过对比正常与异常时刻的栈快照,差异帧能直接暴露问题入口。结合Vue中

weixin_33924770的博客 361

嵌入式开发避坑指南:手把手教你用STM32CubeMX配置W9825G6KH SDRAM(含时序参数详解)

本文详细介绍了如何使用STM32CubeMX配置W9825G6KH SDRAM,包括硬件连接检查、CubeMX初始化步骤、时序参数优化及稳定性问题排查。通过实测波形分析和案例分享,帮助开发者避免常见配置错误,提升嵌入式系统性能与稳定性。

weixin_42542669的博客 197

WS2812B非标准通信协议:手把手实现精准时序控制

详解WS2812B的精准时序实现原理,剖析其非标准通信协议的关键细节。通过实际操作指导,帮助开发者稳定驱动ws2812b灯带,解决常见时序偏差问题,提升项目显示效果与响应一致性。

weixin_42584586的博客 585

从零开始学TensorFlow

从零开始学TensorFlow 前言 只有光头才能变强。 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 最近在学习TensorFlow的相关知识,了解了TensorFlow一些基础的知识,现在周末有空了,就写写一些笔记,记录一下自己的成长~ 总的来说,TensorFlo...

weixin_34414650的博客 411

ArcGIS 10.8软件安装包免费下载及安装教程

ArcGIS 10.8安装教程

qq_44894692的博客 2万+

tensorflow生成常量_从零开始学TensorFlow【什么是TensorFlow?】

前言只有光头才能变强。文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3yTensorFlow是什么意思?Tensor?Flow?这篇文章介绍TensorFlow一些最基础的知识。一、Tensor介绍在介绍之前,首先要记住一个结论:TensorFlow使用Tensor来表示数据接着我们来看看什么是Tensor,在官网的文...

weixin_39611070的博客 96

Ollama最新快速上手指南:从安装到精通本地AI模型部署

想让Ollama跑你的"私房模型"?三种主流格式全支持,总有一款适合你!GGUF格式(推荐新手首选)创建Modelfile文件:执行创建命令:运行你的专属模型:PyTorch/Safetensors格式(适合进阶玩家)先用库测试模型能否正常加载确保模型结构完整后再导入Ollama官方文档有详细转换指南专业小贴士GGUF格式最轻量,PyTorch最灵活,Safetensors最安全遇到问题?试试用llama.cpp进行格式转换7B参数模型推荐使用q4_0量化级别想让AI用马里奥。

全世界的博客 2309

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

从零开始学 TensorFlow (1)(TensorFlow安装 +TensorFlow中定义数据流图)

本笔记是基于 《TensorFlow 实践与智能系统》而写 注:本书的源码地址https://github.com/backstopmedia/tensorflowbook点击可下载。 目录 1.TensorFlow 的安装 2.构建第一个TensorFlow数据流图(附含解决tensorboard无法启动和显示问题:No dashboards are active for t...

wzy@jinan 520

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

“Tensorflow2.0深度学习从零开始学”真的从零开始?

首先,这是一个书评,不是一个问题的回答。 “从零开始”,“从小白到精通”一类的书籍从名字上本是一个好的意思,带人入门,一个不粗的出发点。本世纪初的时候还好,但是好像近年内被人用烂了,一种见怪不怪的感觉。 买了清华的这本书之后,确实在tensorflow从1.X转为2.X的过程中受罪匪浅,本带着再从头学一遍的想法买了这本书,但给真想从零开始的娃子们一个建议,可以再看看其他书。 书写的不好吗?不敢说这个话,我自己的水平不够。但书不适合入门吗?从零开始的话,我个人不建议,你想试试的话可能会一脸懵。也许作者的co

xiaokeyoulile的专栏 688

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

从零开始学深度学习一:TensorFlow基础

本课程笔记来源于深享网课程《深度学习理论与实战TensorFlow》 一、TensorFlow的介绍 TensorFlow是一种利用数据流图进行数值计算的开源软件库。图中的节点表示数学运算,而图中的边则代表在这些节点之间传递的多维数组(张量)。这种灵活的架构可让你使用一个API将计算工作部署到桌面设备、服务器或者移动设备的一个或多个CPU 、GPU上。 简单的说:TensorFlow是一个深...

Yolo的博客 1806

从零开始学TensorFlow【01-搭建环境、HelloWorld篇】

前言只有光头才能变强。文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3yTensorFlow lo...

3y 853
上一篇: 漫话:如何给女朋友解释什么是反向代理?
下一篇: 一文读懂一台计算机是如何把数据发送给另一台计算机的
Java3y
Java3y 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 1万+粉丝 509原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值