Monthly Archive: November 2021

注意力机制资料收集 0

注意力机制资料收集

一、 信息边传递边衰减 所有人都能学会用Python写出RNN-LSTM代码! http://www.toutiao.com/i6402514355929219586/?tt_from=weixin&utm_campaign=client_share&from=groupmessage&app=news_article&utm_source=weixin&iid=9019236026&utm_medium=toutiao_android&wxshare_count=1 二、 超智能体—LSTM实战 循环神经网络——scan实现LSTM – 知乎专栏 https://zhuanlan.zhihu.com/p/25821063 循环神经网络——双向LSTM&GRU – 知乎专栏 https://zhuanlan.zhihu.com/p/25858226 代码演示LV3 · 超智能体 https://yjango.gitbooks.io/superorganism/content/%E4%BB%A3%E7%A0%81%E6%BC%94%E7%A4%BAlv3.html Awesome-rnn https://github.com/kjw0612/awesome-rnn 三、博客集 https://blog.heuritech.com/2016/01/20/attention-mechanism/ http://smerity.com/articles/2016/google_nmt_arch.html http://blog.evjang.com/2016/06/understanding-and-implementing.html http://www.wildml.com/2016/01/attention-and-memory-in-deep-learning-and-nlp/ http://distill.pub/2016/augmented-rnns/ https://devblogs.nvidia.com/parallelforall/introduction-neural-machine-translation-with-gpus/ https://www.quora.com/What-is-exactly-the-attention-mechanism-introduced-to-RNN-recurrent-neural-network-It-would-be-nice-if-you-could-make-it-easy-to-understand https://explosion.ai/blog/deep-learning-formula-nlp https://research.googleblog.com/2016/09/a-neural-network-for-machine.html https://blog.themusio.com/2016/03/25/attentionmemory-in-deep-learning/ http://torch.ch/blog/2015/09/21/rmva.html 三、 注意力模型的总结...

在Jupyter notebook中调试python程序 0

在Jupyter notebook中调试python程序

Jupyter notebook简洁易用,已成为数据分析、机器学习领域的宠儿。如果大家在运行程序的过程中,出现了bug,免不了需要进行调试。在IDE(集成开发环境)中调试和在Jupyter notebook中调试还是有区别的。今天我们来学习下如何在Jupyter notebook中调试程序。 jupyter的调试是通过python自带的pdb库来实现的。分为如下几个步骤(图片可点击放大查看):     1)首先需要import pdb     2)然后在import后写入语句pdb.set_trace()     3)下面以一段简单的代码为例展示几个功能:         打开jupyter的home页面新建一个文件输入以下语句 <span class="code-snippet_outer"><span class="code-snippet__keyword">import</span> pdb</span></code><code><span class="code-snippet_outer">pdb.set_trace()</span></code><code><span class="code-snippet_outer">def sum(a,b):</span></code><code><span class="code-snippet_outer"> <span class="code-snippet__built_in">c</span>=a+b</span></code><code><span class="code-snippet_outer"> <span class="code-snippet__keyword">return</span> <span class="code-snippet__built_in">c</span></span></code><code><span class="code-snippet_outer">a=<span class="code-snippet__number">1</span></span></code><code><span class="code-snippet_outer">b=<span class="code-snippet__number">2</span></span></code><code><span class="code-snippet_outer"><span class="code-snippet__built_in">c</span>=sum(a,b)</span></code><code><span class="code-snippet_outer"><span class="code-snippet__built_in">print</span>(<span...

梯度下降极简入门 0

梯度下降极简入门

导 语 梯度下降及其变体被用作训练过程的关键部分在机器学习中广泛使用。梯度下降中的“梯度”是指单变量导数的推广形式,即多元变量求导。 梯度下降法是解决“优化问题”的迭代方法,其中优化问题是指围绕寻找函数的全局最小值或最大值而展开的数学问题。我们将很快看到,对于简单的优化问题可以不用梯度下降。当事情变得复杂时,我们则需要用诸如梯度下降之类的迭代法,当然和神经网络相关的优化问题确实足够复杂。 01 重新回顾优化问题         假设你已经购买了200米的铁丝网。您想使用此围栏为羊群创建一个矩形牧场。如何确定使牧场内部面积最大化时,牧场对应的长度和宽度?         使用标准的分析方法来解决这个问题,我们首先要写一个方程式来表示我们的问题。首先,我们知道两件事: <span class="code-snippet_outer">area(面积)=<span class="code-snippet__keyword">length</span>(长度)*width(宽度)</span></code><code><span class="code-snippet_outer">(<span class="code-snippet__number">2</span> * <span class="code-snippet__keyword">length</span>)+(<span class="code-snippet__number">2</span> * width)= <span class="code-snippet__number">200</span></span>         但是我们想用一个变量而不是两个变量来表示面积,所以我们可以求解这两个方程中的第二个变量的宽度: <span class="code-snippet_outer">2 * width = 200–2 * length</span></code><code><span class="code-snippet_outer">width = [200-2 *...

深度学习中为什么模型输入大多是正方形图像? 0

深度学习中为什么模型输入大多是正方形图像?

导 语 大多数深度学习模型(例如VGG,ResNet等)都需要正方形图像作为输入,通常像素大小为224×224。输入的长宽必须相等是有原因的吗?还是可以建立一个100×200输入的卷积神经网络模型?更大的像素尺寸(例如512×512)会带来更多好处吗? 01 出于实用性的折衷 卷积神经网络不需要特定的像素尺寸即可正常运行。选择这些值是出于实用的原因:例如图像分辨率与参数数量和所需的训练集大小之间的折衷。毕竟,输入图像尺寸越大,模型的参数或者计算量也会随之上升。 02 方便获取ROI(感兴趣目标) 另外,如果数据集图片具有一系列不同的纵横比(比如肖像竖图、风景横图),考虑目标对象通常在中心,那么从中间采取方形作物是一个合理的方案。 03 图像分辨率的影响 当增加输入图像的大小时,还将增加网络处理该输入图像所需的噪声和数据变动。这可能意味着模型需要加入更多的网络层(比如卷积和池化),同时也可能意味着需要准备更多的训练数据。这将会增加训练模型所需的计算资源。当然如果可以接受这些代价,更高分辨率的图像一般会得到更好的模型。 关于是否需要更高分辨率的一个判断方法是:如果该任务领域的人类专家可以利用高分辨率图像来更好地完成任务,那么大尺寸图像输入是可取的。在回归系统中可能就是这种情况,比如在人脸识别系统中,高分辨率的图片保留更多的人脸特征,更容易对人进行判别,这类任务使用大图片是合适的。 1 END 1 长 按 关 注 获取最新AI资讯与实战案例 实用AI客栈 小编微信号 : langu86

梯度下降是否总能收敛到最佳值如果迭代次数够多? 0

梯度下降是否总能收敛到最佳值如果迭代次数够多?

导 语 梯度下降及其变体算法目前在机器学习领域应用广泛。一般情况下,如果学习率太大,它可能会偏离最佳值。是否当它偏离某个最佳值时,那么它将最终达到另一个最佳值吗?梯度下降是否总能收敛到最佳值如果迭代次数够多? 01 梯度下降与全局最优 梯度下降是一种旨在查找损失函数最佳值的算法,但是这些最佳值不一定是全局的。如果发生了它偏离最佳值的情况,它可能会收敛到另一个最佳点,但是这种可能性并不太大。原因是学习率可能很大,无法促使降低下一个最佳点,并且损失值波动的可能性远大于收敛。 02 两种视角 关于梯度下降,主要有两个方向的视角:机器学习的视角和深度学习的视角。从常见机器学习算法的角度看,比如基于梯度下降的线性回归算法,通常认为梯度下降将找到局部最优或者全局最优。 但对深度学习模型而言,输入特征的维数过大,所有维度的特征都位于最优值时模型刚好位于某个点上的这种特定点的数量不是很多。因此大多数时候模型会收敛到鞍点(非局部或者全局最优),而不是希望梯度下降在损失函数中找到最佳值。这是大量训练数据和相对较多的训练次数导致深度学习模型优于其他算法的原因之一。 1 END 1 长 按 关 注 获取最新AI资讯与实战案例 实用AI客栈 小编微信号 : langu86

模型训练过程中出现Nan该怎么办? 0

模型训练过程中出现Nan该怎么办?

导 语 在深度学习模型训练过程中,有时会出现损失值为Nan的情况。那么在训练过程中发生Nan的最常见原因是什么?其次,有什么方法可以解决这个问题? 01 无效输入 原因:输入中包含Nan或者输入为空,对于图像而言输入为损坏的图片。  检查方法:使用python的异常检测机制对数据进行合格检测 解决方法:修改代码满足输入为有效的数据,比如在检查过程中先删除受损的图片。 02 损失函数 原因:有时损耗函数的计算会导致Nan的出现。例如给InfogainLoss层提供非归一化的值或者使用有bug的自定义损失层等。 检查方法:了解损失函数对数据输入的格式及数据范围要求,仔细检查代码实现。 解决方法:修改损失函数的代码bug 03 梯度爆炸 原因:梯度爆炸会使模型发散,因此损失值出现Nan。  检查方法:查看程序运行日志,查找每次模型迭代时打印的损失值。一般在出现Nan前,损失值在某次迭代后开始显着增长,最终损失将太大而无法用浮点变量表示,它将变为Nan。 解决方法:将初始学习率比之前减少一个数量级或者更多。如果模型有多个损失项,则应检查日志以了解哪项导致梯度爆炸,然后减少该特定项的损失权重(loss_weight)。 1 END 1 长 按 关 注 获取最新AI资讯与实战案例 实用AI客栈 小编微信号 : langu86

如何设置神经网络中神经元和网络层的数量? 0

如何设置神经网络中神经元和网络层的数量?

导 语 对于机器学习初学者而言,对这样两个问题会比较困惑:1) 给定神经网络,如何确定中间层数数?2)如何确定每个中间层的神经元数量? 神经网络模型有个重要的定理,就是万能逼近原理,它指的是存在一个足够大的网络能够达到我们所希望的任意精度。不过这个定理没有给出具体计算网络层数和神经元个数的方法。 真正了解哪种架构最有效以及最暴力的唯一方法是尝试所有架构,然后选择最佳架构。然而对于神经网络而言,这非常困难,因为每种模型都需要花费很多时间来训练。有种做法是先训练一个过大的模型,然后通过消除对网络没有太大贡献的权重来修剪模型。 实际上,没有通用的确定网络层数和神经元个数的方法。不过我们可以从下面两个略抽象的方面来间接探讨这个问题。 01 更深的网络模型 更深的网络模型意味着模型拥有更多的中间层(隐藏层)。它的作用是允许模型计算更复杂的特征。例如,在卷积神经网络中,模型前几层代表“低级”特征,例如边缘;最后几层代表“高级”特征,例如面部,身体部位等。对于非结构化数据而言(例如图像),较深的模型会充分挖掘数据的高层次复杂特征。 02 更宽的网络模型 模型层数多(更深)意味着可以创建更复杂的特征,模型更宽(单层神经元数量多)则意味着可以创建更多的特征。某些问题只需要提取数据简单的特征,不过会需要很多这样简单的特征,这样更宽的模型就会派上用场。通常,到网络末端的维度越来越窄,由于复杂的特征比简单的特征承载更多的信息,因此网络偏末端更需要体现模型的深度而不是宽度。 1 END 1 长 按 关 注 获取最新AI资讯与实战案例 实用AI客栈 小编微信号 : langu86

想用Python调用C++代码?Pytorch原来是这样做的 0

想用Python调用C++代码?Pytorch原来是这样做的

导 语 目前绝大多数深度学习框架,为了编程方面的便利,都支持Python接口。正如硬币的两面一样,Python的灵活性是建立在它的性能损耗上的。因此对于AI框架,通常做法是把对性能有极高要求的运算(比如卷积等)用C++实现,然后再用Python去调用C++的模块。这是怎么实现的呢?我们以Pytorch为例,逐步剖析这个调用过程,下面有请我们今天的主角:pybind11 1-安装 pybind11 git clone https://github.com/pybind/pybind11.git cd pybind11 mkdir build cd build cmake .. sudo make -j10 install make install会将pybind11安装在/usr/local下面 2-编写示例程序 #include namespace py = pybind11;int add(int i, int j) { return i...

python代码阅读神器,加速掌握开源项目 0

python代码阅读神器,加速掌握开源项目

导 语 阅读知名开源项目源码可以帮我们快速提升代码功力,学到很多编程方法和技巧。工欲善其事,必先利其器。经过小编的体验,将下面这款源码阅读神器分享给大家。 (温馨提示:多图,流量党慎入,尽量在WIFI模式下观看) Sourcetrail简介 我们今天的主角是Sourcetrail,是一款开源免费的代码阅读神器。Sourcetrail软件源码地址位于https://github.com/CoatiSoftware/Sourcetrail。以计算机视觉领域著名的detectron2开源项目为例,我们来看下这款利器对源码的可视化分析效果。 1-新建项目 首先我们需要新建一个项目,点击蓝色箭头所指的”New Project”即可,接着进行如下配置: 1)Sourcetrail Project Name: 这里填入项目名称 2)Sourcetrail Project Location:这里根据蓝色箭头找到代码根目录,比如detectron2代码的根目录目前位于E:/code/detectron2-0.1.3文件夹。 3)Add Source Group:点击该按钮进行项目编程语言设置 2-项目设置 detectron2由python编写,所有这里选择python,然后点击右下角的”Next” 接着先设置向下的蓝色箭头处的选项,选择python安装的位置(用conda安装则选择conda下面的具体虚拟环境)。然后设置向上的蓝色箭头处的选项,选择源代码文件(默认为./) 点击右下角的”create”按钮 3-开始索引 在界面点击“start”即开始进行索引 接着会开始进行索引(需要等待,具体时间和文件数量有关) 索引结束后点击”ok”即可 4-快速查找 在窗口输入”maskrcnn”即可找到和关键词相关的变量、函数、类等 选择“mask_head.BaseMaskRCNNHead”类,即可查看该类的函数以及继承等关系         对Sourcetrail的基本介绍就到此结束了,更多功能和介绍可参考https://www.sourcetrail.com/documentation/。 扫描下方二维码,关注公众号,后台回复”代码阅读工具下载”即可获取Sourcetrail安装程序网盘地址。 1 END...