前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >基于TensorFlow的循环神经网络生成矢量格式的伪造汉字

基于TensorFlow的循环神经网络生成矢量格式的伪造汉字

作者头像
花落花飞去
发布于 2018-02-08 02:53:24
发布于 2018-02-08 02:53:24
2.8K0
举报
文章被收录于专栏:人工智能人工智能
基于sketch-rnn(LSTM和MDN)生成SVG格式的伪造汉字字符。代码详见GitHub。
基于sketch-rnn(LSTM和MDN)生成SVG格式的伪造汉字字符。代码详见GitHub。

注意:对于中文汉字和日文汉字我根据具体情况交替使用它们。

更新:

宾夕法尼亚大学语言学院关于这项工作的讨论

这篇文章也被@weakish 翻译成了简体中文。

介绍

这是记录我的实验的博客文章系列中的第三篇文章,实验是基于TensorFlow的。为了能更好地理解,可以阅读第一篇关于混合密度网络(MDNs)的文章,以及第二篇结合MDN生成伪造手写体的例子来写的关于长短期记忆网络的文章,关于伪造手写体,Alex Graves有一篇经典论文《Generating Sequences With Recurrent Neural Networks》

我们将修改并扩展Graves的方法,使 LSTM + MDN 能够生成矢量格式的伪造汉字。方法的主要区别在于除了现有的笔划结束状态之外,还添加了对汉字内容结束状态的建模,并对这些小概率的笔的状态应用梯度提升来改进。

动机

作为一个在英语国家长大的小孩,小时候我会被父母逼着去上周六早上的课程,并在那里学习汉语。在课堂上会有听写测试,就是学生要凭记忆写出教科书上完整的课文。这使得我们间接的接触到了儒家的道德价值观念。在周末的晚上,我们不得不花费很多的时间记忆课文,来为周六的测试做准备。拿不到完美的分数会让我很不高兴。这样的事情持续了很多年。我直到现在还会做噩梦,梦到自己正在进行听写测试。我认为世界上大多数孩子都在通过这种死记硬背的方式学习中文。也许从某种意义上讲,汉语教育就像LSTM从训练集中训练造句一样。

小朋友学习汉字的例子 (图像来源网络)
小朋友学习汉字的例子 (图像来源网络)

从个人的经验来看,书写汉字与阅读汉字有很大的不同。几十年来,人们的汉字写作能力一直在下降。从日本开始,近几十年已经成为了普遍现象,现在可能就是亚洲其他地区,在这些地区,大多数人通过基于发音的输入法输入亚洲文本(日文使用假名,中文使用拼音),然后从屏幕上一堆可能的候选中选择所需的汉字。但是,当人们坐下来写一张新年贺卡邮寄给老师,却突然意识到他们忘了怎么写汉字的时候,问题就出现了。我也有这样的感觉 - 尽管我在日常生活中阅读了很多中文和日文的内容,但我还是很努力地写汉字。我注意到,虽然我们可以阅读和认识我们能够写的字符,但是反过来就不一定了。

同样在机器学习中,许多问题都从分类任务开始。这个数字是多少?这张照片是狗还是房子?这次交易是否存在欺诈?我们应该借钱给这个申请抵押贷款的家伙吗?男人还是女人?她几岁了

虽然这些任务非常有用,但我认为一个更有趣的任务是生成数据,我认为这是数据分类的扩展。相比能够阅读某个汉字,能够书写某个汉字表明我们对这个汉字有更多的了解。同理,我认为能够生成内容也是理解这个内容的关键。能够生成一个22岁的漂亮女士的照片比仅仅能够估计这个女人可能在22岁左右更令人印象深刻。

一个生成任务的例子是能实时把英语翻译为另一种语言的翻译机器的开发。生成艺术和音乐越来越受人们的欢迎。最近,出现了一些新技术,如生成对抗网络(GANs)生成看起来像真的一样的伪造的位图图像,有的图片、人脸、卧室、甚至动漫人物,对我来说,这样的问题更加令人兴奋,可以说是分类问题的延伸。

然而,我更感兴趣的是生成矢量化内容的能力。我认为很多有用的内容最好的表示是用矢量格式表示,而不是栅格化的位图图像。例如,数字化素描,CAD设计,地理位置标记数据(如我们在Strava上骑自行车的地方),科学实验数据,当然还有手写体,用矢量化数据表达可能会更好。

来自KanjiVG数据集的示例
来自KanjiVG数据集的示例

我认为各种字体和手写体最好用矢量表示,而不是位图。作为一个对设计感兴趣的人,我有点像一个font geek(热衷于各种字体的怪胎),我非常喜欢精心设计的漂亮的TrueType字体,无论显示的尺寸如何,它们都很漂亮。我认为,通过数字化书写汉字记录下来的笔划更适合作为矢量数据来表示,而且在线手写汉字数据与离线数据相比,我更喜欢前者。

在这篇博客文章中,我将介绍如何训练一个循环神经网络,生成伪造的、但似是而非的svg格式的矢量中文汉字。为了训练神经网络,我们汉字笔顺数据库中的汉字的实例输入给神经网络,这样神经网络也需要写出一个有着合理笔划顺序的汉字。

教你写漂亮汉字的游戏
教你写漂亮汉字的游戏

对于日本文化而言,笔划顺序是非常重要的,在这个社会中,过程和结果一样重要。一些书法家对待笔划顺序很认真,如果看到有人用不正确的笔划顺序写汉字,可能会很生气。日本公司甚至创造了电子游戏,让人们学习汉字的正确笔划顺序,就像上图所示。只有矢量化的数据才能真正地模拟这个笔顺并且捕捉到汉字的纯粹本质,或许这是亚洲文化的一部分。栅格化的位图汉字数据相当于在东京发行两年后以低质量的RealMedia流文件格式观看热门动漫的英语配音。因此,我们希望我们的生成循环神经网络学习书写汉字,并尊重正确的笔顺。

背景

我们的生成预测模型将使用和Graves的论文中描述的相同的框架,Graves在论文中展示了生成文本和生成手写体。Karpathy的博客char-rnn实现有一些很好的例子来说明如何使用这个框架来生成以文本表示的数据。

生成序列模型框架
生成序列模型框架

在文本生成这个例子中,假设我们已经有一个预先训练好的模型,我们将一个初始的随机字符输入到初始状态为空的模型中。模型将使用状态信息和当前输入,为下一个字符生成一个概率分布。随机取样该分布(可能我们通过应用温度来扭曲采样过程),来获取下一个字符的预测信息。采样的字符和当前的内部状态一起作为下一个输入。

符合这个框架的一个简单模型是基本的N-GRAM字符建模方法。在N-GRAM中,我们所做的只是记录前N个字符的频率,并使用前边字符的频率表作为生成下一个字符的概率分布。

这个框架也可以用循环神经网络表示,其中状态是循环LSTM节点的隐藏状态,网络的输出值可以通过应用softmax层而被转换成离散概率分布。为了训练神经网络的权重,我们需要一种方法来比较预测分布与训练数据的实际分布。通常所做的是应用交叉熵(cross-entropy)损失函数来比较softmax层之后的模型预测概率与生成的整个序列的实际数据。

Karpathy的char-rnn项目实现了Graves的论文中提到的上述网络。char-rnn不仅可以用来生成莎士比亚的剧本,还可以用来生成一些特别的文本,包括Linux源代码,LaTex文档,维基百科的xml文档,以及音乐评分。

sketch-rnn,用于svg训练数据的char-rnn

我想创建一个char-rnn类似的工具,但是为了学习绘制素描,而不是学习生成字符序列。SVG数据很容易在网上找到,虽然不像文本数据那样容易获得。最后,我创建了一个名为的工具sketch-rnn,试图从大量相关的.svg文件中学习到某种结构,并且能够生成和创建与训练集类似的新矢量化绘图。就像char-rnn如何将特朗普的话生成特朗普的智慧一样,我想能够传入大量猫的.svg图片,并有一个算法来创建新的矢量化的猫的图片。要获得足够数量的猫的svg图片是很困难的,而获取.svg汉字文件则相当容易,所以我最后把这做成了一个生成伪造汉字手写体的实验。

sketch-rnn和以前手写生成示例的博客帖子遵循相同的原理。每个图形都用类似笔划的数据建模,其中每一步数据都包含x和y轴的偏移量,以及笔是否落在纸上,并且如果笔落在纸上,还包含当前步骤和前一步骤的连线。神经网络会输出下一步的概率分布。不同于字符生成的例子,其中pdf对于每个可能的字符只是一堆离散的概率,而sketch-rnn则需要用连续的概率分布统计横、纵方向的位移,以及在下一步中笔从纸上被提起的概率(这被称为笔划结束概率)。sketch-rnn使用混合高斯分布(Mixture Gaussian Distribution)来估算下一笔的位移。这是一种被称为混合密度网络(Mixture Density Networks)的方法,在以前的博客文章中用来生成伪造手写体。

混合二维高斯密度的例子
混合二维高斯密度的例子

上面是一个使用混合高斯密度描绘汉字笔划的例子。连接起来的黑点代表笔划,LSTM和MDN算法将不断估算下一个点的位置的混合高斯概率分布。这意味着下一个位置取决于许多不同位置的混合(用不同浓度的红色椭圆表示)。每个位置本身都是x和y偏移的二维联合高斯分布,每个偏移都有一个2×2协方差矩阵。

除了笔划位置的概率分布和笔划结束概率外,我们还需要对完成这个汉字的概率建模(我们将这个概念称为字符结束概率,或内容结束概率,也记为“EOC”概率)。本来,我只是增加了另一个和笔划结束概率类似的变量,作为一个独立的随机变量去建模,但我发现实践效果不是很好。我们知道,因为每个字符结束事件(汉字写完)同时也是一个笔划结束事件(最后一个笔划写完),所以其中有一些共享信息被我们忽略了。

我花了一段时间想出了一个更好的方法来对上边说的两个信号(笔划结束概率、字符结束概率)进行建模,最后我所做的是通过神经网络中的softmax层将笔的状态建模为一组离散的状态。笔的状态分为三种:笔划完结,字符完结,落笔。并且对于每一步,模型都会计算这三个状态的概率。对比使用混合分布来模拟x和y的偏移,这似乎是一个非常优雅的方法,类似于使用char-rnn来模拟三种笔的状态。

处理训练数据

我使用了KanjiVG数据库的数据,该数据库源于开源日语学习工具Tagaini Jisho。正如前面提到的那样,写汉字时笔划的顺序很重要,即,使用不正确的笔顺顺序写汉字,到达最后一个字符的时候,它仍然是一个不正确的汉字。KanjiVG包含大约11000汉字的SVG文件,每个SVG文件的路径元素遵循日文汉字的官方笔顺。

sketch-rnn中的SketchLoader类会读取数据子目录内的所有SVG文件,并将线条和路径元素转化为更小的线条,这些更小的线条更适合训练数据。关于粒度和路径到线条转换的具体细节,请参考代码。

下面是从KanjiVG中提取的训练字符的一些训练例子:

来自KanjiVG数据集的训练实例。不同的颜色表示每个汉字的不同笔划。
来自KanjiVG数据集的训练实例。不同的颜色表示每个汉字的不同笔划。

然后,SketchLoader对象将会把从SVG文件中抽取的所有线条转存为一个由笔划数组构成的数组,并保存为一个cPickle二进制文件供以后训练使用。同时也会生成minibatch集合供以后训练使用。

对小概率事件的梯度提升

最初的结果有点令人失望,尽管生成的每一笔看上去很真实,但笔会一直“写”下去而不会移动到下一个汉字上。我发现,在处理对数似然损失函数最小化的过程中,算法经常低估或者简单地忽略了字符结束的概率。我认为这是因为字符结束事件不经常发生,大约100步才发生1次。

在Graves的手写生成问题中,这个问题没有发生。因为英语笔迹训练数据不需要对结束训练的信号进行建模,可以让计算机一直“写”下去。但是在这个问题中,我们实际上需要对算法进行训练,需要确切地知道何时停止书写,来形成一个完整的汉字。

如果本节中介绍的方法未被使用,那么计算机运行的训练结果会是如下的状态:

不知道何时停止书写的例子
不知道何时停止书写的例子

为了解决这个问题,我设计了一种增加误差的方法。因此,在发生字符结束信号时,数据点的梯度也提升了,并相应地修改损失函数以包括这些增加的权重。

生成模型:

其中 x, y, m表示下一步的横、纵偏移量和笔的状态的随机值。x、y用MDN输出的混合二维高斯分布来建模,m用softmax的one-hot输出z_m来建模。

改进后的每一步梯度提升损失函数:

 w(m)为数据中的小概率事件提高损失函数
w(m)为数据中的小概率事件提高损失函数

笔划结束点选择了10倍的权重因子,字符结束点选择了100倍的权重因子,以补偿这些事件的低概率。我发现这个方法是非常有效的,结合下一节提到的取样多样化和乱序技巧,最终的效果获得了显著地提升。

我很确信这之前已经有人在小概率事件上想到了这种加权提升的方法,因为这是一个非常明显的方法。我在网上查了一下,却找不到任何东西(最接近的是这个)。如果你找不到,那么你首先在这里听到了。

让样本多样化 - 乱序Minibatch和随机拉伸

在每个训练阶段开始时,我们将训练数据中字符的顺序进行乱序处理。笔顺数据库将字符按照相似性分组,而我希望每一批字符能更有代表性。我想增加每个Minibatch的多样性,否则算法会花较长的时间学习鱼类汉字的书写(),对世界的感知会因梯度而扭曲,认为所有的东西都是鱼,然后突然重新学习一下鸟这个汉字(),就很抓狂。当它学习到一个终极角色: 的时候,它可能会觉得自己搞砸了并且很困惑。

还有一个要考虑的是,笔顺数据集只有大约10000个汉字的样本,我觉得我们需要制造更多自己造的汉字数据来训练。所以我从扭曲MNIST训练实例中学到了一些技巧,以创建更多的训练数据。每个Minibatch都随机缩放至【原始大小-30%,原始大小+30%】之间的任何位置。数据的结构(所有东西都是空间的偏移量)使得这个拉伸很容易实施,只需将整个矩阵乘上一个系数。我没有预先计算额外的例子并存储它们,所以只是增加训练阶段的次数来做这些事。我所能做的就是用不同的缩放因子来扭曲X轴和Y轴,这是我在编写时还没有完成的,但是用一个额外的代码行来修改这个工具是很容易的。

最后,每个Minibatch都从一个字符的开始处开始,而不是从中间开始,因为我希望这个算法能够学习完整的结构,而不是从基本模式(之类)开始训练。所以下一个batch将跳到下一个字符样本的开始。因此,由于这种跳跃,每个训练阶段的Minibatch数可能不是完全相同的,但是都很接近的。

微调

刚开始的实验相当令人沮丧,因为我只是乱七八糟的一直写着算法,像一个疯狂的疯子一样编织了一张大网。我花了一些时间才想到了使用softmax对笔画结束和字符结尾进行建模的想法,我也喝了很多咖啡才提出了梯度提升的想法。

我们提高小概率事件的梯度以及多样化的训练实例所用到的技巧,改进了实验结果的质量。尽管如此,最终的结果偶尔还是会有一些不好的结果。最后我加了一个过滤器,丢弃了那些超出书写区域大小的结果,并让它们重新开始,直到结果位于指定区域内。

模型设置

我在sketch-rnngithub库中加入了一个较小的已经预先训练好的神经网络,如果你愿意的话,可以在自己的机器上通过python sample.py运行sketch-rnn

这个较小的预先训练好的神经网络每步产生24个高斯混合分布,并使用2层256个LSTM节点,在每层的输出处的dropout保持80%的概率。

我将数据缩小了15倍。这是一个有趣的问题,因为典型的训练示例在每个轴上的尺寸大约为80到160个单位。我发现一个很管用的经验,就是缩小数据,使数据的平均维数约为10×10,而且通常对于汉字而言,每个成功的步骤的偏移大约为1×1尺寸。

使用50-100个样本的Minibatch似乎效果很好。我设置了一个初始相对较大的学习率,并在每个后续的训练阶段,学习率按1%的比例下降。有时学习率太高会导致训练冲突,而冲突的那部分训练与估计字符结束的似然有关。当我们需要使用上述梯度提升方法来估计小概率事件的概率,并且这可能导致数值不稳定时,这就有点棘手了。

输出结果示例

使用sketch-rnn生成伪造的汉字手写体
使用sketch-rnn生成伪造的汉字手写体

我对结果很满意。sketch-rnn能够生成各种各样的不存在的汉字,但却有那么点像书写汉字应该有的方式。汉字的许多基本部分被配置在形成汉字结构方面有意义的位置。这就像一个小孩在努力通过汉语听写测试,并试图通过拼命填写答案来完成这个测试。

一些有趣的输出

六个扔石头的女人
六个扔石头的女人
孤单的鬼魂
孤单的鬼魂
木制食品
木制食品
urban sheep
urban sheep
啄木头的啄木鸟
啄木头的啄木鸟
禁止吃羊
禁止吃羊
捉鸟
捉鸟
受过教育的马
受过教育的马
正在听的鸟
正在听的鸟
listerine
listerine
新型的木屋
新型的木屋
能带来好运的马
能带来好运的马

下面的其他样本我无法描述,你可以吗?

一些样本让我想起一些广东话里的亵渎用语变成了新的汉字(如𨳊或撚)。

未来的工作

草书汉字书写

我了解了CASIA在线手写数据库。这个算法可以很容易地应用到这个数据集上,并且可能训练出用语生成伪造的中文草书手写体的循环神经网络。就我个人而言,我不觉得这个基于笔画的数据集有趣(可能觉得草书的连笔和英文手写体有相似的地方),因为我想知道这个算法是否能够生成字和字比较分明的和现有汉字不同的结构,而不是像以前的手写示例那样的手写字符。

廣 -> 広 -> 广

作为一个设计师,我不太喜欢1956年“ 简化中文”,因为我觉得中华人民共和国将汉字简化过头了,有点奥威尔新语的味道。我比较喜欢原始的美丽的繁体中文字符。

日常事物的素描

看到它从数据中学习后所绘制的,我想将sketch-rnn应用到TU Berlin素描数据应该会很有趣。但是我觉得这样做不会那么顺利,因为素描的种类是相当多样的,而且在统计学上并不具有相似结构。如果我们有10000个房子的素描样本,并且这些样本所有的笔画,复杂度和维度相似,那么它可能效果不错。但是,如果我们有一个桌子、兔、鱼、苹果和建筑物的数据库,这样我觉得这个模型可能应付不了。采取现有的算法,将光栅化的位图图像转换为矢量化的.svg格式并在sketch-rnn上运行,这也是个有趣的主意。

来自TU Berlin素描数据库的大象
来自TU Berlin素描数据库的大象

算法扩展

LSTM+MDN基本上是LSTM+Softmax的扩展,我之后想尝试更强大的方法。最近关于变分自动编码器生成式矩匹配网络或者BPL的工作可能会更加富有表现力、拥有更强大的功能。我也考虑到GAN(生成对抗网络)方法或许可以应用在循环神经网络上,不过训练LSTM GAN估计将是非常困难的。

我也思考过使用更小的网络来获得更具生成力的效果。最终,我希望能够在浏览器中使用这些训练好的神经网络,并让客户端的JS来运行demo,这些demo可以实时与用户进行交互,我认为这会非常酷。如果有人对如何将LSTM神经网络有效地压缩成小的JSON文件有任何想法,我们可以来交流一下。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
神经网络造“汉字”新技能全开,biangbiang面自愧不如
李林 发自 学院路 量子位 出品 | 公众号 QbitAI 正所谓古有仓颉,今有神经网络。 最近,谷歌大脑研究员David Ha做了个让神经网络和你一起写“汉字”的网页版Demo。你在页面上写几笔,神
量子位
2018/07/20
4730
谷歌大脑研究员玩转汉字RNN:神经网络生成新华字典
【新智元导读】你永远不知道汉字的潜力。谷歌大脑东京分部的研究员hardmaru,用神经网络根据笔画生成汉字,新造了一系列“假汉字”。你别说,有些看上去还真像那么一回事。
新智元
2018/07/31
8900
谷歌大脑研究员玩转汉字RNN:神经网络生成新华字典
TensorFlow中生成手写笔迹的Demo
这项操作现在在github上已经可以使用了。
Zach展
2018/02/06
2.6K0
TensorFlow中生成手写笔迹的Demo
循环神经网络
循环神经网络的神经网络体系结构,它针对的不是自然语言数据,而是处理连续的时间数据,如股票市场价格。在本文结束之时,你将能够对时间序列数据中的模式进行建模,以对未来的值进行预测。 1.上下文信息 回到学校,我的一个期中考试仅由真的或假的问题组成时。假设一半的答案是“真的”,而另一半则是“假的”。我想出了大部分问题的答案,剩下的是靠随机猜测。我做了一件聪明的事情,也许你也可以尝试一下这个策略。在计数了我的“真”的答案之后,我意识到它与“假”这个答案不成比例。于是我的大部分猜测是“假”的,这样就可以平衡分配。
两只橙
2018/04/27
9850
循环神经网络
AI实践精选:艺术家如何应用RNN(循环神经网络)创作AI化的艺术作品
文章导读:这篇文章不是为了全面深入的介绍循环神经网络(recurrent neural networks),而是为那些没有任何机器学习(machine learning)背景知识的读者提供一种思路,意在展示艺术家和设计师运用简单的Javascript和p5.js库构造预训练神经网络、进而创作出交互式数字作品的过程。 引言 近年来,对于那些富有创造性的群体来说,机器学习已经成为一种流行的工具。风格迁移(style transfer)、t-sne算法、自编码器(autoencoders)、生成对抗网络(
AI科技大本营
2018/04/26
1.5K0
AI实践精选:艺术家如何应用RNN(循环神经网络)创作AI化的艺术作品
Python人工智能 | 十二.循环神经网络RNN和LSTM原理详解及TensorFlow分类案例
前一篇讲解了TensorFlow如何保存变量和神经网络参数,通过Saver保存神经网络,再通过Restore调用训练好的神经网络。本文将详细讲解循环神经网络RNN和长短期记忆网络LSTM的原理知识,并采用TensorFlow实现手写数字识别的RNN分类案例。
Eastmount
2022/01/20
1.2K0
Python人工智能 | 十二.循环神经网络RNN和LSTM原理详解及TensorFlow分类案例
Google | 用神经网络作画
Google最近正在研究一个新实验,让人工智能帮你画画,具体地说,是帮助你更快更准确地画画。该软件称为Sketch-RNN,是一个简单易用的网络应用程序。谷歌的想法很简单:先选择一个已经存在的对象,开始绘制,软件会尝试找到自动画好它的最佳方法。 进入此链接可运行sketch-rnn的演示demo: https://magenta.tensorflow.org/assets/sketch_rnn_demo/index.html 对于移动端用户的数据连接:此第一个演示的大小约为5 MB数据。 每次在演示中更改模
用户1737318
2018/07/20
5700
Reddit扫盲贴火了!热心网友帮忙分析手写体合成原理,真实目的竟然是骗数据?
---- 新智元报道   来源:reddit 编辑:LRS 【新智元导读】Reddit扫盲贴火了!提问者对手写体生成技术惊呆了,寻求网友帮助探究背后原理,引来无数热心网友分析论文!其中有一位眼尖的网友发现可以上传手写体数据,但生成的数据并不好,于是怀疑作者是来骗数据的! Reddit上一个问题火了! 一个小哥访问了一个手写体生成的网站之后,感觉太不可思议了,想问一下是机器学习技术是怎么帮助生成手写体的? 为了避免广告嫌疑,提问者声明:我不是制作这个的人,但它的工作原理是如此的令人着迷---- 我的笔
新智元
2023/05/22
3130
Reddit扫盲贴火了!热心网友帮忙分析手写体合成原理,真实目的竟然是骗数据?
谷歌论文抢鲜看:教机器画画
本文介绍了使用神经网络来生成基于文本的草图,探讨了不同对象之间的潜在空间,并提出了可以用于创意应用程序的潜在技术。
YingJoy_
2017/04/17
1.3K0
谷歌论文抢鲜看:教机器画画
超级网络
在这篇文章中,我将介绍一下我们最近的文章[1609.09106] HyperNetworks。我作为Google Brain Resident工作在这篇论文上- 一个伟大的研究计划,我们可以从事一年的机器学习研究,并且享受工资和福利!Brain团队正在接受2017年计划的申请:请参阅g.co/brainresidency。
DEXIN
2018/02/08
2.8K0
超级网络
机器学习常用神经网络架构和原理
一、为什么需要机器学习? 有些任务直接编码较为复杂,我们不能处理所有的细微之处和简单编码,因此,机器学习很有必要。相反,我们向机器学习算法提供大量数据,让算法不断探索数据并构建模型来解决问题。比如:在新的杂乱照明场景内,从新的角度识别三维物体;编写一个计算信用卡交易诈骗概率的程序。 机器学习方法如下:它没有为每个特定的任务编写相应的程序,而是收集大量事例,为给定输入指定正确输出。算法利用这些事例产生程序。该程序与手写程序不同,可能包含数百万的数据量,也适用于新事例以及训练过的数据。若数据改变,程序在新数据上
两只橙
2018/04/27
1.3K0
机器学习常用神经网络架构和原理
【独家】一文读懂文字识别(OCR)
前言 文字识别是计算机视觉研究领域的分支之一,归属于模式识别和人工智能,是计算机科学的重要组成部分 本文将以上图为主要线索,简要阐述在文字识别领域中的各个组成部分。 一 ,文字识别简介 计算机文字识别,俗称光学字符识别,英文全称是Optical Character Recognition(简称OCR),它是利用光学技术和计算机技术把印在或写在纸上的文字读取出来,并转换成一种计算机能够接受、人又可以理解的格式。OCR技术是实现文字高速录入的一项关键技术。 在OCR技术中,印刷体文字识别是开展最早,技术
数据派THU
2018/01/29
24.1K1
TensorFlow2.0 代码实战专栏(八):双向循环神经网络示例
原项目 | https://github.com/aymericdamien/TensorFlow-Examples/
磐创AI
2019/12/23
1.9K0
TensorFlow2.0 代码实战专栏(八):双向循环神经网络示例
循环神经网络:从基础到应用的深度解析
今日推荐:前端小白使用Docsify+Markdown+‌Vercel,无服务器部署个人知识库原创
小馒头学Python
2024/11/30
2010
循环神经网络:从基础到应用的深度解析
《PaddlePaddle从入门到炼丹》五——循环神经网络
除了卷积神经网络,深度学习中还有循环神经网络也是很常用的,循环神经网络更常用于自然语言处理任务上。我们在这一章中,我们就来学习如何使用PaddlePaddle来实现一个循环神经网络,并使用该网络完成情感分析的模型训练。
夜雨飘零
2020/05/06
1K0
神经网络学习笔记-03-循环神经网络-反向传播计算公式的证明
神经网络学习笔记-03-循环神经网络-反向传播计算公式的证明 本文是根据WildML的Recurrent Neural Networks Tutorial写的学习笔记。 原文的例子 原文中计划实现一个循环神经网络,用于发现自然语言句子中单词出现的模式,最终可以生成一些合理的句子。 数据来源 原文中,从网上下载了很多条句子(英文的)。 数据的前期处理 首先,统计了所有单词(包括标点符号)。 取出最常见的7997单词,并且编号,每个单词有一个token。 设置了3个特殊的token: UNKNOWN_
绿巨人
2018/05/17
8780
交互式数字作品教程——专为艺术家的你!
这篇文章不是对循环神经网络的综合概述。它适用于没有任何机器学习背景的读者。其目的是向艺术家和设计师展示如何使用预先训练的神经网络——使用简单的Javascript和p5.j​​s库来制作交互式数字作品。
庹阳
2018/02/06
1.2K0
交互式数字作品教程——专为艺术家的你!
Tensorflow深度学习算法整理(二)循环神经网络
这里红色部分是输入,比如说图像;绿色部分是网络部分,比如说卷积部分和全连接部分;蓝色部分是输出,比如说最终得到的分类概率。这样的网络结构很适合做图像的分类,图像的检测,这种数据都是固定的数据。如果是变长的数据,比如说文本,它的长度是不一定的,这个时候我们该怎么做呢?
算法之名
2021/10/18
4270
轻松学Pytorch –构建循环神经网络
大家好,使用pytorch实现简单的人工神经网络跟卷积神经网络的mnist手写识别案例之后,今天给大家分享一下如何基于循环神经网络实现mnist手写数字识别。这里基于pytorch提供的函数,简单封装分别实现了一个RNN跟LSTM的模型,然后分别使用这两个模型完成了mnist数字识别。下面就来说说数据集跟模型实现部分。
OpenCV学堂
2020/05/24
8980
CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)概念区分理解
1、相关知识 从广义上来说,NN(或是更美的DNN)确实可以认为包含了CNN、RNN这些具体的变种形式。有很多人认为,它们并没有可比性,或是根本没必要放在一起比较。在实际应用中,所谓的深度神经网络DNN,往往融合了多种已知的结构,包括convolution layer 或是 LSTM 单元。其实,如果我们顺着神经网络技术发展的脉络,就很容易弄清这几种网络结构发明的初衷,和他们之间本质的区别。 2、神经网络发展 2.1 感知机 神经网络技术起源于上世纪五、六十年代,当时叫感知机(perceptron),拥有输
机器学习AI算法工程
2018/03/09
2K0
CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)概念区分理解
推荐阅读
相关推荐
神经网络造“汉字”新技能全开,biangbiang面自愧不如
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档