100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > cnn和rnn可以结合使用吗 rnn和cnn优点缺点对比

cnn和rnn可以结合使用吗 rnn和cnn优点缺点对比

时间:2018-08-08 09:39:49

相关推荐

cnn和rnn可以结合使用吗 rnn和cnn优点缺点对比

CNN和RNN在文本分类过程中的区别整理

用CNN卷积的情况,这里面有几个关键点:一个是文本跟图片不一样,图片有长宽,然后还有深度(RGB)。

对应到文本上,假设文章总共N个词,每个词嵌入维度K维,那么输入是N*K的,N可以理解为高度,K作为长度,深度为1。那么卷积的时候的特征抽取器(filter)高度h一般设置多大呢?

一般可以从3开始,表示捕获住trigram特征。更多的是使用几种不同的filter(比如有高度各为2,3,5的)。

特征抽取器(filter)的长度一般设置为词向量的维度,这样保证每个filter抽取出来一个N-h+1个特征点,而不是一个平面(想想为什么)。

最重要的,在文本上work的pooling层一般是max-pooling,对每个filter应用整个序列上的max-pooling得到一个特征点(也有用k-max-pooling得到k个点),组合多个filter就能得到一系列特征,最后一个全连接层做分类。

这里为什么是max-pooling而不是min-pooling呢?一般来说,pooling后我们引入非线性是用Relu,relu对于小于0的直接就不激活了。

然后我们对比图像的深度,文本一般深度只有一个,如何增加深度以及为什么增加呢?

一般我们的词向量都是先预训练出来的,然后在一个特定任务上使用,梯度会回传回来进一步finetune,如果语料不是特别大,这个finetune过程只会对部分词进行更新,有些词就一直不动,这样在测试阶段,出现那些没finetune到的词就会有所偏差。

我们可以同时使用两份词向量(相当于通道数为2,深度加深为2),一份finetune一份静态地不更新,来缓解前面提到的问题。

二)对于RNN做文本分类,相当于把每个词作为一个时间节点,把词向量作为每个单元的输入特征,一般会组合前向以及后向来构成双向特征,计算后每个单元有个状态特征以及输出特征,文本分类一般组合每一个单元的输出特征求个平均喂给全连接层来做分类。

求平均这个操作可以替换为更通用的注意力机制,复杂度更高点,效果更好。

复杂点的模型会分层来做,句子界别的rnn然后attention,最后文档级别在前一层的基础上再rnn+attention,效果据说能更进一步提升。

谷歌人工智能写作项目:爱发猫

在做语音识别时,RNN和CNN各有什么优缺点

关注问题写回答1个回答默认排序YJangoYJango日本会津大学人机界面实验室博士在读17人赞同了该回答longdependence方面是LSTM的优势好文案

比如句子“我在日本生活过五年,我可以说流利的日语”,单向LSTM可以在之前所说内容的基础上对当前内容进行判断,可以照顾到日本与日语之间的关系。双向LSTM还可以基于未来的内容判断当前内容。

主要是这种判断可以在整个句子之间进行。同时如果用LSTM做回归的话,输出不需要做后续处理就非常平滑。

CNN的语音识别的特征(feature)通常是是频谱图(spectrogram),类似图片识别的处理方式。同样也可以利用filtersize,基于过去和未来的信息判断当前内容。

但由于size固定,longdependence方面不如LSTM。不过CNN可以同一信息用不同的featurem。

基于RNN的seq2seq与基于CNN的seq2seq区别,为什么后者效果更好

作者:贾扬清链接:来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。终于碰到一个是真心谈技术的问题,不容易啊。。。在热那亚机场等飞机,所以时间有限,答得比较简单,请勿怪罪。

的确,如题主所说,RNN在数学上是可以处理任意长度的数据的。我们在TensorFlow中使用bucket的原因主要是为了工程实现的效率:(1)为什么不直接在graph的层面上支持可变长度的计算?

在实现上,这需要使用一个将长度作为一个可变参数的whileloop,而whileloop的实现又涉及到其他一系列问题,比如说自动梯度计算(autodiff)等等,并不是一个很容易的事情。

并且,如果要保证运行时的schedule的效率,还有一些不是那么简单地代码要改。

(2)即使可以支持whileloop,还会有的一个问题是,我们在算minibatch,而每个minibatch里面不同的sequence有不同的长度。

于是有两种解决方案:(a)对于每个minibatch,取最大的长度,然后跑那个最大长度。

(b)实现一个sub-minibatch的计算方法,在每一个timestamp检测每个样本是否已经到达它的最大长度,如果超过就不计算。

(3)可以看到,(2a)是一个很浪费的算法,如果一个minibatch里面有一个很长的,大家都得跟着算到那个长度,所以不好。

(2b)对于每个operator的要求都很高,做过数值优化的都知道,基本的计算比如说矩阵乘积,数据结构越简单越好,如果你要实现一个跳过某几行只算某几行的方法。。。goodluck。

(4)于是,一个折衷的方案就是,对于sequence先做聚类,预设几个固定的长度bucket,然后每个sequence都放到它所属的bucket里面去,然后pad到固定的长度。

这样一来,首先我们不需要折腾whileloop了,每一个bucket都是一个固定的computationgraph;其次,每一个sequence的pad都不是很多,对于计算资源的浪费很小;再次,这样的实现很简单,就是一个给长度聚类,对于framework的要求很低。

RNN的bucketing其实是一个很好的例子:在深度学习的算法实现上,数学是一部分,工程是另一部分。好的实现,都是在数学的优雅和工程的效率之间寻找一个最优折衷的过程。-。

如何理解用rnn替代cnn做图像处理

就是将目标特征从背景中分割出来。医学图像分割,可以查看感兴趣的区域,从而忽略不需要的区域的干扰。

如看骨折,只需要将骨头所表示的特征图像(一般是一定会度值的一块区域)从背景(如肌肉,另一种灰度值)分割出来,而其它的肌肉等则不显示(为黑色)。可以更有利于医生分析病情而减少误判。

深度学习的主要分类是什么呀?这些网络cnn dbn dnm rnn是怎样的关系

简单来说:1)深度学习(DeepLearning)只是机器学习(MachineLearning)的一种类别,一个子领域。

机器学习>深度学习2)大数据(BigData)不是具体的方法,甚至不算具体的研究学科,而只是对某一类问题,或需处理的数据的描述具体来说:1)机器学习(MachineLearning)是一个大的方向,里面包括了很多种approach,比如deeplearning,GMM,SVM,HMM,dictionarylearning,knn,Adaboosting...不同的方法会使用不同的模型,不同的假设,不同的解法。

这些模型可以是线性,也可以是非线性的。

他们可能是基于统计的,也可能是基于稀疏的....不过他们的共同点是:都是data-driven的模型,都是学习一种更加abstract的方式来表达特定的数据,假设和模型都对特定数据广泛适用。

好处是,这种学习出来的表达方式可以帮助我们更好的理解和分析数据,挖掘数据隐藏的结构和关系。

MachineLearning的任务也可以不同,可以是预测(prediction),分类(classification),聚类(clustering),识别(recognition),重建(reconstruction),约束(regularization),甚至降噪(denoising),超分辨(super-resolution),除马赛克(Demosaicing)等等....2)深度学习(DeepLearning)是机器学习的一个子类,一般特指学习高层数的网络结构。

这个结构中通常会结合线性和非线性的关系。DeepLearning也会分各种不同的模型,比如CNN,RNN,DBN...他们的解法也会不同。

DeepLearning目前非常流行,因为他们在图像,视觉,语音等各种应用中表现出了很好的empiricalperformance。

并且利用gpu的并行运算,在模型相当复杂,数据特别大量的情况下,依然可以达到很理想的学习速度。

因为DeepLearning往往会构建多层数,多节点,多复杂度的模型,人们依然缺乏多里面学习的结构模型的理解。

很多时候,DeepLearning甚至会被认为拥有类似于人类神经网络的结构,并且这种类似性被当做deeplearning居然更大potential的依据。

但答主个人认为,其实这略有些牵强...听起来更像是先有了这种network的结构,再找一个类似性。

当然,这仅仅是个人观点...(私货私货)3)大数据(BigData,我们也叫他逼格数据....)是对数据和问题的描述。

通常被广泛接受的定义是3个V上的“大”:Volume(数据量),Velocity(数据速度)还有variety(数据类别)。

大数据问题(Big-dataproblem)可以指那种在这三个V上因为大而带来的挑战。Volume很好理解。

一般也可以认为是Large-scaledata(其实学术上用这个更准确,只是我们出去吹逼的时候就都叫bigdata了...)。“大”可以是数据的维度,也可以是数据的size。

一般claim自己是big-data的算法会比较scalable,复杂度上对这两个不敏感。

算法和系统上,人们喜欢选择并行(Parallel),分布(distributed)等属性的方法来增加capability。ITjob----采集。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。