世界怎么会有pytorch怎么用这么好用的东西 好用

国王-男人=王后-女人?使用 PyTorch 探索语义世界!
首先让我们看下题目中的公式“国王-男人=王后-女人”你是不是觉着这个公式成立并且特别有道理,但是又说不出来为什么?或者你会说,这个公式成立是因为等式两边词汇的语义是相似的。哎,对!就是语义相似,只不过不仅我们人类可以发现语义的相似性,机器同样也可以。那机器是通过什么方法来理解语义的?它又是怎样得出上面的计算公式的?答案就在我们今天的文章中。资源:集智 AI 学园公众号回复“探索词向量世界”,获取全部 Jupyter Notebook 文档!独热编码的缺点首先让我们回忆下前几期的教程。在前几期教程中,我们都是采用“独热编码向量”的方式来表示一个词(字),即用字母表的位置索引来编码一个词,比如:“the” = [0 0 0 1 0 0 0 0 ...],它是一个长26的向量,对应字母表的位置为1。这样的表示方法有两个缺点第一个缺点就是占用空间大。这个问题对于上面的26个英文字符还好说,那要是换成中文哪?常用中文字有87019个,如果把每个中文编码成长度为87019的向量,不仅存储空间受不了,我们的神经网络模型也无法直接处理那么大维度的输入。第二个缺点是,独热编码的方式不能表示出“词与词之间的关系”。如果用独热编码的方式将 词汇 编码成独热向量,我们先不考虑向量长度问题,编码出的一个个词汇都是一串0和1,从中无法表示出词汇间的关系。然而词汇间是的确存在语义关系的,就比如:太阳、月亮、星星;小猫、小狗、小猪。我们人类可以感觉到这些词汇间的关系,保持这个关系在自然语言处理问题中非常关键!神奇的词向量而词向量(Word vectors)技术的出现非常有效的解决了上面问题。首先它将每个词表征为“多维词向量空间”中的一个向量。通过一种特别的归纳嵌入的方式(这点我们在下期教程里会详细讲解),它可以将用数十万级维度表示的词汇转变为使用十几个维度就能表示的词汇。并且,特别的嵌入方式使词向量空间还可以通过向量间距捕捉到单词之间的语义关系。从下图你可以观察到表示“家庭关系”的词汇都分布在图表的左边并且距离比较近。实现词向量的算法有很多,著名的“word2vec”就是其中的一种算法。原理上来说,它可以根据文本上下文 预测 词汇。比如,最可能出现在“the cat”这句话中的词汇是什么?预测的答案是“the mouse”。不过详细讲解 Word2Vec 是我们下节课的内容,这节课我们来使用另一种算法 “GloVe” 来窥视一下词向量的神奇之处。关于 GloVe 与 Word2Vec 的区别,有兴趣的同学可以参考 《How is GloVe different from word2vec?》(https://www.quora.com/How-is-GloVe-different-from-word2vec) 这篇文章。这次我们之所以使用 GloVe 来探索词向量,是因为从网上可以找到大量的预训练好的词向量,比如“斯坦福大学NLP研究所”(https://nlp.stanford.edu/projects/glove/ ),这样我们在本期就可以免去训练的步骤,直接观察词向量的神奇之处。安装 torchtext这次我们会用到 pytorch-text 这个 Python 软件包,然而这个包目前还不能直接通过 pip 或者 conda 来安装,所以我们要以手动的方式来安装它。git clone https://github.com/pytorch/text pytorch-textcd pytorch-textpython setup.py install加载词向量下面调用的 load_word_vectors 方法会从 http://nlp.stanford.edu/data/ 下载和解压于训练的词向量文件。这个文件有822MB,因为服务器在国外,所以下载的速度很慢。如果大家需要这个数据包,小编将会在 下期详细分析词向量 的教程中给出这个文件的网盘链接及使用方法。import torchfrom torchtext.vocab import load_word_vectorswv_dict, wv_arr, wv_size = load_word_vectors('.', 'glove.6B', 100)print('Loaded', len(wv_arr), 'words')loading word vectors from ./glove.6B.100d.ptLoaded 400000 wordsload_word_vectors 方法会返回一个有索引的、包含大量单词的词典变量 wv_dict,以及一个包含所有词向量的数组变量 wv_arr。所以获取一个词向量的步骤就是首先在词典中查询单词的索引号,再通过索引号从数组中取出这个词的词向量。# 传入某个词,获取其词向量def get_word(word): return wv_arr[wv_dict[word]]找到最近词向量下面我们将编写一个方法,来查找在 词向量空间 中,与某个词(向量)离得最近的几个词(向量)是什么。以此来观察词向量空间对“语言语义”的表达。def closest(d, n=10): all_dists = [(w, torch.dist(d, get_word(w))) for w in wv_dict] return sorted(all_dists, key=lambda t: t[1])[:n]上面的方法会返回一个包含多个 (word, distance) 值对的列表。下面我们再编写一个方法来打印这个列表。def print_tuples(tuples): for tuple in tuples: print('(%.4f) %s' % (tuple[1], tuple[0]))现在我们可以传给它一个词,来看看与这个词最近的是什么词!print_tuples(closest(get_word('google')))(0.0000) google(3.0772) yahoo(3.8836) microsoft(4.1048) web(4.1082) aol(4.1165) facebook(4.3917) ebay(4.4122) msn(4.4540) internet(4.4651) netscape我们可以观察到与 google 一词离的最近的都是互联网或科技公司名字,其次是与互联网相关的词汇。这可以说明词向量空间中的距离在某种程度上可以表示词汇代表意义的相似度,或者说是相关性。对于这个原理,你或许可以将它应用在“同义词查询”、“相关商品推荐”、甚至“语言翻译”等领域。划重点!用词向量进行词汇间的数学运算!词向量空间最有趣的特征就是:词汇间的语义关系可以通过词向量间的加减法来表达!比如拿词向量来运算,“国王”-“男人”=“王后”-“女人”!等式两边的词向量运算结果相等,词向量之间的运算,就像是语义间的转换。我们把等式稍微变换一下,变成上图中的样子。利用上面这个式子,我们可以利用已知的三个词来求其中某个词的 纵向相似性词汇 是什么。比如我们已经知道 “国王”-“男人”+“女人”=“王后”,那么,“俄罗斯”-“莫斯科”+“法国”=?“奥巴马”-“总统”+“川普”=?我们编写一个方法来求这个纵向相似性词汇:# 输入参数是按照类似 俄罗斯,莫斯科,法国 的这种顺序def analogy(w1, w2, w3, n=5, filter_given=True): print('\n[%s : %s :: %s : ?]' % (w1, w2, w3)) # w2 - w1 + w3 = w4 closest_words = closest(get_word(w2) - get_word(w1) + get_word(w3)) # 过滤防止输入参数出现在结果中 if filter_given: closest_words = [t for t in closest_words if t[0] not in [w1, w2, w3]] print_tuples(closest_words[:n])让我们看看最经典的公式是否是我们预料的结果:analogy('king', 'man', 'queen')[king : man :: queen : ?](4.0811) woman(4.6916) girl(5.2703) she(5.2788) teenager(5.3084) boy果然不出所料!那现在让我们自由的探索词向量空间,去发现词向量空间隐藏的奥秘吧!analogy('man', 'actor', 'woman')analogy('cat', 'kitten', 'dog')analogy('dog', 'puppy', 'cat')analogy('russia', 'moscow', 'france')analogy('obama', 'president', 'trump')analogy('rich', 'mansion', 'poor')analogy('elvis', 'rock', 'eminem')analogy('paper', 'newspaper', 'screen')analogy('monet', 'paint', 'michelangelo')analogy('beer', 'barley', 'wine')analogy('earth', 'moon', 'sun') # 这个得出的答案很有趣,大家可以推测下是为什么analogy('house', 'roof', 'castle')analogy('building', 'architect', 'software')analogy('boston', 'bruins', 'phoenix')analogy('good', 'heaven', 'bad')analogy('jordan', 'basketball', 'woods')[man : actor :: woman : ?](2.8133) actress(5.0039) comedian(5.1399) actresses(5.2773) starred(5.3085) screenwriter[cat : kitten :: dog : ?](3.8146) puppy(4.2944) rottweiler(4.5888) puppies(4.6086) pooch(4.6520) pug[dog : puppy :: cat : ?](3.8146) kitten(4.0255) puppies(4.1575) kittens(4.1882) pterodactyl(4.1945) scaredy[russia : moscow :: france : ?](3.2697) paris(4.6857) french(4.7085) lyon(4.9087) strasbourg(5.0362) marseille[obama : president :: trump : ?](6.4302) executive(6.5149) founder(6.6997) ceo(6.7524) hilton(6.7729) walt[rich : mansion :: poor : ?](5.8262) residence(5.9444) riverside(6.0283) hillside(6.0328) abandoned(6.0681) bungalow[elvis : rock :: eminem : ?](5.6597) rap(6.2057) rappers(6.2161) rapper(6.2444) punk(6.2690) hop[paper : newspaper :: screen : ?](4.7810) tv(5.1049) television(5.3818) cinema(5.5524) feature(5.5646) shows[monet : paint :: michelangelo : ?](6.0782) plaster(6.3768) mold(6.3922) tile(6.5819) marble(6.6524) image[beer : barley :: wine : ?](5.6021) grape(5.6760) beans(5.8174) grapes(5.9035) lentils(5.9454) figs[earth : moon :: sun : ?](6.2294) lee(6.4125) kang(6.4644) tan(6.4757) yang(6.4853) lin[house : roof :: castle : ?](6.2919) stonework(6.3779) masonry(6.4773) canopy(6.4954) fortress(6.5259) battlements[building : architect :: software : ?](5.8369) programmer(6.8881) entrepreneur(6.9240) inventor(6.9730) developer(6.9949) innovator[boston : bruins :: phoenix : ?](3.8546) suns(4.1968) mavericks(4.6126) coyotes(4.6894) mavs(4.6971) knicks[good : heaven :: bad : ?](4.3959) hell(5.2864) ghosts(5.2898) hades(5.3414) madness(5.3520) purgatory[jordan : basketball :: woods : ?](5.8607) golf(6.4110) golfers(6.4418) tournament(6.4592) tennis(6.6560) collegiate这次我们只是简单探索了词向量的有趣之处,在下两期的教程中我会带领大家详细探讨词向量如此神奇的原因是什么,以及自己训练词向量的方法,敬请期待!小仙女福利!如果您课后作业有问题可以给小仙女发邮件:xiaoxiannv@swarma.org本期关键词:【探索词向量世界】长按空白位置_选择复制PyTorch圣殿 | 传奇NLP攻城狮成长之路 课程表第一期:PyTorch概要简析第二期:小试牛刀:编写一个词袋分类器第三期:AI 有嘻哈:处理数据第三期:AI有嘻哈:训练评估模型 终篇上期:起名大师:使用RNN生成个好名字本期:探索词向量世界第六期:词向量高级探索:词汇语义编码器第七期:AI翻译官:采用注意力机制的翻译系统第八期:长短记忆神经网络(LSTM)序列建模第九期:体验PyTorch动态编程,双向LSTM+CRF读完小仙女的本期文章,相信你对词向量的神奇和 PyTorch 的简介有了更直观的认识。集智AI学园刚刚推出(Deeplearning in PyTorch)付费课程,帮助你深入理解和掌握 PyTorch 在自然语言处理中的应用。“火炬下”课程现已开放报名通道,11月1日进行第一次直播课。名额有限,欢迎报名~关注集智AI学园公众号可见原文获取报名通道推荐阅读关注集智AI学园公众号获取更多更有趣的AI教程吧!搜索微信公众号:swarmAI集智AI学园QQ群:学园网站:campus.swarma.org 商务合作|zhangqian@swarma.org 投稿转载|wangjiannan@swarma.org
违法和不良信息举报电话:010-
公司名称:北京字节跳动科技有限公司深度学习入门该用PyTorch还是Keras?热门公开课换框架背后的学问_凤凰科技
深度学习入门该用PyTorch还是Keras?热门公开课换框架背后的学问
用微信扫描二维码分享至好友和朋友圈
李林 问耕 编译整理
量子位 出品 | 公众号 QbitAI
你知道fast.ai么?
他们以提供零基础的深度学习课程而闻名,宣称:只要你有高中数学基础、一年的编程经验,就能通过七周的学习,具备一流的深度学习实践能力。
刚刚,他们宣布了一件事。
下一个fast.ai的课程,将完全基于一个使用PyTorch开发的框架,抛弃原来的TensorFlow和Keras框架。这是为什么?
△&Jeremy Howard
且听创始人Jeremy Howard详解缘由,也相当于分析了初学者该选择什么样的框架。量子位节选编译如下:
我们为什么开始尝试PyTorch?
当我们开发第二门课《面向程序员的前沿深度学习》的时候,原来选的TensorFlow和Keras框架开始让我们处处碰壁。
比如说,现在自然语言处理中最重要的技术,大概是attention模型。可是我们发现,当时在Keras上没有attention模型的有效实现,而TensorFlow实现没有文档、一直在改,还复杂得毫无必要。
结果是我们决定自己在Keras里做一个attention模型实现,花了好长时间,debug也非常难。
接下来,我们又开始研究dynamic teacher forcing的实现。要实现一个准确的神经网络翻译模型,dynamic teacher forcing是其中的关键,但我们无论是在Keras里还是TensorFlow里,都找不到这个模型的实现。
于是,我们又开始尝试自己搞,这次比attention模型还失败,根本就没做出来能用的。
这时候,PyTorch的第一个预发布版出现了。这个新框架不是基于静态计算图,而是一个动态的框架,这为我们带来了新的希望。它说,动态框架让我们在开发自己的神经网络逻辑时,只需要写普通的Python代码,像正常用Python一样去debug。
我们第一次用PyTorch,就用它从头开始在实现了Attention模型和dynamic teacher forcing,只用了几个小时。
PyTorch在教学的好处
上文提到的那门课,一个重要的目标就是让学生能读最近的论文,然后实现它们。
这非常重要,因为到目前为止,在一些学术界比较关注的领域,我们对深度学习应用的研究反倒很有限,因此,用深度学习解决很多现实世界问题的时候,不仅需要了解基础技术,还要能针对特定的问题和数据去实现定制化的深度学习模型。
PyTorch,就让学生们能充分利用普通Python代码的灵活性和能力,来构建、训练神经网络。这样,他们就能解决更广泛的问题。
PyTorch的另一个好处是,它能让学生们更深入地了解每个算法中发生了什么。用TensorFlow那样的静态计算图库,你一旦声明性地表达了你的计算,就把它发送到了GPU,整个处理过程就是一个黑箱。
但是通过动态的方法,你可以完全进入计算的每一层,清楚地看到正在发生的情况。我们认为学习深度学习的最佳途径就是通过编程、实验,动态的方法正是我们的学生所需要的。
令我们惊奇的是,我们还发现很多模型在PyTorch上训练比在TensorFlow上更快。这和我们所熟知的“静态计算图能带来更多优化,所以应该性能更好”恰恰相反。
在实践中我们看到,有些模型快一点,有些慢一点,每个月都不一样。问题的关键似乎在于以下两点:
PyTorch提高了开发人员的生产力和debug经验,因此可以带来更快的开发迭代和更好的实现;
PyTorch中更小、更集中的开发团队不会对每个功能都进行微优化,而是要寻求“大胜”。
为什么在PyTorch上构建一个新框架?
然而,对于课程的第一部分来说,PyTorch还远远谈不上是一个很好的选择。没有机器学习背景的人根本没法上手。
PyTorch没有Keras那样简单明了的API来训练模型,每个项目都需要几十行代码来实现一个神经网络的基础训练。另外,Keras的默认设置就挺有用,而PyTorch一切都需要详细设置。
不过,Keras还能更好。我们发现大家一直在Keras里犯相同的错误,例如不能在我们有需要时打乱数据,反之亦然。另外,很多新出的最佳实践并没有被纳入Keras,特别是在快速发展的自然语言处理(NLP)领域。
所以我们在想,能不能构建一个比Keras更好的东西,用来快速训练最棒的深度学习模型。
经过一些研究和探索后,我们做到了。我们构建的模型比用Keras构建的更快、更准确、更复杂,而且更少的代码写就。最近对多个领域论文进行的实现,都证明了这一点。
关键是创建一个OO分类,其中包含了所有重要的数据选择(例如预处理、增强、测试、训练和验证集、多类和单类的分类与回归等)以及模型架构的选择。
我们完成这个工作之后,就能在很大程度上自动找出模型与数据最佳的架构、预处理和训练参数。突然间,我们的工作效率大幅提升,而且很少犯错,因为一切都是自动化的。但是我们在每个阶段提供了定制化的能力,所以可以轻松尝试不同的方法。
随着工作效率的提升,我们能够尝试更多的技术,在这个过程中,我们发现了一些非常差的方法。例如,我们发现批量归一化(几乎所有最新CNN架构都用)和模型预训练及微调(每个项目也该用)的组合,可以让标准训练方式的精度下降500%。
我们稍后会逐步放出这个研究的详细情况。(我们还缺一个名字……)
量子位AI社群8群开始招募啦,欢迎对AI感兴趣的同学,加小助手微信qbitbot3入群;
此外,量子位专业细分群(自动驾驶、CV、NLP、机器学习等)正在招募,面向正在从事相关领域的工程师及研究人员。
进群请加小助手微信号qbitbot3,并务必备注相应群的关键词~通过审核后我们将邀请进群。(专业群审核较严,敬请谅解)
用微信扫描二维码分享至好友和朋友圈
凤凰科技官方微信
播放数:4729
播放数:2256
播放数:7548
播放数:5808920如何有效地阅读PyTorch的源代码? - 知乎<strong class="NumberBoard-itemValue" title="被浏览<strong class="NumberBoard-itemValue" title="3分享邀请回答void THNN_(Abs_updateOutput)(THNNState *state, THTensor *input, THTensor *output)
void THNN_(Abs_updateGradInput)(THNNState *state, THTensor *input, THTensor *gradOutput, THTensor *gradInput)
WITH_CUDA: TH、THS、THNN的GPU版本WITH_NCCL: 单机上多GPU通信,支持MPI编程。单PCIe上性能最好,虽然多PCIe也可运行。build THPP: Torch C++build libshm: 共享管理nanopb: 轻量级encode/decode使用Gooogle的Protocol Buffers协议来定义的结构体,以便在RAM或者代码空间中传输消息pybind11: 轻量级的C++与Python间进行无缝调用build ATen: C++的autograd在往这里写,整体功能不太清楚generate_nn_wrappers(): 把C代码写好的神经网络(NN、CUNN),使用C++进行封装,python能调用C: 对C的代码进行封装,自身是C++的代码,核心为Tensor、autograd、cuda,其它有distributed、jit等;torch/csrc/Module.cpp封装成torch模块的方法torch/csrc/generic/Tensor.cpp封装成FloatTensorBase、IntTensorBase等类DL: python可获取RTLD_GLOBAL、RTLD_NOW变量,来设置加载库的方式THNN: torch/csrc/nn/THNN.cpp,NN的封装(generate_nn_wrappers函数生成)THCUNN: torch/csrc/nn/THCUNN.cpp,CUNN的封装(generate_nn_wrappers函数生成)from torch._C import *: 加载C实现的所有内容(其实是用C++再封装了一层)2627 条评论分享收藏感谢收起新手如何入门pytorch? - 知乎<strong class="NumberBoard-itemValue" title="被浏览<strong class="NumberBoard-itemValue" title="6,065分享邀请回答1.6K43 条评论分享收藏感谢收起

我要回帖

更多关于 pytorch 好用吗 的文章

 

随机推荐