tensorflow2.0笔记(代码片段)

维多利亚少年i 维多利亚少年i     2022-12-01     149

关键词:

Tensorflow2.0笔记

本博客为Tensorflow2.0学习笔记,感谢北京大学微电子学院曹建老师

6.4 AdaDelta

TensorFlow API:tf.keras.optimizers.Adadelta

image-20210622105400780

代码实现:

# AdaDelta 
beta = 0.999
v_w = beta * v_w + (1 - beta) * tf.square(grads[0]) 
v_b = beta * v_b + (1 - beta) * tf.square(grads[1])

delta_w = tf.sqrt(u_w) * grads[0] / tf.sqrt(v_w)
delta_b = tf.sqrt(u_b) * grads[1] / tf.sqrt(v_b)

u_w = beta * u_w + (1 - beta) * tf.square(delta_w) 
u_b = beta * u_b + (1 - beta) * tf.square(delta_b)

w1.assign_sub(delta_w) 
b1.assign_sub(delta_b)

6.5 Adam

TensorFlow API: tf.keras.optimizers.Adam

image-20210622105735764

6.5 优化器选择

各优化器来源:

SGD(1952):https://projecteuclid.org/euclid.aoms/1177729392(源自回答

SGD with Momentum(1999):https://www.sciencedirect.com/science/article/abs/pii/ S0893608098001166

SGD with Nesterov Acceleration(1983):由Yurii Nesterov提出

AdaGrad(2011): http://www.jmlr.org/papers/volume12/duchi11a/duchi11a.pdf RMSProp(2012): http://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6. pdf

AdaDelta(2012): https://arxiv.org/abs/1212.5701 Adam:(2014) https://arxiv.org/abs/1412.6980

(对上述算法非常好的可视化:https://imgur.com/a/Hqolp)

​ 很难说某一个优化器在所有情况下都表现很好,我们需要根据具体任务选取优化器。一些优化器在 计算机视觉任务表现很好,另一些在涉及RNN网络时表现很好,甚至在稀疏数据情况下表现更出色。

​ 总结上述,基于原始SGD增加动量和Nesterov动量,RMSProp是针对AdaGrad学习率衰减过快 的改进,它与AdaDelta非常相似,不同的一点在于AdaDelta采用参数更新的均方根(RMS)作为分 子。Adam在RMSProp的基础上增加动量和偏差修正。如果数据是稀疏的,建议用自适用方法,即Adagrad, RMSprop, Adadelta, Adam。RMSprop, Adadelta, Adam 在很多情况下的效果是相似的。随着梯度变的稀疏,Adam 比 RMSprop 效果会好。总的来说,Adam整体上是最好的选择。

​ 然而很多论文仅使用不带动量的vanilla SGD和简单的学习率衰减策略。SGD通常能够达到最小点,但是相对于其他优化器可能要采用更长的时间。采取合适的初始化方法和学习率策略,SGD更加可 靠,但也有可能陷于鞍点和极小值点。因此,当在训练大型的、复杂的深度神经网络时,我们想要快速 收敛,应采用自适应学习率策略的优化器。

​ 如果是刚入门,优先考虑Adam或者SGD+Nesterov Momentum。

​ 算法没有好坏,最适合数据的才是最好的,永远记住:No free lunch theorem。

6.7 优化算法的常用tricks

  1. 首先,各大算法孰优孰劣并无定论。如果是刚入门,优先考虑SGD+Nesterov Momentum或者Adam.(Standford 231n : The two recommended updates to use are either SGD+Nesterov Momentum or Adam)

  2. 选择你熟悉的算法——这样你可以更加熟练地利用你的经验进行调参。

  3. 充分了解你的数据——如果模型是非常稀疏的,那么优先考虑自适应学习率的算法。

  4. 根据你的需求来选择——在模型设计实验过程中,要快速验证新模型的效果,可以先用Adam进 行快速实验优化;在模型上线或者结果发布前,可以用精调的SGD进行模型的极致优化。

  5. 先用小数据集进行实验。有论文研究指出,随机梯度下降算法的收敛速度和数据集的大小的关系不大。(The mathematics of stochastic gradient descent are amazingly independent of the training set size. In particular, the asymptotic SGD convergence rates are independent from the sample size.)因此可以先用一个具有代表性的小数据集进行实验,测试一下最好的优化算法,并通过参数搜索来寻找最优的训练参数。

  6. 考虑不同算法的组合。先用Adam进行快速下降,而后再换到SGD进行充分的调优。

  7. 充分打乱数据集(shuffle)。这样在使用自适应学习率算法的时候,可以避免某些特征集中出现,而导致的有时学习过度、有时学习不足,使得下降方向出现偏差的问题。在每一轮迭代后对训 练数据打乱是一个不错的主意。

  8. 训练过程中持续监控训练数据和验证数据上的目标函数值以及精度或者AUC等指标的变化情况。对训练数据的监控是要保证模型进行了充分的训练——下降方向正确,且学习率足够高;对验证数 据的监控是为了避免出现过拟合。

  9. 制定一个合适的学习率衰减策略。可以使用分段常数衰减策略,比如每过多少个epoch就衰减一次;或者利用精度或者AUC等性能指标来监控,当测试集上的指标不变或者下跌时,就降低学习 率。

  10. Early stopping。如Geoff Hinton所说:“Early Stopping是美好的免费午餐”。你因此必须在训练的过程中时常在验证集上监测误差,在验证集上如果损失函数不再显著地降低,那么应该提前结 束训练。

  11. 算法参数的初始值选择。 初始值不同,获得的最小值也有可能不同,因此梯度下降求得的只是局部最小值;当然如果损失函数是凸函数则一定是最优解。由于有局部最优解的风险,需要多次用不 同初始值运行算法,关键损失函数的最小值,选择损失函数最小化的初值。

6.8 参考链接

  1. TensorFlow官网

  2. 卷积神经网络的复杂度分析

  3. 一个框架看懂优化算法之异同 SGD/AdaGrad/Adam

  4. 梯度下降法家族

  5. Some State of the Art Optimizers in Neural Networks

  6. An overview of gradient descent optimization algorithms


google老师亲授tensorflow2.0入门到进阶笔记-(dataset)(代码片段)

 版本:numpy1.16.6        tensorflow2.2.0        tensorflow.keras2.3.0-tf1.引入DataSet基础使用tf.data.Dataset.from_tensor_slices#构建datasetrepeat,batch,interleave,map,shuffle,list_files,...csvtf.data.Tex 查看详情

google老师亲授tensorflow2.0入门到进阶笔记-(dataset)(代码片段)

 版本:numpy1.16.6        tensorflow2.2.0        tensorflow.keras2.3.0-tf1.引入DataSet基础使用tf.data.Dataset.from_tensor_slices#构建datasetrepeat,batch,interleave,map,shuffle,list_files,...csvtf.data.Tex 查看详情

tensorflow2.0笔记

Tensorflow2.0笔记本博客为Tensorflow2.0学习笔记,感谢北京大学微电子学院曹建老师目录Tensorflow2.0笔记5欠拟合与过拟合5欠拟合与过拟合欠拟合的解决方法:​ 1.增加输入特征项​ 2.增加网络参数​ 3.减少正则化参数过拟合的解决方... 查看详情

tensorflow2.0——代码实现一元逻辑回归(代码片段)

    importtensorflowastfimportnumpyasnpx=np.array([1,2,3,4])y=np.array([0,0,1,1])w=tf.Variable(1.)b=tf.Variable(1.)sigmodX=1/(1+tf.exp(-(w*x+b)))#sigmod函数pre_result=tf.round(sigmod 查看详情

使用tensorflow2.0执行视觉显著性检测(visualsaliencydetection)(代码片段)

使用Tensorflow2.0执行视觉显著性检测(VisualSaliencyDetection)上一篇博客介绍了如何使用Python,OpenCV执行视觉显著性检测(VisualSaliencyDetection)。这篇博客将介绍如何使用Tensorflow2.0执行显著性检测,这是一个应用图像处... 查看详情

tensorflow2.0——跟着官方demo学习tensorflow2.0框架基本api和用法(代码片段)

前言同样的,对于新框架的学习直接看官网!!TensorFlowCore不论您是机器学习新手还是专家,都可使用完整的端到端示例了解如何使用TensorFlow。请试用GoogleColab中的教程-无需进行任何初始设置。https://tensorflow.google... 查看详情

tensorflow2.0新特性小练习(代码片段)

基于tf2.0对KaggelGooglestreetviewcharactersclassify项目练手,熟悉一下tf2.0的新特性下载下来kaggle的数据集如下: 所有训练数据在train文件夹中,labels在trainLabels.cvs文件中,label文件格式如下:分别每个label对应其图片的名称首先对数... 查看详情

win11-tensorflow2.0(gpu)最新版安装(代码片段)

Tensorflow2.0(GPU)最新版安装CPU版安装查看CUDA版本查看官网对应版本安装Tensorflow后序CPU版安装请参考:Tensorflow2.0最新版(2.4.1)安装教程查看CUDA版本请参考:如何查看Win11的CUDA版本查看官网对应版本https://tensorflow.goo... 查看详情

tensorflow2.0最新版(2.4.1)安装教程(代码片段)

Tensorflow2.4.1前言Tensorflow简介Anaconda简介Anaconda安装TensorFlowCPU&GPUTensorflow安装Pycharm&TensorflowTensorflow&HelloworldHelloworldSession()后序前言目前考虑进入梦寐以求的机器学习、人工智能等领域的学习,因此安装主流的机器学习... 查看详情

android|tensorflow2.0入门1(代码片段)

TensorFlow快速入坑TensorFlow是什么?TensorFlow的基础知识TensorFlow特点TensorFlow的结构生命周期、命名和监视放置变量和张量自动微分(automaticdifferentiation)和梯度带TensorFlow是什么?TensorFlow是Google开发的第二代机器学习... 查看详情

android|tensorflow2.0入门1(代码片段)

TensorFlow快速入坑TensorFlow是什么?TensorFlow的基础知识TensorFlow特点TensorFlow的结构TensorFlow是什么?TensorFlow是Google开发的第二代机器学习系统。其原理为:以张量(Tensor)在计算图(Graph)上流动(Flow 查看详情

《30天吃掉那只tensorflow2.0》开篇辞(tensorflow学习之路)(代码片段)

《30天吃掉那只TensorFlow2.0》开篇辞🔥🔥文章目录《30天吃掉那只TensorFlow2.0》开篇辞🔥🔥一,TensorFlow2🍎还是Pytorch🔥二,Keras🍏和tf.keras🍎三,本书📖面向 查看详情

anaconda+cuda+cudnn+tensorflow2.0环境搭建(代码片段)

Anaconda+CUDA+cuDNN+Tensorflow2.0环境搭建前言搭建环境初期遇到的问题参考硬件环境Anaconda3Win10安装使用镜像Ubuntu安装Tensorflow环境搭建Win10Step1:创建虚拟环境(关于Anaconda虚拟环境和其他常用命令我会后续写一篇文章... 查看详情

tensorflow2.0新特性(代码片段)

安装TensorFlow2.0Alpha本文仅仅介绍Windows的安装方式:pipinstalltensorflow==2.0.0-alpha0#cpu版本pipinstalltensorflow==2.0.0-alpha0#gpu版本针对GPU版的安装完毕后还需要设置环境变量:SETPATH=C:ProgramFilesNVIDIAGPUComputingToolkitCUDAv10.0in;%PATH%SETPATH=C:ProgramFi... 查看详情

《30天吃掉那只tensorflow2.0》5-1数据管道dataset(代码片段)

《30天吃掉那只TensorFlow2.0》5-1数据管道Dataset文章目录《30天吃掉那只TensorFlow2.0》5-1数据管道Dataset一,构建数据管道二,应用数据转换三,提升管道性能如果需要训练的数据大小不大,例如不到1G,那么可以直... 查看详情

《30天吃掉那只tensorflow2.0》3-1低阶api示范(代码片段)

3-1低阶API示范下面的范例使用TensorFlow的低阶API实现线性回归模型和DNN二分类模型。低阶API主要包括张量操作,计算图和自动微分。importtensorflowastf#打印时间分割线@tf.functiondefprintbar():today_ts=tf.timestamp()% 查看详情

tensorflow2.0——波士顿房价数据与房间数关系的预测(代码片段)

importtensorflowastfimportmatplotlib.pylabaspltimportnumpyasnp#调用数据boston_house=tf.keras.datasets.boston_housing(train_x,train_y),(test_x,test_y)=boston_house.load_data(test_split=0.1)room_num=train_x 查看详情

深度学习之基于tensorflow2.0实现vgg16网络(代码片段)

...有了提升,VGG16与VGG19是VGG系列的代表,本次基于Tensorflow2.0实现VGG16网络。1.VGG16网络简介VGG16网络模型在2014年ImageNet比赛上脱颖而出,取得了在分类任务上排名第二,在定位任务上排名第一的好成绩。VGG16网络相比... 查看详情