01-TensorFlow2.0基础
01-TensorFlow基础
Tensorflow是什么
Google的开源软件库
- 采取数据流图,用于数值计算
- 支持多种平台 - GPU、CPU、 移动设备
- 最初用于深度学习,变得越来越通用
Tensorflow数据结构
#数据流图

线:节点之间的输入输出关系,线上运输张量. tensor:张量- 指代数据
节点:operation (op): 专门运算的操作节点,所有的操作都是一个op,处理数据
- 只要使用tensorflow的API定义的函数都是OP
- 节点被分配到各种计算设备上运行

- graph: 图 整个的程序结构
- 本质上是一个分配的内存位置,默认有一个图,所有的tensor 和 op 的内存地址都是一样的。
- 不同的图内存地址不一样,计算的过程中互不干扰
- session: 会话: 运算程序的图 (只能运行一张图,可以在会话中指定图去运行 graph = g)
- 运行图的结构
- 分配资源计算
- 掌握资源(变量、队列、线程)
Tensorflow的特性
- 高度的灵活性,便于调用函数,也可以写自己的封装
- 真正的可移植性,在不同的设备上都可以简单运行
- 产品和科研结合
- 自动求微分,主要用于反向传播计算
- 多语言支持,C++, Java , JS, R
- 性能最优化
Tensorflow的前后端系统
- 前端系统:定义程序的图的机构
- 后端系统: 运算图结构
Tensorflow版本变迁
Tensorflow1.0 主要特性
- XLA: Accelerate Linear Algebra
- 提升训练速度58倍
- 可以在移动设备上运行
- 引用更高级别的API
- tf.layers/ tf.metrics / tf.losses/ tf.keras
- Tensorflow调试器
- 支持docker镜像,引入tensorflow serving 服务

Tensorflow 2.0 主要特性
- 使用tf.keras 和 eager mode 进行简单模型构建
- 鲁棒的跨平台模型部署
- 强大的研究实验
- 清除了不推荐使用和重复的API

Tensorflow2.0 简化模型开发流程
- 使用tf.data加载数据
- 使用tf.keras 构建模型,也可以使用premade estimator 验证模型
- 使用tensorflow hub进行迁移学习
- 注: 迁移学习 - 使用一个前人预先训练好的,应用在其他领域的网络作为模型训练的起点,站在前人基础上更进一步,不必重新发明轮子。
- 使用eager mode 进行运行和调试
- 使用分发策略进行分布式训练
- 导出到SavedModel
- 使用Tensorflow Serve, Tensorflow Lite, Tensorflow.js
Tensorflow 强大的跨平台能力
- Tensorflow 服务
- 直接通过HTTP/ TEST 或 GTPC/协议缓冲区
- Tensorflow Lite - Android, iOS 和嵌入式
- Tensorflow.js - Javascript 部署
- 其他语言
Tensorflow vs. Pytorch
入门时间(易用性)
- Tensorflow 1.*
- 静态图 ,构建完之后不可以更改, 效率高
- 额外概念, 会话,变量,占位符
- 写样本代码
- Tensorflow 2.0
- 动态图, 构建完之后可以更改, 效率不高,调试容易
- Eager mode 直接集成在python中
- Pytorch
- 动态图
- numpy扩展,集成在python
"""
不同方式求解 1 + 1/2 + 1/2^2 + 1/2^3 + ...... + 1/2^50
"""
# 1. tensorflow 1.*求解
import tensorflow as tf
print(tf.__version__)
x = tf.Variable(0.)
y = tf.Variable(1.)
add_op = x.assign(x + y)
div_op = y.assign(y / 2)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for iteration in range(50):
sess.run(add_op)
sess.run(div_op)
print(x.eval())
# 2. pytorch 求解
import torch
print(torch.__version__)
x = torch.Tensor([0.])
y = torch.Tensor([1.])
for iteration in range(50):
x = x + y
y = y / 2
print(x)
# 3. tensorflow 2.0 求解
import tensorflow as tf
print(tf.__version__)
x = tf.constant(0.)
y = tf.constant(1.)
for iteration in range(50):
x = x + y
y = y / 2
print(x.numpy())
# 4. 纯python求解
x = 0
y = 1
for iteration in range(50):
x = x + y
y = y / 2
print(x) # 精度有点不一样
图创建和调试
- Tensorflow 1.*
- 静态图,难以调试, 需要使用tfdbg
- Tensorflow 2.0 与 pytorch
- 动态图,python自带的调试工具
全面性
- python缺少少量的功能,使用频次很低
- 沿维翻转张量 (np.flip, np.flipud, np.fliplr)
- 检查无穷与非数值张量(np.is_nan, np.is_inf)
- 快速傅里叶变换 (np.fft)
序列化和部署
- Tensorflow 支持更加广泛,多语言,跨平台
- pytorch 支持比较简单
01-TensorFlow2.0基础的更多相关文章
- SpringBoot2.0基础案例(01):环境搭建和RestFul风格接口
一.SpringBoot 框架的特点 1.SpringBoot2.0 特点 1)SpringBoot继承了Spring优秀的基因,上手难度小 2)简化配置,提供各种默认配置来简化项目配置 3)内嵌式容 ...
- TensorFlow2.0(1):基本数据结构—张量
1 引言 TensorFlow2.0版本已经发布,虽然不是正式版,但预览版都发布了,正式版还会远吗?相比于1.X,2.0版的TensorFlow修改的不是一点半点,这些修改极大的弥补了1.X版本的反人 ...
- swift3.0基础语法
swift 3.0 基础语法 目录 01-变量和常量 02-运算符 03-可选项 04-条件语句 05-循环 06-字符串 07-元组 08-数组 09-字典 10-对象和类 11-枚举 12-属性 ...
- 【转】WF4.0 (基础篇)
转自:http://www.cnblogs.com/foundation/category/215023.html 作者:WXWinter —— 兰竹菊梅★春夏秋冬☆ —— wxwinter@16 ...
- Linux网络服务01——Linux网络基础设置
Linux网络服务01--Linux网络基础设置 一.查看及测试网络 1.使用ifconfig命令查看网络接口 (1)查看活动的网络接口 ifconfig命令 [root@crushlinux ~]# ...
- (六)SpringBoot2.0基础篇- Redis整合(JedisCluster集群连接)
一.环境 Redis:4.0.9 SpringBoot:2.0.1 Redis安装:Linux(Redhat)安装Redis 二.SpringBoot整合Redis 1.项目基本搭建: 我们基于(五) ...
- javaScript系列 [01]-javaScript函数基础
[01]-javaScript函数基础 1.1 函数的创建和结构 函数的定义:函数是JavaScript的基础模块单元,包含一组语句,用于代码复用.信息隐蔽和组合调用. 函数的创建:在javaScri ...
- _00017 Kafka的体系结构介绍以及Kafka入门案例(0基础案例+Java API的使用)
博文作者:妳那伊抹微笑 itdog8 地址链接 : http://www.itdog8.com(个人链接) 博客地址:http://blog.csdn.net/u012185296 博文标题:_000 ...
- Google工程师亲授 Tensorflow2.0-入门到进阶
第1章 Tensorfow简介与环境搭建 本门课程的入门章节,简要介绍了tensorflow是什么,详细介绍了Tensorflow历史版本变迁以及tensorflow的架构和强大特性.并在Tensor ...
- 『TensorFlow2.0正式版教程』极简安装TF2.0正式版(CPU&GPU)教程
0 前言 TensorFlow 2.0,今天凌晨,正式放出了2.0版本. 不少网友表示,TensorFlow 2.0比PyTorch更好用,已经准备全面转向这个新升级的深度学习框架了. 本篇文章就 ...
随机推荐
- 使用float设置经典的网站前端结构(深入探讨)
.要是DIV的子元素宽度大于它自己的宽度,不管子元素有没有脱离文档流,子元素会在横向向右溢出. 关于高度:1.要是DIV的高度没有设定,其高度受“没有脱离文档流”的子元素影响.以下是DIV宽度为0的情 ...
- 「考试」小P的生成树
考场上想到一半正解,没想到随机化,不然也许能够$A$掉. 题目所说的其实就是向量加法,求模长最长的向量生成树. 我们考虑对于两个向量,必然在平行边形对角线方向上,他们的投影和是最大的,长度就是对角线长 ...
- ASP.NET Core Blazor 用Inspinia静态页模板搭建简易后台(实现菜单选中)
Blazor 是一个用于使用 .NET 生成交互式客户端 Web UI 的框架: 使用 C# 代替 JavaScript 来创建丰富的交互式 UI. 共享使用 .NET 编写的服务器端和客户端应用逻辑 ...
- 如何在Vue项目中使用Typescript
0.前言 本快速入门指南将会教你如何在Vue项目中使用TypeScript进行开发.本指南非常灵活,它可以将TypeScript集成到现有的Vue项目中任何一个阶段. 1.初始化项目 首先,创建一个新 ...
- mjpg-stream 视频服务 (1)| 简介与配置树莓派使用
源码地址为:https://github.com/jacksonliam/mjpg-streamer Mjpg简介: (1)mjpg-streamer是一个命令行应用程序,它将JPEG帧从一个或多个输 ...
- python——函数的基本概念
Python函数认识 数学定义 y = f(x), y是x的函数,x是自变量. python中的函数组成 由若干语句组成的语句块.函数名称.参数列表构成,函数是组织代码的最小单元 像一个黑盒子,我们给 ...
- mysql忘记密码怎么办??
1.停掉mysql 1.1单实例停止方式 [root@qiuhom ~]# /etc/init.d/mysqld stop Shutting down MySQL. [ OK ] 1.2多实例停止方式 ...
- 深入理解计算机系统 第三章 程序的机器级表示 part1
如题所示,这一章讲解了程序在机器中是怎样表示的,主要讲汇编语言与机器语言. 学习什么,为什么学,以及学了之后有什么用 我们不用学习如何创建机器级的代码,但是我们要能够阅读和理解机器级的代码. 虽然现代 ...
- 轻松实现C/C++各种常见进制相互转换
其它进制转为十进制 在实现这个需求之前,先简单介绍一个c标准库中的一个函数: long strtol( const char *str, char **str_end, int base); 参数详细 ...
- [LC]235题 二叉搜索树的最近公共祖先 (树)(递归)
①题目 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x,满足 x 是 p.q 的祖先 ...