Tensorflow解说
liuian 2024-11-28 00:45 19 浏览
TensorFlow简介
本节将从五个方面对 TensorFlow 进行一个简单的介绍。包括 TensorFlow 是什么、为什么选择TensorFlow、TensorFlow 的发展、TensorFlow 能干什么以及 TensorFlow 的核心理念。
1. 什么是 TenosrFlow
TensorFlow 是一个开源软件库,用于各种感知和语言理解任务的机器学习。—— Wiki 百科
这种过于官方化的定义可能比较难于理解,我们在这里给出一个比较容易理解的解释:TensorFlow 是一个开源的机器学习的框架,我们可以使用 TensorFlow 来快速地构建神经网络,同时快捷地进行网络的训练、评估与保存。
也正是因为 TensorFlow 是一个开源的软件库,因此只要我们安装了 TensorFlow,我们就可以使用import 的方式来引入
import tensorflow as tf
2. 为什么选择 TensorFlow 以及优缺点
谈到为什么选择 TensorFlow,有很多同学就会问“为什么不使用 PyTorch?”、“为什么不自己实现网络而必须使用框架呢?”等等一系列问题。
首先我们回答“为什么不自己去实现网络结构而必须使用框架”的问题:
实际上如果有能力实现神经网络结构,我们完全可以自己动手实现我们所需要的神经网络,但是这样会带来一个问题:工作量太大,我们会把我们大部分的精力花费在底层的构建而不是主要的模型的构建上。
在当下的潮流之中,使用框架是大势所趋,使用框架能够帮助我们节省很多的底层的、繁琐的、容易出错的工作。比如在 Web 开发之中会使用 Django 和 Spring Boot 等框架,在桌面开发中会使用 MFC、QT 等框架,而在机器学习领域我们可以选择使用 TensoFlow 框架。
另外通过使用框架,我们可以把我们的精力更多的放在上层的模型的构建之上,一方面可以帮助我们专注于高层次的工作,另一方面又可以帮助我们避免底级的一些错误。
现在我们可以回答第二个问题,为什么不使用其他的机器学习框架?
说到这里我们不得不说一下 TensorFlow 的优点,相比于其他的机器学习框架,Tensorflow 框架是最适用于工业部署的一个机器学习框架,换句话说,TensorFlow 非常适用于在生产环境中进行应用。下面我们来细数一下 TensorFlow 的优点。
- 整个项目开源;
- 文档非常全面而且包含中文教程,学习成本比较低;
- 其内部含有很多高阶神经网络API,我们可以用一个语句来生产一个网络;
- 使用其内部的TensorFlow Service可以实现快速上线部署;
- 得益于高阶API,使用TensorFlow进行神经网络开发非常迅速;
- 内部内置TesnorBoard工具,可以很好的进行可视化工作;
- 对移动设备的支持非常友好;
- TensorFlow内部内置分布式训练工具,开源很方便地进行分布式训练。
讨论了这么多优点,TensorFlow 就没有缺点吗?当然有,TensorFlow 也有一些显而易见的缺点:
- TensorFlow程序的调试较为困难,我们不能深入其内部进行调试;
- TensorFlow的许多高阶API导致我们修改我们自己的模型比较困难(相对而言);
- TensorFlow1.x与TensorFlow2.x的差别比较大,以前的代码迁移比较困难。
总结来说,如果你想进行神经网络的快速构建、训练与部署,那么 TensorFlow 是你非常好的选择,但是如果你想从事一些科研的方面的工作,那么 TensorFlow 可能并没有 Pytorch 那么容易驾驭。
3. TensoFlow的发展
很多人都知道 TensorFlow 是从 1.x 版本发展到 2.x 版本的,而且目前网络上很多 TensorFlow 的教程都还停留在 TensorFlow1.x 阶段。在这里,我便带领大家回顾一下 TensorFlow 的发展历程:
- 从 2010 年开始,谷歌大脑团队便在其内部使用 DistBelief 框架进行机器学习的相关工作,后来经过不断地简化与重构逐渐形成了 TesnorFlow,这便是 TensorFlow 的前身,但是此时的 TensorFlow还没有开源;
- 2015 年,年轻的 TensorFlow 正式开源,此时的 TensorFlow 依然处在 0.x 的非正式版本;
- 一直到 2016 年 12 月期间,TensorFlow 逐渐支持了分布式、移动设备 与Windows 系统;
- 2017 年,TensorFlow 正式发布了 1.0.0 版本,由此 TensorFlow 正式版发布;
- 直到 2019 年期间,TensorFlow 逐步加入了 TPU、张量处理单元等工具;
- 2019 年 10 月,TensorFlow2.0 正式发布,这也标志着 TensorFlow 进入了 2.0 时代。
在当前,TensorFlow 的最新稳定版本为 2.2 版本。
由于 TensorFlow1.x 与 TensorFlow2.x 的差别较大,因此在我们的学习与使用当中,我们应当首先学习TensorFlow2.x 版本。
相比于TensorFlow1.x,TensorFlow2.x 最大的优点就是加入了 Keras,而TensorFLow 也是默认采用 Eager 模式来构建我们的模型,这对于一些初学者来说是巨大的福音,而这在TensorFlow1.x时代是没有办法实现的。
依托于谷歌强大的影响与号召力,TenorFlow 的用户群体非常巨大,而且使用 TensorFlow 得到的训练结果非常优秀,对于机器学习的初学者来说,这确实是一件不可多得的珍宝。
4. TensorFlow能干什么
其实这个问题在前面的概念中已经涉及了,TensorFlow主要负责机器学习的每一个步骤,包括:
- 模型的构建;
- 模型的训练;
- 模型的保存与加载;
- 模型的评估;
- 使用加速器提升性能;
- 在生产环境中部署网络;
- 对模型的数据进行可视化(TensorBoard);
- 其他功能。
通过这样的梳理我们可以发现,TensorFlow 可以满足我们在机器学习中的从模型构建到模型的部署的绝大部分的工作需求
5. TensorFlow的核心理念
前面介绍了这么多,我们现在可以深入 TensorFlow 内部来简单了解一下 TensorFlow 的核心理念。
简单来说, TensorFlow 的核心理念包括计算图与张量(Tensor)
5.1 计算图
在 TensorFlow 中,我们首先构建模型,TensorFLow会根据我们的模型来构建一个计算图,然后TensorFLow 会在该计算图中进行相应的运算、迭代与求梯度等操作,从而得到我们最终想要的结果。
下面是一个 TensorFlow 模型的计算图,目前诸位同学可以将其理解为模型图或者数据流动图
该图为在 TensorBoard 之中得到的计算图,其中的节点表示运算或者网络层,而线条表示数据流动。
5.2 张量
张量(Tensor)就是 TensorFlow 的名字的由来之一,TensorFLow 顾名思义就是张量流动的意思,由此可见张量为 TensorFlow 的最核心的概念之一。
张量在TensorFLow之中以数组的形式存储,张量的主要组成要素包括:
- 名称(name);
- 形状(shape);
- 类型(dtype)。
简单的理解,我们可以将张量看作多维数组,因为是多维数组,因此可以包含三维或者三维以上的维度,对于初学者来说可能不是特别友好。
在 TensorFLow 之中我们可以很轻松的构建一个张量,比如以下代码:
x = tf.ones((64, 28, 28, 3))
由此我们构建了一个思维张量,他的第一维是 64 个维度,第二维与第三维都是 28 个维度,第四维是3 个维度。
对于二维张量,我们可以理解为一个平面;对于三位数据,我们可以理解为一个空间;而对于四维数据我们可以理解为一个在三维空间的外面又增加了一个维度;五维张量则是又增加一个维度......
在TensorFlow之中我们一般将第一维数据作为批大小来处理(Batch_Size),也就是一批数据中含有多少个样本子数据。更一般的,在不确定批大小的情况下,我们直接将第一维设置为 None,比如:
x = tf.ones((None, 28 ,28, 3))
总结
TensorFlow 是一个相对比较完整的机器学习框架,无论是对于初学者还是开发人员来说都是非常不错的选择。如果想要入门机器学习或者在机器学习方面有所深造,那么 TensorFLow 是非常不错的选择。
相关推荐
- 2023年最新微信小程序抓包教程(微信小程序 抓包)
-
声明:本公众号大部分文章来自作者日常学习笔记,部分文章经作者授权及其他公众号白名单转载。未经授权严禁转载。如需转载,请联系开百。请不要利用文章中的相关技术从事非法测试。由此产生的任何不良后果与文...
- 测试人员必看的软件测试面试文档(软件测试面试怎么说)
-
前言又到了毕业季,我们将会迎来许多需要面试的小伙伴,在这里呢笔者给从事软件测试的小伙伴准备了一份顶级的面试文档。1、什么是bug?bug由哪些字段(要素)组成?1)将在电脑系统或程序中,隐藏着的...
- 复活,视频号一键下载,有手就会,长期更新(2023-12-21)
-
视频号下载的话题,也算是流量密码了。但也是比较麻烦的问题,频频失效不说,使用方法也难以入手。今天,奶酪就来讲讲视频号下载的新方案,更关键的是,它们有手就会有用,最后一个方法万能。实测2023-12-...
- 新款HTTP代理抓包工具Proxyman(界面美观、功能强大)
-
不论是普通的前后端开发人员,还是做爬虫、逆向的爬虫工程师和安全逆向工程,必不可少会使用的一种工具就是HTTP抓包工具。说到抓包工具,脱口而出的肯定是浏览器F12开发者调试界面、Charles(青花瓷)...
- 使用Charles工具对手机进行HTTPS抓包
-
本次用到的工具:Charles、雷电模拟器。比较常用的抓包工具有fiddler和Charles,今天讲Charles如何对手机端的HTTS包进行抓包。fiddler抓包工具不做讲解,网上有很多fidd...
- 苹果手机下载 TikTok 旧版本安装包教程
-
目前苹果手机能在国内免拔卡使用的TikTok版本只有21.1.0版本,而AppStore是高于21.1.0版本,本次教程就是解决如何下载TikTok旧版本安装包。前期准备准备美区...
- 【0基础学爬虫】爬虫基础之抓包工具的使用
-
大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章,为实现从易到难全方位覆盖,特设【0基础学爬...
- 防止应用调试分析IP被扫描加固实战教程
-
防止应用调试分析IP被扫描加固实战教程一、概述在当今数字化时代,应用程序的安全性已成为开发者关注的焦点。特别是在应用调试过程中,保护应用的网络安全显得尤为重要。为了防止应用调试过程中IP被扫描和潜在的...
- 一文了解 Telerik Test Studio 测试神器
-
1.简介TelerikTestStudio(以下称TestStudio)是一个易于使用的自动化测试工具,可用于Web、WPF应用的界面功能测试,也可以用于API测试,以及负载和性能测试。Te...
- HLS实战之Wireshark抓包分析(wireshark抓包总结)
-
0.引言Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接...
- 信息安全之HTTPS协议详解(加密方式、证书原理、中间人攻击 )
-
HTTPS协议详解(加密方式、证书原理、中间人攻击)HTTPS协议的加密方式有哪些?HTTPS证书的原理是什么?如何防止中间人攻击?一:HTTPS基本介绍:1.HTTPS是什么:HTTPS也是一个...
- Fiddler 怎么抓取手机APP:抖音、小程序、小红书数据接口
-
使用Fiddler抓取移动应用程序(APP)的数据接口需要进行以下步骤:首先,确保手机与计算机连接在同一网络下。在计算机上安装Fiddler工具,并打开它。将手机的代理设置为Fiddler代理。具体方...
- python爬虫教程:教你通过 Fiddler 进行手机抓包
-
今天要说说怎么在我们的手机抓包有时候我们想对请求的数据或者响应的数据进行篡改怎么做呢?我们经常在用的手机手机里面的数据怎么对它抓包呢?那么...接下来就是学习python的正确姿势我们要用到一款强...
- Fiddler入门教程全家桶,建议收藏
-
学习Fiddler工具之前,我们先了解一下Fiddler工具的特点,Fiddler能做什么?如何使用Fidder捕获数据包、修改请求、模拟客户端向服务端发送请求、实施越权的安全性测试等相关知识。本章节...
- fiddler如何抓取https请求实现手机抓包(100%成功解决)
-
一、HTTP协议和HTTPS协议。(1)HTTPS协议=HTTP协议+SSL协议,默认端口:443(2)HTTP协议(HyperTextTransferProtocol):超文本传输协议。默认...
- 一周热门
-
-
Python实现人事自动打卡,再也不会被批评
-
【验证码逆向专栏】vaptcha 手势验证码逆向分析
-
Psutil + Flask + Pyecharts + Bootstrap 开发动态可视化系统监控
-
一个解决支持HTML/CSS/JS网页转PDF(高质量)的终极解决方案
-
再见Swagger UI 国人开源了一款超好用的 API 文档生成框架,真香
-
网页转成pdf文件的经验分享 网页转成pdf文件的经验分享怎么弄
-
C++ std::vector 简介
-
系统C盘清理:微信PC端文件清理,扩大C盘可用空间步骤
-
10款高性能NAS丨双十一必看,轻松搞定虚拟机、Docker、软路由
-
python使用fitz模块提取pdf中的图片
-
- 最近发表
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- table.render (33)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)