如何免费系统化入门数据科学?

题图:Photo by Myriam Jessier[1] on Unsplash[2]

痛点

总有小伙伴留言或私信问我:

王老师,我没有基础,想要入门数据科学的话,上某某辅导班(收费 XXXX 元),靠谱不?

这问题,还真是不好回答。因为那样的辅导班,我没上过,着实不知道质量如何,不敢妄下判断。

想跨专业系统学习数据科学知识,除了辅导班会让你挑花眼以外,书籍、资料和网上的学习资源也不好挑选。因为数据科学知识技能的特色是发展迅速。一年多以前别人使用某个方法、模型做出的结果,还能发在高水平期刊上。今天你使用同样的方法,却可能会被无情拒稿。这不完全是你的错,只是在这么短的时间里更好的模型已经出现了。你学到的内容嘛,很不幸,落伍了。

那你的下一个问题应该是:

有没有足够省钱,还能随时更新保持追上前沿的学习资料?

这听着很贪心。真有人告诉这样的好事儿,你也会怀疑他是不是个骗子。但实话实说,这样的免费学习资料还真的有,而且一直被很多初学者忽视掉了。因为它并不存在于某个知名的 MOOC 平台上,而是寄身于一个数据科学竞赛网站的角落里。

人们的刻板印象会认为,只有知识技能掌握足够好才会去参加竞赛,因此并不期待竞赛网站会负责详细介绍基础入门知识。这可能让很多人与它失之交臂。

这个竞赛网站,叫做 Kaggle 。这套课程,叫做 Kaggle Courses 。

发现

我最初发现 Kaggle 的这一套自制课程,是在 2018 年 4 月份。之所以还能知道具体的时间,是因为我当时做了笔记。

你看,随手及时记录笔记,很重要吧?

当时 Kaggle 自制课程的名称,还叫做 "Kaggle Learn" 。初始课程的门数很少,只有 6 门。

但是早在 2018 年,我就觉得 Kaggle 这个课程很有特色,所以才专门记录了笔记。什么特色呢?至少包括以下两点:

  • 全免费
  • 利用 Notebook 互动实例来讲解

以其中数据可视化教学内容为例。这一部分介绍的 Python 可视化工具,是 Seaborn 。

今天 Seaborn 的学习资料早已到处都是,并不稀奇。但是在 2018 年初,更多的常见数据科学教程依然沿用 matplotlib 这样的 Python 基础绘图软件包。使用起来,较为繁琐。而借助 Seaborn ,你可以用非常简单的语句,生成很复杂的印刷级别图形。我在 2018 年的这则笔记里,还专门保留了几张截图,作为例子。

这是普通的变量分布图:

这个图可以同时描述两个变量分布和二者的关联:

上面这些图,都可以用 Seaborn 非常容易做出来。

况且,彼时 Kaggle Learn 可视化部分的课程,已不仅仅局限于 Seaborn ,也包括 plotly ,用于做交互图形。这是当时课程里面的截图:

你不难看到,Plotly 可以很方便做出这种三维图像。你还可以通过拖动从不同角度进行观察。

当时由于课程数量不多,并没有引起我的重视。但我当初学习这些资料的进程,直到现在还原原本本保留在了 Kaggle 系统中。

变化

常言道,「士别三日,当刮目相看」。Kaggle 的课程板块也是如此。

前些日子,我想给学生找一个免费运行的 GPU 云环境,用来讲授机器学习,于是又打开了 Kaggle 网站。我突然发现,原先的 Kaggle Learn 已经大幅度扩容,成长为 Kaggle 里面的一个单独的 Courses (课程)板块。你可以 点击这个链接[3] 直达。

可以看到,现在课程包含的主题种类非常丰富。

这是个不完全的课程列表,里面就已经包括了:

  • 编程基础
  • 机器学习
  • 特征工程
  • SQL 数据库
  • 机器视觉
  • ......

样例

这里我以 Python 数据框 Pandas 教程为例,给你介绍一下 Kaggle Courses 的特色。

这里 Pandas 的介绍分成 6 个部分:

  • 创建、读写
  • 索引、选择和赋值
  • 总结与映射
  • 分组和排序
  • 数据类型与缺失值
  • 重命名和合并数据框

可以看出,内容是很精细、系统和全面的。这样循序渐进的好处,是避免一次性让初学者接触过多的概念和知识,导致学习的时候「按下葫芦起了瓢」,手忙脚乱。先解决基础问题,再逐步试探进入更复杂的部分,这和《新概念英语》的理念「逐步迭代 + 高水平重复」是一致的。

每一个模块,都分为讲解和练习两个部分。

讲解里面,都包含了文字、图片、代码,以及对应的运行结果。

而练习里,因为使用了 learntools[4] 这个软件包,所以 Kaggle 平台可以自动给你提示、参考答案,甚至判定你自己输入的语句答案是否正确。

代码运行正确,提示是这样的:

而如果运行出现错误, Kaggle 会给出具体的错误原因:

请注意,对初学者来说,这是非常宝贵的反馈。因为有了反馈,有了提示,你修改起来就有了正确方向,事半功倍。极大程度避免了初学者面对错误瞎猜乱改导致的精力耗尽,甚至「从入门到放弃」

即便你的答案运行出来正确的结果,你也可以看看自己的解答和参考答案之间的差别。正确答案,不止一种,执行效率上也有高下之分。这种对比也是重要的学习提升途径

我在《MOOC教学,什么最重要?》一文中,给你提到过,MOOC 教学里面,最宝贵的就是反馈。课程讲义、录像可以大规模低成本复制传播,但是反馈却需要个性化,这也是课程规模和质量之间经常发生矛盾和冲突的地方。而对于写代码这种事情来说,如果能够充分利用目前的自动化技术,是可以给初学者足够丰富反馈的。这也是数据科学和编程类内容学习的一种独特优势。

其他

下面我们来看看 Kaggle Courses 其他的特色板块。篇幅所限,我这里精选了几样,包括:

  • 数据可视化
  • 时间序列
  • AI 伦理

先说数据可视化。你会发现,Seaborn 确实历久弥新。现在依然是 Kaggle 讲解可视化的软件包首选。

只是从内容上,比起当初更为细致多样。我也准备抽时间系统学习一下。回头给你分享一下相关的经验。

除了 Seaborn 和 plotly 之外,数据可视化部分还添加了「地理信息可视化」。你可以用几行代码,就把各种数据叠加在地图层上,让读者一目了然。

你还可以把地图做成交互形式,读者可以根据自己的喜好,进行交互式缩放,就像这样。

除了可视化之外,我觉得时间序列分析也值得说一说。

毕竟,除了面板数据(例如购物记录、评论信息)之外,我们还时常要与时间序列打交道。例如我之前给你介绍过的《如何用 Python 做舆情时间序列可视化?》,就可以做出类似这样的情感指标时间序列可视化。

从前处理时间序列数据,还是比较麻烦的。而现在,因为有了更成熟的软件包,你可以用更少的代码,就把时间序列的清洗和可视化搞定。

使用时间序列,我们往往都是有趋势预测的需求的。预测可以使用一些传统的算法,或者也可以利用机器学习。就像我在《如何用 Python 和循环神经网络预测严重交通拥堵?》一文给你举过的例子。

下图是 Kaggle Courses 里面 预测流感数据的例子[5]

你觉得这样数据的建模、预测和可视化需要多少行代码?200?500?

其实,核心代码只有这些:

全部的代码,都有配套的讲解。一步步通过中间结果,教给你怎么做,让你有充分的铺垫知识来逐步学习掌握。

通过样例学习之后,相信你已经信心满满。此时可以根据引导,在 练习区实际上手了[6]

这套 Kaggle 课程最让我欣喜的地方,是专门的** AI 伦理**部分。

这几年出现的很多 AI 领域新闻,都让人们逐步认识到 AI 伦理问题的重要性和严重性。简而言之,如果人们放任 AI 研究「自由飞翔」,那么在短时间内,我们就会品尝到恶果。例如,我们会因为长相、基因、社会经济地位等因素,受到机器模型的歧视甚至鄙视。那些科幻作品中,人类饱受机器欺凌乃至奴役的场面,会变成活生生的现实。

机器本身没有善恶可言,因为它只是由人塑造的。但是对于数据科学的应用者来说, AI 伦理特别重要。如果不在学习阶段加以培养,就如同驾校培训了驾车技术,却没有讲授交通规则。他开车上路,手里握着的就不是方向盘,而是致命武器的扳机。

初心

我给你如此详细介绍这套课程,是因为它完全免费,而且还可以提供学习证书。这种分享的精神,也需要你我的分享,来薪火相传。

我一直在琢磨,研发这些课程,撰写配套练习,并且对答案进行完善调试,还得不断因应环境变化调整课程内容,难道不需要成本吗?Kaggle 这么做,岂非赔本儿赚吆喝?图什么?

况且,这还不是 Kaggle 做的唯一「傻事儿」。别忘了,我这次打开 Kaggle ,其实就是想帮助自己的学生,用它上面的免费 GPU 时长,以及上面大量的开放数据资源。这些其实都是要由 Kaggle 负担成本的。

后来,我大概想明白了。Kaggle 这些看似「冒傻气」的行为,实际上是在完成一个闭环。作为一个数据科学比赛的网站,Kaggle 需要数据,需要算力,需要题目,但是更需要「人」,也就是足够多的参与者。不是每一个来到这个网站的用户,都具备数据科学基础知识。但是他们中的很多人,却有非常可观的潜力值得发掘。

做一套课程出来,确实需要耗费不少成本。但是如果这套课程可以让初学者快速上手,掌握入门内容,那么他们做出来的比赛结果,就更值得期待。参与者整体水平的快速提升,对于这样一个网站,一个社区,是有显著的好处 —— 生态系统级别的。

小结

想明白这一层之后,我觉得可以更为大胆地将这套 Kaggle 数据科学课程推荐给你。因为它是经过许许多多初学者实践、反馈和迭代的成果,因而质量上更有保障。

希望这个推荐,能够让你在入门数据科学的道路上,少走几分弯路,多一些成就感。

延伸阅读

  • 践行「重器轻用」,你的知识管理流程用了哪些工具组合呢?
  • 世界很大,英语不好的你如何去看看?
  • 《数亦有道》配套代码云端迁移进展
  • 想打造个性化高效工作流,可不会编程怎么办?
  • 贷还是不贷:如何用 Python 和机器学习帮你决策?

参考资料

[1]

Myriam Jessier: https://unsplash.com/@mjessier?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText

[2]

Unsplash: https://unsplash.com/s/photos/data-science?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText

[3]

点击这个链接: https://www.kaggle.com/learn

[4]

learntools: https://github.com/Kaggle/learntools

[5]

预测流感数据的例子: https://www.kaggle.com/code/ryanholbrook/forecasting-with-machine-learning

[6]

练习区实际上手了: https://www.kaggle.com/kernels/fork/20667477

本文转载于网络 如有侵权请联系删除

相关文章

  • 2022元宇宙营销创新白皮书【秒针营销科学院 × ECI】

    互联网流量见顶,元宇宙提供了触达消费者的新渠道。各行业品牌也积极参与元宇宙进行试水,充分挖掘元宇宙潜力价值以保持品牌的领先性。基于元宇宙社交性、沉浸式、强交互、用户创造等特点,元宇宙为品牌营销触达、互动体验构建、用户运营和产品零售革新提供了巨大可想象空间,品牌可积极关注并尝试。后台回复“MZYX”即可获取《2022元宇宙营销创新白皮书》报告原文。部分核心观点:元宇宙将虚拟与现实世界紧密融合,但不等于网络游戏或虚拟世界,其具有自由创作、去中心化等特征;元宇宙是一种基于技术的新兴移动互联网社会形态,“技术”“内容”和“社交”是元宇宙存在与发展的三大核心要素。元宇宙的爆发式发展需要等待科学技术的奇点时刻,以满足人们对于元宇宙“始终在线并实时体验”、“具备完善的经济体系”、“允许跨平台数字资产流通”等需求。元宇宙是基于多种新兴科技创造的虚实相融的新型移动互联网社会形态。随着科学技术迎来奇点时刻,元宇宙将以其独有特征,使未来社会发生革命性变革。

  • 闲鱼服务端架构演进历程

    作者|万佳嘉宾|巴滕闲鱼是从阿里巴巴某一茶水间“游”出来的。2014年6月,闲鱼诞生,2年时间不到,其用户数突破1亿。如今,它已经成为国内最知名的闲置交易平台,拥有数亿用户,年交易额超过2000亿,并开启了一个万亿市场。闲鱼能有今天的成绩,离不开背后的技术迭代、架构升级和技术人的付出。闲鱼初创时,架构设计面临着哪些挑战?闲鱼服务端架构在6年时间里是怎样演进的?闲鱼在服务端架构上还在做哪些新尝试?......带着这些问题,InfoQ记者采访了闲鱼技术部高级技术专家巴滕。自闲鱼创立以来,他一直参与闲鱼服务端架构持续演进的工作。 1闲鱼的业务特点 据巴滕介绍,闲鱼是一个典型的双边市场,买家和卖家规模相互影响,“如何同时服务好买家和卖家双方,这是我们一直努力的方向”。对买家来说,要提升商品发现效率,帮助他们尽快地买到商品。对卖家而言,要降低发布门槛,帮助他们尽快地把商品卖出去。对于平台,要持续优化用户的使用体验,比如降低纠纷和欺诈问题,同时持续扩大市场规模。2闲鱼服务端最初的架构设计 众所周知,闲鱼的前身是PC时代的淘宝二手,它属于淘宝的一个小频道。当时,闲鱼整体业务规模和用户量都非常小。基本

  • Discourse 如何添加 Google Analytics 的代码

    Discourse如何添加GoogleAnalytics代码带网站中?Discourse与GoogleAnalytics高度进行了整合。其实你并不需要添加GoogleAnalytics的代码,你只需要找到你的GoogleAnalytics的UA号就可以了。跟踪ID 是一个形式如UA-000000-2这样的字符串。跟踪ID必须包含在跟踪代码中,这样GoogleAnalytics(分析)才会知道应该将数据发送到哪个帐号和媒体资源。跟踪ID会自动包含在网站的JavaScript代码段中,但是还需要包含在其他跟踪技术(例如SDK和MeasurementProtocol)中,这样GoogleAnalytics(分析)才能正常工作。第一组数字(在上述示例中为-000000)指的是您的帐号,而第二组数字(-2)指的是与帐号关联的特定媒体资源编号。当你在Google的系统中找到这个ID后,然后再在你的Discourse中搜索关键词:universaltracking或者ga也行。将你找到的ID填写上去,保存即可。保存后的修改是即时生效的。你可以到GoogleAnalytics中的当前在线用户界面查看目

  • macOS 被曝内核存在高危漏洞

    谷歌ProjectZero团队曝光了 macOS内核中存在的一个写时复制高危漏洞。macOS的内核XNU在某些情况下允许写时复制(copy-on-write,COW)行为,COW是一种本质上没有缺陷的资源管理技术,它有一个重要的作用是可以保护复制的内存以防后续通过源程序修改,避免源进程被利用双读。但是在macOS这里COW似乎出了问题。研究人员表示,这种写时复制行为不仅适用于匿名内存,也适用于文件映射。这意味着,目标进程开始从转储存储区读取后,内存压力会导致保持转储内存的页面从页面缓存中被逐出。而被逐出的页面需要再次使用时,可以从后台文件系统重新加载。macOS允许普通用户挂载文件系统镜像,而如果修改用户已挂载文件系统镜像,该行为并不会被通知给虚拟管理子系统。也就是说攻击者可以在不发出通知的情况下改变磁盘文件虚拟管理子系统。详细的概念验证可以查看:https://bugs.chromium.org/p/project-zero/issues/detail?id=1726&q=谷歌的ProjectZero团队以发现各个公司产品的安全漏洞而闻名,其成员在软件中找到安全漏洞,私下向制

  • MySQL时间函数的选择

    版权声明:本文为博主原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/bisal/article/details/102577613Oracle中获取系统当前的时间,可以用sysdate、systimestamp等函数,在MySQL中,同样有类似的函数可以使用,碰巧看到eygle大神最近的文章,短短几行文字,就介绍了MySQL中获取系统当前时间的来龙去脉。文章链接:https://www.eygle.com/archives/2019/09/mysql_now_sysdate.html在MySQL中,获得系统当前时间可以使用now()函数,这是最简单和应用最广的函数。除此之外,current_timestamp(),localtime(),localtimestamp()都是now()函数的同义词,返回的结果相同:mysql>selectnow(); +---------------------+ |now()| +---------------------+ |2019-09-0512:28:16|

  • 郭健: Linux调度器中的PELT(Per-Entity Load Tracking)

    本文来源蜗窝科技http://www.wowotech.net/process_management/PELT.html本文是对https://lwn.net/Articles/531853/的翻译,一、为何需要per-entityloadtracking?对于Linux内核而言,做一款好的进程调度器是一项非常具有挑战性的任务,主要原因是在进行CPU资源分配的时候必须满足如下的需求:1、它必须是公平的2、快速响应3、系统的throughput要高4、功耗要小其实你仔细分析上面的需求,这些目标其实是相互冲突的,但是用户在提需求的时候就是这么任性,他们期望所有的需求都满足,而且不管系统中的负荷情况如何。因此,纵观Linux内核调度器这些年的发展,各种调度器算法在内核中来来去去,这也就不足为奇了。当然,2007年,2.6.23版本引入“完全公平调度器”(CFS)之后,调度器相对变得稳定一些。最近一个最重大的变化是在3.8版中合并的Per-entityloadtracking。完美的调度算法需要一个能够预知未来的水晶球:只有当内核准确地推测出每个进程对系统的需求,她才能最佳地完成调度任务。不幸

  • 关于ASP.NET MVC中使用Forms验证的问题

    表单验证(Forms验证)是一个基于票据(ticket-based)[也称为基于令牌(token-based)]的系统。这意味着当用户登录系统以后,他们得到一个包含基于用户信息的票据(ticket)。这些信息被存放在加密过的cookie里面,这些cookie和响应绑定在一起,因此每一次后续请求都会被自动提交到服务器。当用户请求匿名用户无法访问的ASP.NET页面时,ASP.NET运行时验证这个表单验证票据是否有效。如果无效,ASP.NET自动将用户转到登录页面。这时就该由你来操作了。你必须创建这个登录页面并且验证由登录页面提交的凭证。如果用户验证成功,你只需要告诉ASP.NET架构验证成功(通过调用FormsAuthentication类的一个方法),运行库会自动设置验证cookie(实际上包含了票据)并将用户转到原先请求的页面。通过这个请求,运行库检测到验证cookie中包含一个有效票据,然后赋给用户对这个页面的访问权限。下面,就是具体的实现。我们先写一个生成用户票据的方法://生成Token并保存到Cookies中 privatevoidCreateToken(Models.Use

  • 给定卫星图像,通过机器学习即可创建地面图像

    AiTechYun编辑:chux达芬奇曾创作的绘画展示了意大利某些地区的鸟瞰图,其细节水平在摄影和飞行机器发明之前是不可能实现的。实际上,许多评论家都想知道他如何想象这些细节。但现在研究人员正在研究逆向问题:给定地球表面的卫星图像,该区域从地面看起来是什么样的?这样一个人造图像有多清楚?加州大学默塞德分校的XueqingDeng及其同事进行了研究,他们训练了机器学习算法,只需通过查看上面的卫星图片就可以创建地面图像。该技术基于生成对抗网络。这包括两个称为生成器和鉴别器的神经网络。生成器创建图像,鉴别器根据某些学习标准进行评估,例如它们与长颈鹿有多接近。通过使用鉴别器的输出,生成器逐渐学会产生看起来像长颈鹿的图像。在这种情况下,Deng和合作人员使用地面的真实图像以及该位置的卫星图像训练鉴别器。因此,它学习如何将地平面图像与其俯视图相关联。当然,数据集的质量很重要。该团队将LCM2015地面覆盖图用作地面实况,该地图为整个英国提供了一公里分辨率的土地。然而,该团队将数据限制在71×71公里的网格中,包括伦敦和周围的乡村。对于此网格中的每个位置,他们从名为Geograph的在线数据库下载了

  • KPMG:2017年1季度全球金融科技投资报告!亚洲大幅下降,欧洲强势崛起,美国强劲增长!

    在经历了一年的爆发式增长之后,2017年金融科技领域的投资开局平稳:风险投资和并购投资总额在2017年1季度达到32亿美元,同2016年4季度的41.5亿美元相比有所下降,同巅峰期相比则有很大差距。 交易数量保持稳定:总的来看,一季度并购和风险投资活动是过去3个季度较低的,一季度金融科技领域被投资企业数为260家。风险投资规模降至2014年水平:从投资规模来看,风险投资接近2014年初水平或2013年全年规模,从2015年的巅峰期明显下降。但是风险投资规模仍然是历史上较高水平,达到23亿美元。大企业参与程度快速提高:大企业参与金融科技领域的投资在2014年稳步提高,经历了几个季度的快速发展之后,大企业和公司创投机构仍然积极参与金融科技领域的投资,参与1季度39个风险投资机构投资的金融科技项目,金额达到12亿美元。后期融资金额下降:在2016年平均融资金额达到最高的1680万美元之后,2017年1季度平均融资金额降至1180万美元。但是,融资中位数达到新高为380万美元。后期项目估值下降:项目估值中位数从2016年的1.513亿美元降至1季度的4150万美元。同时,早期项目估值则上升至4

  • 缓慢但胜在稳健,HBase大势已成

    【编者按】对比传统RDBMS领域,NoSQL界的厮杀显然更加激烈。而在这场没有硝烟的战场中,MongoDB和Cassandra无疑是风头最劲的两个产品。但是如果你着眼HBase,各大热门技术(比如Spark、Hadoop)及知名厂商(比如微软、SpliceMachine)的支持无疑描绘出一个更美好的未来,下面我们一起看GigaomAndrew带来的分析。以下为译文: 在NoSQL数据库领域,统治产品无疑当属MongDB和DataStaxEnterprise(一个领先的ApacheCassandra发行版)。然而本周的两条新闻头条却开始关注一个尽管很顽强,但知名度低的选手——ApacheHBase,这个几乎包含在任何主流Hadoop发行版的NoSQL数据库。Mongo的挑战聚焦上一周,有两个事件值得关注——7岁的MongoDB任命了第三任CEO,以及主打HBase的初创公司SpliceMachine新一轮融资超过300万美元。对比MongoDB和HBase,无论是独自还是联合发展,后者都没有任何超越前者的迹象。最终,即将离职的MongoDBCEOMaxSchireson将其离职原因归结

  • redis如何查看版本号_redis版本号

    linux环境下查看redis的版本:查看redis的版本有两种方式: 1.redis-server--version和redis-server-v复制得到的结果是:Redisserverv=3.2.12sha=00000000:0malloc=jemalloc-3.6.0bits=641.redis-cli--version和redis-cli-v复制 得到的结果是:redis-cli3.2.12 严格上说:通过 redis-cli得到的结果应该是redis-cli的版本,但是redis-cli和redis-server 一般都是从同一套源码编译出的。所以应该是一样的。版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至举报,一经查实,本站将立刻删除。发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/180081.html原文链接:https://javaforall.cn

  • 十六、.net core(.NET 6)搭建基于Redis的Hangfire定时器

    搭建基于Redis的Hangfire定时器   Hangfire的定时配置信息会自动生成在指定到数据库内,包括关系型数据库或非关系型数据库内。目前为止,它在Redis、Oracle上面,可以支持最短15秒的定时周期,其他数据库是分钟级别到。以下使用Hangfire+Redis来实现定时任务。 首先创建新的类库项目 Wsk.Core.Hangfire,然后在Wsk.Core.Package包项目下引用hangfire有关的组件,包括 Hangfire、Hangfire.Core、Hangfire.Redis、Hangfire.Redis.StaskExchange     在Wsk.Core.Hangfire项目下,新增Hangfire连接Redis的配置实体类:       在配置文件新增基于redis的hangfire的数据库连接:     我的配置源码: "Hangfire":{ "Config":{ "ConnectionString":"127.0.0.1:6379,passw

  • [Attention Is All You Need]论文笔记

    主流的序列到序列模型都是基于含有encoder和decoder的复杂的循环或者卷积网络。而性能最好的模型在encoder和decoder之间加了attentnion机制。本文提出一种新的网络结构,摒弃了循环和卷积网络,仅基于attention机制。 self-attention是一种attention机制,它是在单个序列中计算每个位置与其他不同位置关系从而计算序列。Transformer是第一个完全依靠self-attention机制来计算输入和输出表示。 模型架构     encoder 编码器由6个完全相同的层堆叠而成,每一层有两个子层,第一层是multi-headself-attention机制,第二层是简单的、位置完全连接的前馈神经网络。对每个子层都使用残差网络连接[必要性],接着进行LayerNormalization。也就是说,每个子层的输出都是LayerNorm(x+Sublayer(x)),其中Sublayer(x)是具体子层的具体实现函数。为了方便残差连接,模型中所有子层以及嵌入层产生的输出维度都是dmodel=512。

  • GROUP BY,WHERE,HAVING之间的区别和用法

     GROUPBY,WHERE,HAVING之间的区别和用法分类: Oracle学习2009-11-0123:40 21963人阅读 评论(6) 收藏 举报mathmanagersql数据库mysqlc having子句与where有相似之处但也有区别,都是设定条件的语句。在查询过程中聚合语句(sum,min,max,avg,count)要比having子句优先执行.而where子句在查询过程中执行优先级别优先于聚合语句(sum,min,max,avg,count)。简单说来:where子句:selectsum(num)asrmbfromorderwhereid>10//只有先查询出id大于10的记录才能进行聚合语句having子句:selectreportstoasmanager,count(*)asreportsfromemployeesgroupbyreportstohavingcount(*)>4以northwind库为例.having条件表达示为聚合语句。肯定的说having子句查询过程执行优先级

  • rust运行单测显示print信息

    cargotest命令默认是关闭了test里的print输出,这对有时候需要看输出信息很不方便,官方添加了两种方法: https://github.com/rust-lang/rust/commit/6eaa21635e6c6c90e1a0579876bc63581f661f7d 具体使用如下: 方法1: 添加--nocapture参数 注:这个方法只能用cmd,powershell无法使用,因此powershell只能使用第二种方法 cargotest----nocapture 这个写法有些怪异,但的确可以使用,横线全部是“减号” 方法2: 设置RUST_TEST_NOCAPTURE环境变量 2.1powershell里的设置: $env:RUST_TEST_NOCAPTURE=1 2.2cmd里的设置: setRUST_TEST_NOCAPTURE=1 不过设置后cargo输出的信息就不是彩色的了,关闭方法如下: powershell: delenv:RUST_TEST_NOCAPTURE cmd: setRUST_TEST_NOCAPTURE= 注意:在控制台或者p

  • 双路快排

    序列元素重复,是序列已经排好序的一种特殊情况,如果一个序列中的元素全部相同,也将出现最差情况。 如果序列中存在大量重复元素,在普通快排中,相等的元素会被全部放到分区点的一边,这样会大大增加快排的时间复杂度,双路快排就是用来解决这个问题的。 能够将序列均衡分开的分区点才是好的分区点。均匀分开意味着保持O(logn)的复杂度。 fromrandomimportshuffle,randrange defquick_sort(lst,left,right): #当只有一个元素的时候退出递归 ifleft<right: p=partition(lst,left,right) #左右分区分别递归 quick_sort(lst,left,p) quick_sort(lst,p+1,right) defpartition(lst,left,right): rand=randrange(left,right) lst[left],lst[rand]=lst[rand],lst[left]#随机挑选出一个元素,与第一个元素交换,作为分区点 pivot=lst[left]#以第一个元素为分区点 l

  • auto_ptr与shared_ptr

    注:从c++11开始,auto_ptr已经被标记为弃用,常见的替代品为shared_ptr shared_ptr的不同之处在于引用计数,在复制(或赋值)时不会像auto_ptr那样直接转移所有权 auto_ptr auto_ptr实际也是一种类,拥有自己的析构函数,生命周期结束时能自动释放资源 正因为能自动释放资源,特别适合在单个函数内代替new/delete的调用,不用自己调用delete也不用担心意外退出 auto_ptr对资源的拥有者只能有一个,当两个auto_ptr进行等于号(赋值)操作时,等于号后面的auto_ptr将失去资源的所有权 如果只是想显示auto_ptr对应资源的信息,而不是更改的话,要以constauto_ptr&(const+引用)的方式来传递给其它函数 赋值与安全传递 #include<iostream> #include<memory> usingnamespacestd; template<classT> ostream&operator<<(ostream&os,cons

  • 【C++基础 04】vector详解

    按照写博客的习惯一开始总要加点鸡汤文什么的,请原谅我今天想不起来。 ============================================= 今天要写的内容是顺序型容器。首先,标准库定义了三种顺序容器类型:vector,list和deque(双端队列),这篇博客介绍的是vector容器。 首先要知道,vector不是一种数据类型,而是一个类模板,可以用来定义任意多种数据类型,比如说vector<int>是一种数据类型,vector<string>也是一种数据类型。使用vector之前我们要先包含头文件 #include<vector> usingstd::vector;复制 1.vector初始化 vector<T>v1;//初始化一个为空的vector vector<T>v2(v1);//v2是v1的一个副本 vector<T>v3(n,i);//n个值为i的vector vector<T>v4(n);//v4含n个默认初始化值的vector(如int默认0,string默

  • 《SLAM导航机器人基础》第二章:C/C++编程(中)

    2.3节,程序基本逻辑结构 本节简述程序设计中的几个逻辑结构:判断结构,循环结构。 2.3.1判断结构 判断结构,用于编写有执行条件的语句。有if判断结构和switch判断结构两种。我们以示例进行学习: if(speed>1000)speed=1000;//如果speed>1000,则赋值1000给speed。这条语句起到限值作用,使得speed的最大值不超过1000。 if(speed>700)ControlInterval=10;//如果speed>700,执行ControlInterval=10;否者,执行下一个判断elseif(speed>400) elseif(speed>400)ControlInterval=20;//如果speed>400,执行ControlInterval=20;否者,执行下一个判断elseif(speed>200) elseif(speed>200)ControlInterval=30; elseControlInterval=40;//以上条件均不满足,执行ControlInterval=40

  • docker端口映射

    docker容器在启动的时候,如果不指定端口映射参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的。 端口映射通过-P和-p参数来实现 一、-P将容器内部开放的网络端口随机映射到宿主机的一个端口上; 二、-p指定要映射的端口,一个指定端口上只可以绑定一个容器;支持的格式如下: ①IP:HOSTPORT:CONTAINERPORT:指定ip、指定宿主机port、指定容器port 适用于映射到指定地址的指定端口 eg:将容器的5000端口映射到指定地址127.0.0.1的5000端口上: dockerrun-it-d-p127.0.0.1:5000:5000docker.io/centos:latest/bin/bash 复制 ②IP::CONTAINERPORT:指定ip、未指定宿主机port(随机)、指定容器port 适用于映射到指定地址的任意端口 eg:将容器的4000端口映射到127.0.0.1的任意端口上: dockerrun-it-d-p127.0.0.1::4000docker.io/centos:latest/bin/bash 复制 注:会将容器的ip

  • Docker中运行MySQL5.7并挂载宿主机目录到镜像

    目录 1.1拉取mysql镜像 1.2创建用于挂载的目录 1.3使用镜像创建容器 1.4命令解析: 1.5进入容器   正文 回到顶部 1.1拉取mysql镜像   回到顶部 1.2创建用于挂载的目录   回到顶部 1.3使用镜像创建容器   回到顶部 1.4命令解析: --name:容器名 --p:映射宿主主机端口 -v:挂载宿主目录到容器目录 -e:设置环境变量,此处指定root密码 -d:后台运行容器 回到顶部 1.5进入容器 复制

相关推荐

推荐阅读