
tensorflow深度学习算法
文章平均质量分 66
基于tensorflow的深度学习算法与传统机器学习算法实现
bitcarmanlee
这个作者很懒,什么都没留下…
展开
-
在python3.8安装tensorflow 1.14.0
想安装tf 1.14.0的版本,终端直接报错。具体来说,需要什么版本就输入什么版本。原创 2023-10-12 15:50:04 · 1879 阅读 · 2 评论 -
深度模型 loss为nan解决方案详解
1.loss为nan深度模型进行训练的时候,经常出现loss为nan的情况。比如某一次训练过程的输出如下:Epoch 1/50 1/303 [..............................] - ETA: 0s - loss: 278.5685 - accuracy: 0.0000e+00 47/303 [===>..........................] - ETA: 0s - loss: nan - accuracy: 0.5745 95/3原创 2022-03-21 19:20:00 · 20320 阅读 · 1 评论 -
深度学习中的梯度消失与梯度爆炸及解决方案
1.梯度消失与梯度爆炸反向传播算法在神经网络中非常常见,可以说是整个深度学习的基石。在反向传播中,经常会出现梯度消失与梯度爆炸的问题。梯度消失产生的原因一般有两种情况:一是结构较深的网络,二是采用了不太合适的激活函数。而梯度爆炸一般也有两种情况:一是结构较深的网络,二是初始化权重不合适,权重值太大。从网上找了一张深度网络示例图,简单说明一下梯度消失或者爆炸的问题。其中σ′(z4)\sigma'(z_4)σ′(z4)表示激活层的导数,w4w_4w4是该层的权重。σ′(z4)w4\sigma'(z_原创 2022-02-23 20:50:55 · 4451 阅读 · 0 评论 -
tensorflow 2.X中构建模型的三种方式:Sequential, Functional, Subclassing
0.前言tf 2.x与1.x相比,API的变化较大,构建模型的方式也有所差异。我们先直接说结论,在2.x中,tf构建模型的方式有如下三种:1.tf.keras.Sequential2.keras Functional API3.keras Model Subclassing下面我们以一个简单的线性回归模型为例,说明一下这三种模型构建的使用方式。1.通过Sequential构建@keras_export('keras.Sequential', 'keras.models.Sequential')原创 2022-02-22 14:49:54 · 2821 阅读 · 0 评论 -
tensorflow中的py_function与watch
1.py_function函数py_function是tensorflow 2.x系列中的API。@tf_export("py_function")@dispatch.add_dispatch_supportdef eager_py_func(func, inp, Tout, name=None): """Wraps a python function into a TensorFlow op that executes it eagerly. This function allows e原创 2022-02-10 16:25:47 · 1038 阅读 · 0 评论 -
深度学习优化算法大全系列7:NAdam,算法选择,调参
1.NAdam集大成前面我们讲Adam的时候,提到Adam是Adaptive+Momentum。更前面的时候,我们还提到Nesterov,如果把Nesterov跟Adam结果,就是我们最后的集大成者NAdam。class Nadam(Optimizer): """Nesterov Adam optimizer. Much like Adam is essentially RMSprop with momentum, Nadam is Adam RMSprop with Nesterov m原创 2022-01-14 11:34:51 · 5328 阅读 · 1 评论 -
深度学习优化算法大全系列6:Adam
1.Adam是啥前面铺垫了这么多,终于铺垫到Adam了。作为最常用的优化器之一,很多同学可能都听说过Adam的名字,但是Adam是什么意思可能并不清楚。Adam其实包括两部分:Ada+M。其中,Ada就是我们前面提到的Adaptive,而M是我们一直在讲的Momentum。结合我们前面提到的内容,SGD中的一阶动量计算方式:mt=β1mt−1+(1−β1)gtm_t = \beta_1 m_{t-1} + (1-\beta_1)g_tmt=β1mt−1+(1−β1)gt而在AdaDelta原创 2022-01-14 11:04:59 · 10841 阅读 · 0 评论 -
深度学习优化算法大全系列5:AdaDelta,RMSProp
1.AdaGrad的缺点前面在讲到AdaGrad的时候,我们也提到了他的缺点:其梯度累积的历史是单调递增的,导致训练越往后期学习率越小,学习率是一个单调递减不可逆的过程。因此我们可以只关注一段时间内梯度的累积,而不用关心历史所有时间梯度的累积,这样可以使得学习率不会一直保持单调递减,也是AdaDelta算法中Delta的由来。2.AdaDelta/RMSProp优化AdaDelta/RMSProp算法,主要是通过一个衰减系数,来控制历史梯度对当前的影响。而指数移动的平均值,差不多是过去一段时间的平均值原创 2022-01-14 10:30:34 · 1129 阅读 · 0 评论 -
深度学习优化算法大全系列4:AdaGrad(Adaptive Gradient)
1.参数调整之前提到的SGD-Momentum(动量), NAG等算法,都是针对梯度的方向做相关优化,而且使用的都是一阶动量。而神经网络有许多超参数(Hyper-Parameter),这些超参数的选择也是模型选择调优的一项重要工作,因此很多算法工程师也自己戏谑为"调参工程师"或者"调包侠",就可以看出参数的重要性。在经典的梯度下降中,不同的变量,采用的是一个全局的学习率。但是实际情况中,不同的变量对于目标函数的依赖不同。举个简单的例子,对于有些参数,因为特征出现次数多属于稠密特征,可能在训练开始不就以后原创 2022-01-13 11:03:22 · 1517 阅读 · 1 评论 -
深度学习优化算法大全系列3:NAG(Nesterov Acceleration Gradient)
1.NAG与SGD-M的区别NAG全称为Nesterov Accelerated Gradient,是在SGD-Momentum基础进一步优化所得。前面的文章我们提到过,SGD-M主要是利用历史累积动量来代替当前梯度从而达到减小震荡,加速收敛的目的。而NAG与SGD-M的区别在于,在计算当前梯度的时候,先跟随历史累积动量前进一步,然后再看下一步怎么走。2.算法流程假定初始参数为θ\thetaθ,初始动量vvv,动量超参数为α\alphaα,梯度超参数为ϵ\epsilonϵ,则整个NAG算法流程如下:原创 2022-01-12 14:50:46 · 2892 阅读 · 0 评论 -
深度学习优化算法大全系列2: Momentum(动量)
1.Momentum要解决的问题SGD有个问题就是收敛过程会产生震荡,这个相信大家都明白。Momentum主要解决的就是这个问题。具体的解决思路为在SGD基础上引入一阶动量,公式可以表示如下:mt=β1⋅mt−1+(1−β1)⋅gtm_t = \beta_1 \cdot m_{t-1} + (1- \beta_1) \cdot g_tmt=β1⋅mt−1+(1−β1)⋅gt其中,β1\beta_1β1为超参数,经验值为0.9。β1\beta_1β1越大,说明当前动量主要由以前累积的方原创 2022-01-10 19:34:15 · 2150 阅读 · 0 评论 -
深度学习优化算法大全系列1:概览
1.深度学习优化算法概览图深度学习(其实也包括传统的机器学习)中的优化算法,丰富多彩多种多样。如果没有从逻辑上有条主线理清楚,很容易会陷入混乱。因此我参考前人的总结,特意总结了一张图,将这些优化算法的逻辑关系理顺一下。上面的图,从两个方面对优化算法进行逻辑梳理:以最基础的SGD为起点,左半部分针对梯度方向进行优化,右半部分针对学习率进行优化。根据上面图片,不难看出,深度学习优化算法发展过程基本如下:SGD->SGDM->Nesterov->AdaGrad->AdaDelta原创 2022-01-10 17:28:12 · 953 阅读 · 0 评论 -
focal loss小结
论文原地址https://arxiv.org/pdf/1708.02002.pdf论文中讲述focal loss思想的部分As our experiments will show, the large class imbalance encountered during training of dense detectors overwhelms the cross entropy loss. Easily classified negatives comprise the majority of t原创 2021-10-12 16:48:32 · 444 阅读 · 0 评论 -
深度学习中降低过拟合(OverFitting)的方法
0.前言过拟合(OverFitting)问题在机器学习中很常见,即模型在训练集数据上表现很好,但在测试集与新数据集上泛化能力很差,这就是过拟合。1.过拟合的原因造成过拟合的原因很多。常见的如下1.训练集数据太少,很容易就过拟合了。2.训练集测试集的数据分布不一致,这点很容易被忽略。比如有的算法要求数据集符合高斯分布,训练集也满足条件,但是上线以后线上数据分布发生了变化,效果肯定不会太好。3.模型本身特别复杂。比如树模型,如果树的棵数太多,深度太大,也很容易就过拟合。2.深度学习中解决过拟合问题原创 2021-03-12 14:17:57 · 13452 阅读 · 0 评论 -
ROC曲线与PR曲线对比
1.ROC曲线TPR=TPP=TPTP+FNTPR = \frac{TP}{P} = \frac{TP}{TP + FN}TPR=PTP=TP+FNTPFPR=FPN=FPFP+TNFPR = \frac{FP}{N} = \frac{FP}{FP + TN}FPR=NFP=FP+TNFPROC曲线的纵坐标为TPR,真正率,其实也是召回率。分母为所有实际正样本。ROC曲线的纵坐标为FPR,假正率,是预测错误的负样本(实际为负样本,预测成正样本,所以分子是FP)在所有实际负样本中的占比。RO原创 2021-03-11 11:42:13 · 3874 阅读 · 2 评论 -
常用激活函数总结
1.sigmoid函数sigmoid函数的形式为:f(x)=11+e−xf(x) = \frac{1}{1 + e^{-x}}f(x)=1+e−x1其导数形式为:f′(x)=f(x)(1−f(x))f'(x) = f(x) (1 - f(x))f′(x)=f(x)(1−f(x))sigmoid经常用于隐层神经元输出,函数与导数的图像如下观察函数的图像,我们很容易发现其优点与缺点。优点:1.输出值再(0,1)之间,输出的范围在稳定的范围内,可以用作输出层。实际上sigmoid经常用作输出层原创 2021-03-10 20:27:38 · 2259 阅读 · 1 评论 -
tensorflow模型部署与python java API线上调用
0.前言随着深度模型的普及,线上越来越多的模型换成了深度模型,与此对应的线上模型的部署与调用方式也会发生变化。下面我们就来介绍一下分别用python代码与java代码调用训练好的模型。1.模型训练首先我们训练一个简单的模型 y=3x+0.1y = 3x + 0.1y=3x+0.1#!/usr/bin/env python# encoding: utf-8"""@author: wanglei@time: 2020/7/30 上午9:25"""import tensorflow as原创 2020-07-30 16:33:47 · 1423 阅读 · 1 评论 -
tensorflow Dataset操作
1.Dataset简介Dataset是tf 1.3加入的新API,主要是用于相关的数据处理与构建,并输入模型。之前的版本处理数据的方式一般有:1.使用placeholder,从内存中读取数据,很多早期tf相关的代码与例子大部分都是使用这种方式。2.使用队列机制读取硬盘上的数据。2.from_tensor_slicesfrom_tensor_slices是dataset里经常被使用到的函数,作用就是对给定的各种数据,包括元祖,列表,张量等进行切片。。举个常见的例子import tensorfl原创 2020-07-23 11:01:49 · 798 阅读 · 0 评论 -
tensorflow手动实现算法之三逻辑回归
1.逻辑回归算法逻辑回归是日常工作中最常用的算法之一。虽然逻辑回归很简单,出现的年代也比较久远,但是实现简单,可解释性强,一般效果也不会太差,尤其在处理海量数据集的时候具有性能上的巨大优势,因此逻辑回归一般会被用作线上算法的baseline版本之一。之前逻辑回归系列文章为什么要使用logistic函数损失函数(cost function)详解梯度下降训练方法2.tensorflow实现...原创 2020-04-29 16:34:54 · 743 阅读 · 0 评论 -
tensorflow手动实现算法之二多元线性回归
1.多元线性回归与前面线性回归不同,线性回归的变量X只有一维,而多元线性回归的输入 X有多维。其他方面都很类似。2.代码实现'''0.00632 18.00 2.310 0 0.5380 6.5750 65.20 4.0900 1 296.0 15.30 396.90 4.98 24.000.02731 0.00 7.070 0 0.4690 ...原创 2020-04-28 20:54:43 · 572 阅读 · 0 评论 -
tensorflow手动实现算法之一线性回归
0.前言现在算法相关的框架与工具,封装得越来越好,调用越来越方便,以至于很多算法工程师被嘲笑或者自嘲为"调包侠",“调参侠”。确实在实际工作中,需要自己从头到尾实现算法的机会越来越少,尤其是分布式的系统,最多就是在框架实现的基础之上拉出一部分逻辑进行二次开发重新封装一下。即便如此,弄清楚算法的原理与流程,也还是有必要的,这样更方便实际中debug,定位问题,调整参数等等。因此,本人打算基于ten...原创 2020-04-28 11:26:42 · 546 阅读 · 0 评论