tensorflow2.0入门

1 学习tensorflow2.0之前需要的基础知识前言

tf2.0已经把难度下降了非常多,但是在学习之前还是需要有一些基本的知识的,这些基本知识是大多数框架都难以避免的。这里我列举一下,并给出具体的要求。

学习tf2.0需要基础知识

python基础

装饰器

要求看到装饰器不要害怕,虽然我们不会用装饰器写代码,但是看到tf里面用到的装饰器能大致理解它在干嘛。别只会用,却不懂它在干什么。

在这里插入图片描述

迭代器

在某些场景下需要灵活的定制化数据输入管道,因为内存一次性是放不下这么多的数据的,因此迭代器需要好好掌握。
tf.data里面就用了很多迭代器去封装数据。
目标:能够在特定条件下自己定制数据输入管道,不用借助tf.data。这一点在cutting ege 论文复现中很重要。
在这里插入图片描述

上下文管理器

简单了解,知道就行。
在这里插入图片描述

面向对象编程思想

重点在鸭子类型,例如call等。
在这里插入图片描述

python的模块导入机制

在这里插入图片描述

pip使用和virtualenv

在这里插入图片描述

numpy编程

多维切片索引

这是numpy基本要求,掌握从numy中随意的取出数据。

在这里插入图片描述

view&&copy

这个我现在还不了解。。。

在这里插入图片描述

清楚理解numpy ndarray的轴

理解ndarray轴之后,tensor的轴也就明白了。需要注意图像和矩阵在ndarray中的区别。transpose换轴要熟练。
在这里插入图片描述

ndarray在内存上的结构有基本的认识

简单理解,如果能够深入理解的话可以解决很隐蔽但是不常遇到的bug。
在这里插入图片描述

linux操作系统

SSH

SSH和notebook对比:notebook讲解展示效果更好,但是如果你需要训练、搭建环境或者写脚本的话notebook就做不了了,或者即使有的能实现也很困难。所以notebook适合你什么都做好了,直接写python代码和夹带一些简单的linux命令情况。
在这里插入图片描述

Linux系统的文件系统

linux一切都是文件,包括硬件也是文件。

在这里插入图片描述

linux系统的账户管理

root是一把双刃剑。
在这里插入图片描述

linux系统的驱动安装

在这里插入图片描述

git和github

在这里插入图片描述

机器学习

知道统计机器学习为什么叫 统计么?

在这里插入图片描述

统计机器学习处理的结构化数据的基本概念

在这里插入图片描述

机器学习的几个分类维度

在这里插入图片描述

能独立判断一个模型过拟合还是欠拟合

在这里插入图片描述

了解统计学习项目的基本流程

在这里插入图片描述

深度学习

明白深度学习擅长的领域

在这里插入图片描述

了解常见的深度神经网络层

在这里插入图片描述

总结

在这里插入图片描述

2 tensorflow2.0概述前言

通过这一节,了解tensorflow可以做什么,遇到一个问题能够判断tensorflow有什么现成的库,最后需要明白自己要学什么,不要一窝蜂地都学,那样没啥效果。我们要知道哪些内容需要理解并熟练掌握,哪些内容可以选择记忆,用到的时候再看这部分内容。

tensorflow summary

简介

tensorflow是一个非常全的,开源的,针对机器学习(不止是深度学习),**平台(具体怎么发挥取决你)**的软件包。

全景图

在这里插入图片描述
上图是tf的全景,左边train部分包括distribution统一调度底层的硬件,tf.keras和estimators这两个高级api去搭建模型,这里还可以通过底层custm层自定义层(学术型的工作)。tensorflowhub里面有很多先进的算法实现,可以拿到本地去使用。read&preprocess data 是花费时间最多的地方,很多时候模型搭建写不了多少时间,大都在data处理上,因此这部分要掌握好。
右边是开发部分,serving是把训练好的model设置成后端api, lite部署到嵌入式,针对前向传播进行大量的编译优化,.js是面对前端网页的。此外还有其他语言的转换。
tf2.0 和1.0相比,它把高层api统一合并到keras,并删除了大量的冗余的api,降低学习难度。

training 阶段

在这里插入图片描述
这是训练的流程,其中tf.data和feature colums用好的话可以大大降低在数据处理上花费时间,因此是整个训练部分最应该要熟练掌握的。 tensorboard可以对训练整个过程进行调控和监视。keras和estimators简单知道几个常用的就行,其他的用到时候可以查google,但是custom自定义层要熟练掌握。

develpment部分

把模型部署出来,略。

tensorflow扩展工具

在这里插入图片描述
tensorboard:模型可视化工具,经常会用到

XLA:加速库

probability:自己加入先验知识,强加到模型中,也就是掌舵tf变化。

ragged tensor: 让tensor 变成可变长的tensor,常用在rnn中。

tensor2tenor: 加速dl的研究,将先进的模型放入进去。

privacy: 加密。

federated: 解决数据分散和数据不能共享问题,但是所有人基于共同的数据能够训练出来一个好的模型。有点像区块链。

rl :强化学习,但是不完善。

其他:也有很多其他的生态扩展包,用到时候可以查。

tensorboard(模型训练驾驶舱)

在这里插入图片描述

XLA

工业中对模型的大小和运行进行优化,学术领域用不到。
在这里插入图片描述

机器学习的工作全景

从下图可以看出,机器学习真正code只有中间很少的一部分,如果只钻到ML code很容易陷入一个技术瓶颈。大多数的时间会在data收集、验证、提取特征上。很多研究人员在ml code领域,虽然他们工作很少,但是整个流程都是围绕他运行的。因此要对ML code有正面评价,但是还要有负面评价。如果在大公司一个人只做其中的一个小方向,好处是能够做到精尖的水平,但是小公司就要全做了,这样能锻炼水平但是我觉得增值慢。没有精尖增值快。
在这里插入图片描述

3 TF2.0 初步使用前言

介绍tensorflow的安装和基本使用。

正文

tf2.0的安装

  1. 安装之前请查看如何将pip下载地址更换成国内的镜像,国内的镜像和国外完全一样,只是慢五分钟。anaconda参照:添加链接描述,如果觉得上面链接源不稳定可以更换成我设置的源,非常好用。
ssl_verify: true
channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
  - defaults
  - conda-forge
show_channel_urls: true
  1. 安装最新tensorflowde 的GPU版本。

pip install tensorflow-gpu

如果没有GPU的话那么安装cpu版本,学习的话够了。

pip install tensorflow

  1. 安装notebook作为编辑器,在命令行运行:(ps:在开发领域用vscode,但是数据科学中notebook一定是第一选择,可以直观的看数据的变化)

pip install jupyter

  1. 启动notebook:

jupyter notebook

  1. 新建ipynb并输入下面的测试代码:
import tensorflow as tf 
print(tf.__version__)
print(tf.reduce_sum(tf.random.normal([1000,1000])))

得到如下结果:
在这里插入图片描述

认识Tensor

什么是tensor

tensor本质是一个计算流程,而不是一个张量,他们不是一个维度层次的比较。因此在eager execution之前tensorflow难用的一个点就是在在设计完计算流程之后才能执行sesion.run去执行结果,这导致可视性差和操作麻烦,因此2.0设计了实时的计算。

tensor 、numpy ndarry、tensor.Variable

tensor本质是计算流程会导致tensorflow只接受tensor的变量,不在入口和出口以外的地方接受非tensor的变量输入,即使numpy也不行,tensor在numpy基础上进行了api封装,让它可以放在嵌入式设备,gpu等中,从下图中可以看出:
在这里插入图片描述
tensor 可以放入gpu和tpu上,但是ndarry只能在内存中,这样我们就知道为什么gpu比cpu快了。

四种变量的辨析:
在这里插入图片描述
第一个是普通变量, t1是ndarry,t2是tensor,对ndarray封装,可以理解为不能更改的一个tensor流程点,因为这个流程已经计算完了。t4是在tensor基础上又封装了一次,可以在最后决定流程之前进行变化。注意:<>代表可以用于tf运算的内容,没有的话tf不认)

**总结:**这部分要明白下面variable是方便用户去自行输入变量或者模型的,可以更改,而tensor是框架要用的,比如有些不能更改的内容要用tensor,类似于人的骨架。
###

tensor基本操作

学会numpy就相当于了tensor的低级api。

矩阵乘法和向量乘法

matmul是举证乘法,而*是向量乘法。
在这里插入图片描述

类型转换

在这里插入图片描述
文中【4】表达了list 转换成tensor,1也转换成tensor,然后掉用tf.add把他们相加,注意这里用到了广播机制。
【5】用+ 作为add 的运算符重载。
总结就是只要有tensor类型就可以和其他的类型运算,但是如果一个tensor都没有的话就不行了。

方差

在这里插入图片描述

均值

axis=0 是按照纵向来算,keepdims是保留原来矩阵的大小。
在这里插入图片描述

随机数生成

这一知识点一般用在layer初始的随机数分配,一般就用到正态和均匀分布。

在这里插入图片描述

找极值

需要注意返回的是索引。
在这里插入图片描述
最后可以用tf.reshape(a,[3,3])将数据改成3*3的矩阵。注意只能用tf的方法来对tensor操作,想要转换成numpy的话变量后面加.numpy。

总结:
在这里插入图片描述

keras和深度学习简介

tf.keras vs keras

tf.keras在tensorflow中已经安装。不建议用keras,因为tf.keras比keras更适配tensorflow。如果团队中有人用mxnet,有人用pytorch,那么可以统一用keras,然后用k.backend去统一管理框架代码。但是一般一个团队都是一个框架,而且高级api独立的框架间接调用会更慢一些。
在这里插入图片描述

深度学习理解

深度学习的理解如下,这里面噪声是基于目标的噪声,layer是去除原始数据上没有表达一个类别特性的噪声,保留高纬度能够反映数据区别的特征。
在这里插入图片描述
深度学习本质如下,模型是层的集成,层是张量data的集成。
在这里插入图片描述

神经网络的基本要素

在这里插入图片描述
输入数据:数据才是决定任务上限,模型算法就是让识别率接近上限。举个例子:学术界定好数据集然后研究这个数据集上算法能够达到什么上限。工业界主要工作是收集数据,直接用数据去逼近上限。例如100w的数据可能需要一些算法工程师研究很多时间才能达到和1亿数据随便训练一下的效果。从这里可以看出整个算法在行业中做了很小的一部分,这也是为啥算法工程师越来越少的原因,因为算法企业可以直接用最先进的啊,但是数据和系统都需要按照公司的标准去开发,时间和人手都需要很多。现在想想如果做研究应该做到什么水平,有什么定位?比如我之前的婴幼儿哭声分析可以说数据就很差,我提出了算法没有好的baseline和数学分析。总结:学术圈考虑算法,工业领域要考虑决定应用的上限–数据。
loss:反馈训练的信号。
optimizer:如何根据反馈信号去调整模型。

层:
将输入数据从一变成多个,或者从多个变成一个。有状态是指能变化的层,例如全连接,而input层就是无状态的,因为不管谁来都一样不变化。
在这里插入图片描述
模型:
深度学习是有向无环图,而不是类似堆栈的结构,这一点要理解。

在这里插入图片描述
loss函数!!!!
loss很关键,loss决定你对问题的理解。自定义的loss不要偏离你的目标。在学术领域要经常更改loss去获得一个更好的信号,建议可以自定义一个loss包,每次做实验都拿来用用。
在这里插入图片描述
optimizer
略。

keras工作流程

数据处理不仅仅负责将数据传入,还负责数据增强。
在这里插入图片描述
需要学习的keras模块
在这里插入图片描述

总结

在这里插入图片描述

MNIST in tf.keras

任务介绍

对官方内置的数据集(6w张0-9的灰度图)像进行分类。

数据集导入

这一步本来是很麻烦的,但是我们在初步练习时候要尽量避免这一部分工作,直接用tf内置的数据集。让我们将精力放在模型架构设计中。初学过程中把tf.keras.dataset都跑一遍,差不多keras已经学习的差不多了。

在这里插入图片描述

数据预处理

注意第八行将数据要转换成tensor格式。
在这里插入图片描述

模型建立

当我们在复现别人论文时候,按照作者论文中的网络架构图和参数进行设置,然后比对一下自己设计总参数和作者给的总参数是否一样,如果一样的话那么论文代码就基本复现了,但是激活函数就得自己去比对了。sequential可以设计堆栈,function可以设计有向无环图。如果发现参数数量不对,那么要对单层的param检查,通过计算论文每个层本应该有的param来纠正自己的复现网络架构。
在这里插入图片描述

编译和训练

loss表示模型在数据上的效果,optimizer是教练。metrics是自己想通过loss关注的东西。例如f1分数,高手在这里会定义很多东西反应模型训练的信息。batch需要符合计算机二进制,让卡充分利用。批处理的大小不仅仅是根据理论来决定的。他还由你本地的计算资源来决定,因此需要在几个理论值上不断地尝试。一般如果,批处理的大小设置过大的话可能会陷入局部最小,设置太小的话随机性太大,难以稳步的走向最优解。epoch太大容易过拟合,当我们发现训练集精度一致增加,测试的时候却逐步降低。这是过拟合了,需要在这种趋势之前将模型导出。
在这里插入图片描述

测试

这里测试集有时候会很差,有时候还会出现测试集很好,predict却很差。这都需要自己解决bug.
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值