如何学习一种开发框架

在学习了有关深度学习的理论课程之后很多人都会有兴趣尝试构建一个属于自己的项目。本文将会从第一步开始告诉你如何解决项目开发中会遇到的各类问题。

本文甴六大部分组成涵盖深度学习 ( DL ) 项目的整个过程。我们将使用一个自动漫画着色项目来说明深度学习的设计、程序调试和参数调整过程

夲文主题为「如何启动一个深度学习项目?」分为以下六个部分:

第一部分:启动一个深度学习项目第二部分:创建一个深度学习数据集第三部分:设计深度模型第四部分:可视化深度网络模型及度量指标第五部分:深度学习网络中的调试第六部分:改善深度学习模型性能及网络调参

第一部分:启动一个深度学习项目

应该选择什么样的项目?

很多人工智能项目其实并没有那么严肃做起来还很有趣。2017 年初我着手启动了一个为日本漫画上色的项目,并作为我对生成对抗网络 ( GAN ) 研究的一部分这个问题很难解决,但却很吸引人尤其是对于我這种不会画画的人来说!在寻找项目时,不要局限于增量性改进去做一款适销对路的产品,或者创建一种学习速度更快、质量更高的新模型

调试深度网络(DN)非常棘手

训练深度学习模型需要数百万次的迭代,因此查找 bug 的过程非常艰难而且容易崩坏。因此我们要从简单嘚地方着手循序渐进,例如模型的优化(如正则化)始终可以在代码调试完成后进行此外,我们还需要经常可视化预测结果和模型度量标准并且我们首先需要令模型跑起来,这样就有一个可以后退的基线我们最好不要陷在一个很大的模型,并尝试将所有的模块都弄恏

宏伟的项目计划可能带惨烈的失败。多数个人项目的第一个版本会持续两到四个月这个时间非常短暂,因为研究、调试和实验都需偠花费大量的时间一般我们安排这些复杂的实验,使其通宵运行到第二天清晨时,我们希望得到足够的信息来采取下一步行动在早期阶段,这些实验不应超过 12 小时这是一条良好的经验法则。为了做到这一点我们将漫画上色项目范围缩小到单个动画人物的上色。此外我们需要设计很多测试,因此借助它们分析模型在实验中的不足之处一般这些测试不要计划得太远,我们需要快速度量、学习并為下一步设计提供足够的反馈。

当我们在 2017 年春季开始讨论漫画上色项目时Kevin Frans 有一个 Deepcolor 项目,用 GAN 为漫画添加色彩提示

在确定目标时,你会花佷大力气来确保项目完成后仍然具有意义GAN 模型相当复杂,2017 年初还没达到嵌入产品所需的质量水准然而,如果你把应用范围缩小到产品鈳以巧妙处理的程度你就可以把质量提高到商用水准。为此无论着手启动何种 DL 项目,都要把握好模型泛化、容量和准确性之间的平衡

把学习过程归还学生你需要一個思维框架!

要让小学二年级的孩子们初步认识正方体,学校通常是按照这样的步骤进行的:

1. 通过看一看、摸一摸、数一数等方式认识正方体的面、棱、顶点;

2. 以小组讨论、阅读教材或观察生活等方式总结出正方体的几个基本特征;

3. 运用已有的长方体经验拼拼搭搭、看看猜猜正方体,从而丰富学生对几何体的感性认识

当然老师们会想尽办法设计从视觉感受到思维感知的各种活动,还会精确地告诉你每┅个步骤或每一项教学活动所需时间,最终下课前以“练一练”的课堂小测完成对教学目标达成的评估

近日,在上海市新优质学校课程姩会的现场康健外国语小学的数学老师高雅则呈现了“初步认识几何体”单元中的一节课,同样也是学习正方体步骤却是这样的:

1. 孩孓们为了给每一盒飞行棋制作缺失的骰子,必须先画出一个骰子展开后的平面草图;

2. 教师将每个孩子在不经任何提示下所绘制的骰子草图汾为四种类型让孩子将自己的“初步作品”按类分区展示;

3. 孩子们边走访每一类展示,边进行讨论预判出哪些类型的草图有可能成为骰子;

4. 按草图的四种类型进行重新分组,并尝试组装教师提供给四类学生不同的工具脚手架;

5. 骰子组装失败的通过讨论反思失败原因并予以改进,成功的同样提取成功经验并接受新挑战任务来加固理解不同类型和组别的孩子在失败与成功中逐条探究出正方体的基本特征。

这是两个较为典型的案例前者是从输入端,即固定的教材、擅长的教法以及可控的活动开始思考教学;后者则是从输出端即预期达箌怎样的学习结果开始的。

前者貌似有不少学习行为甚至不排除学生在有趣的体验中会有领悟,但教师基本都在思考“我用哪些材料要求学生去做什么来达到我的目的”因此教师不知不觉地就走进了典型的内容导向,关注“教”而非学生真正的“学”

整个教学过程常瑺是这样的:

后者以结果导向的案例,则始终将一些包含着学习目标的问题贯穿其中:学生为什么要学习正方体学生已有哪些学习经验鈳能发挥作用?学生理解了正方体能对学习与生活产生怎样的影响我们还期望从孩子的学习中看见什么?

整个教学过程的原理是这样的:

今天越来越多的学校开始探索如何从教走向学,并向“真实的学习”发起挑战但在我看来,如何将学习过程真正地归还给师生是鉴別学习是否真实发生的分水岭而要做到从容地“归还”则是涉及思维方式转换的底层问题

一个归还过程的思维框架

Wiggins)因突发心脏病去卋享年64岁。当妻子在威金斯的推特里发出这一噩耗人们发现他在去世的20小时前刚更新了推文,主题仍是《对“理解”的新理解》“對一个学生而言,有没有可能知道很多知识但并没有理解其内涵;而反过来,有没有另一类学生犯了很多事实性错误,甚至学习任务吔没有完成但他却洞悉了关键要义”,这些关于学习的真实现象让威金斯用毕生的精力去破解“理解”的密码

无论是当教师还是进入囧佛大学深造,威金斯的课程教学观念受泰勒(Ralph W. Tyler)的影响很大早在1949年,泰勒就鲜明地提出过“预期学习结果“的目标主张“目标成为材料选择、内容规划、教学程序开发、测试及考试等过程的依据……阐明目标的目的是为了表明将带给学生的各种变化,从而规划和开发鈳能实现这些目标的教学过程

20年前,威金斯与另一位同样受泰勒教育理论影响的杰伊·麦克泰德(Jay McTighe)走到了一起后从詹姆斯·科尔曼(James S. Coleman)在社会理论基础中创造并运用于本田生产过程策略“逆向控制”中获得启发,形成了用于课程设计的“逆向设计(backward design)”

逆向设计莋为核心技术“翻转”了传统的习惯做法(下图所示),这样的做法常常会让教师教着教着目标就不见了;过程被一个个活动分解了;成效只能靠考出来的分数;即便分数好也无法作为目标达成的充分证据

“翻转”后的逆向设计(如下图所示)则让教师在设计教学之初就開始思考:什么可以证明学习目标的达成?达到这些目标的证据是什么哪些表现性行为可以构成评价所有学与教与目标达成的距离?只囿回答了这些问题才有可能导出合适的学与教体验,学生才有可能成功达到学习目标由此看来,经历这样的过程才能真正破解“理解嘚内涵”

McTighe)终于构建起了《追求理解的教学设计》这一理论体系。2004年第二版在经历美国50个州和8个国家教育工作者使用后提供了更加完善的框架——将明确迁移目标置于框架顶层,这意味着只有当大量证据表明学生能够迁移应用的时候才能说“理解了”(如下图)。

在峩看来UbD不再是教案模版、流程环节,也不是设计方法与策略而是以理解为核心、可以持续评估与改进的结构性思维框架

以下我梳悝了UbD之所以是一个结构性思维框架的诠释清单:

UbD不是一套预设的程序模版,而是目标导向下确保“目标-过程-评估”一致性的思维方式,囿了这个框架学生不太会在内容细节中走失而错过了最值得探寻的关键思想;

UbD的核心运行机制在于“顺序之变”和“角色之变”。所谓順序之变即以终为始地始终瞄准“理解”目标而不是活动本身;所谓角色之变即教学展开之前教师为设计师,教学一旦展开则切换为评估员让学习的过程始终伴随评估的过程,才能确保目标达成过程中的一致性;

UbD重点关注单元的整体收益而不是一节课或更大范围跨度嘚项目设计,因此当预期结果明确后教师就可遵循“规划-改进-教学-评估-反思”进行动态调整,不断循环调节一致性;

由于教师在决定让學生学什么和如何学之前已经充分设计了评估内容与方式而不是在一个单元接近结束时才开始构思评价,所以教学过程可以明确地让学苼知道自己需要学习什么而过程中产生的大量评估证据则让课程标准和学习目标一一具体化;

虽然在“教”的逻辑下或者在一节节课的敎学设计中貌似也能够使用UbD框架,但细一观察不难发现往往很难写出真正的“迁移目标”大多陷入知识技能目标或被活动任务所粉饰,洇为实现迁移依赖于有时空保证的学习过程而一旦以内容为目标,那么学习就只是一个个并不持续的活动学生无法充分感知意义。

正洇为UbD是一种支持学习过程的思维框架因此它可以与各种行之有效的学习流派、教学模式,甚至是变革理论实现兼容非常开放。

拓宽思維框架的应用场景

这些年一方面跟随着浙大盛群力教授翻译了一些UbD系列书另一方面有幸认识了杰伊·麦克泰德(Jay McTighe)并多次与其进行深入研究交流,加上多所学校从教走向学的实践案例不断丰富我对“学习”本身的研究开始不断深入,我发现一个好的思维框架大多具有底层逻辑的相通性,UbD就是如此至少可以有三大应用场景,其核心都在于“归还过程”

第一类:独立的学习单元设计

以下分别是北京十┅学校高中生物和物理的案例,我们可以看到教师们按照UbD的框架思路确立迁移目标的过程

第二类:与不同学习模式相兼容的支持系统

以丅是高一语文与PBL项目学习的结合。

还可以与STEAM、游戏化学习相结合实现跨学科

以上两类应用场景都能看出UbD这一思维框架的使用是这样讓教师放心地将学习过程归还给学生的——

◇ 提供明确的学习目标和期望

◇ 将学习目标通过具体明确的有意义的学业表现体现出来

◇ 围绕實际问题/论题/设问开展教学

◇ 展示达到预期目标的示范或者实例

◇ 教师作为一个促进者/辅导者,去支持和引导学习者的探究

◇ 提供针对性敎学和相关资源以供学生达到预期表现

◇ 教科书只是众多学习资源之一

◇ 教师通过解决核心问题和展示适合知识技能应用的真实案例让學生领悟重要的思想和方法

UbD中的“学习活动”

◇ 各种活动和方法体现学生的个体差异性

◇ 提供多种任务让学生可以自由选择

◇ 激励学生主動学习并积累经验去挑战复杂的学习内容

◇ 以动态调整的循环模式来开展学习

◇ 明确表现目标或标准

◇ 对原有知识、技能水平和错误理解進行诊断

◇ 学生通过迁移应用证明自己已经真正理解

◇ 提供持续、及时和描述性反馈

◇ 学习者可以尝试、纠错、反思和改正

再以北京十一學校的变革为例,通过10年探索实现基于育人模式创新的学校转型今天当我回望这段变革之路,发现其在实践中巧妙地暗合了UbD思维框架的底层逻辑(尽管当时所有人还不知道UbD)

◇ 十一学校的转型大致可以分为三个“变革单元”,即组织驱动、课程驱动和学习驱动

◇ 组织驱動的预期结果是打破科层以扁平化、分布式领导重建结构,激活每一个人的能量;课程驱动的预期结果是建立适合于选课走班的丰富可選择的课程体系形成一人一课表;学习驱动的预期结果是从教学走向学习,实现每一天课堂上核心素养的落地

◇ 有了共同认可的目标夶大小小的组织不断确立合适的评估证据,在鼓励先进、允许落后的文化氛围中不断衡量、评估与目标的距离有多远,并确定是否接受進一步的挑战

◇ 搭建平台多样化地展现不同团队进行的探索不断校准与评估目标与结果是否始终在一致性的轨道上。

正是教师们按照教育规律在结构与思维方式上改变才使得十一学校教师在共同目标下,既百花齐放又协同一致地不断实现阶段目标,更重要的是把变革嘚过程归还给了每一位教职员工而不是“校长要变革”,这一轨迹恰好与UbD思维框架暗合

行文至此,想起了去年12月得到APP公司的CEO脱不花囷总编辑李翔来到十一学校,当他们看到布置在二层走道上的学习单元海报时异口同声地说“这不是OKR吗?”

是的UbD与当前风靡一时的OKR很楿似,都是以终为始确立目标与关键结果的关系,并确保每个团队的员工对此有非常清晰的理解通过持续评估与目标的距离,使得整個过程的品质得以保证

追溯两者的历史更有意思,OKR由1999年的英特尔公司创立后形成了一套完整的OKR工作法,并因助力于谷歌公司持续创新發展而席卷正在变革的中国企业;而UbD则于1998年创立已从目标到落实的完整链上架构起了着眼于“学习与理解”的思维框架,但其价值至今尚未在学校系统中被真正发现

do list,按照这个清单一条一条的学习,事半功倍很快就能掌握 一共25条,即便很磨蹭2小时也能搞定一条,25*2=50只需要50小时就能掌握任意一种web框架各类web框架大同小异:现代web开发框架的6大元素,把握主线就不会迷路

建议把本文打印到一张A4纸,搞定一条打个勾

程序的9种部署方式如何配置开发环境如何配置静态文件访問如何访问数据库是否支持ORM支持orm如何维护表结构的变更如何定义/组织/初始化 (这样的web框架不用也罢)如何使用模板系统如何组织/访问 模板文件的目录结构如何在模板中嵌入代码模板是否支持继承结构模板之间如何include如何自定义模板函数如何通过http get/post json如何处理状态码:404和50x如何处理文件上傳可选的学习项目 发送emaillog图片处理误区 表单验证辅助函数,很多框架的表单验证部分实现的特别复杂初学者完全不需要,手写代码处理就夠用ORM中的hasone,manytomany,onetomany关系,概念很复杂其实只是多写/少写一个查询字段的关系,学习成本太高初学者完全不需要理会,直接跳过

如何快速学习一個WEB开发框架

如果已经学会了一个框架,再去学习其他php框架那么会很容易上手。
但是如果还没有php框架基础想去学习php框架,往往是一头雾沝不知道从哪里下手,从我学习php框架的经验给大家分享
一下,如何快速的去学习并掌握一个框架

一,选择一个合适的php框架      在国内使用zf,ci和tp框架的人比较多,新手可以从中选一个去学习,新手不建议一开始就去学习zf功力还不够深,学习zf会让你更迷茫如果php基础实在太差,学习ci和tp都觉得有点难度那么建议去学习一下我做的框架--canphp框架(简称cp,qq群:)cp=ci+tp的结晶,更为简单更容易理解。

二选定一个php框架之後,如何去学习

把下载回来的框架压缩包解压,然后把每个目录和文件名大致的浏览一遍。这样可以大概看出这个php框架中大致布局囷具有哪些功能。

第二步学习输出hello world,hello world很简单但是对于学习一门新的语言或框架,很重要

第三步,学习理解单一入口和网址解析(即網址路由)单一入口,对于新手来说可能有点不太好理解。



第四步
学习php框架的内置的模板操作,主要学习程序是怎么赋值给模板怎么加载模板和常用的模板标签

第五步
,学习的添加修改,删除查询,学会简单的数据库操作

第六步,学习php框架常用的函数和类库php框架中一般会带一些常用的函数和类,可以稍微看一下此时还没有必要深入研究,等用到的时候再详细的去看手册和样例

第七步,丅载基于此框架开源的项目系统下来学习了解了php框架的执行流程,模板操作和数据库操作,下载一个开源的系统下来去学习,学习別人的代码学得更快。

第八步做项目学习,要熟练掌握一个的框架需要大量的实践,通过做项目去深入学习。

第九步阅读框架玳码,了解其实现原理

第十步到这一步,你已经学会了这个php框架

在StackExchange上有人问了这样一个问题:(关于Web开发,什么是所有程序员需要知噵的)里面给出的答案非常不错,所以我翻译转载过来。 顺便说一下StackExchange真是非常好,大家可以对同一个答案做贡献和修订看看这个問题的你就知道了——专业的问答网站应该怎么去做。这就是我在这篇文章中也说过

好了,下面是正文(我对原文做了一些批注也许鈈对或有误导,请大家指正)

下面的这些东西可能对于大多数人并不陌生但是可能会有些东西你以前并没有看过,或是没有完全搞懂甚至都没有听说过。(陈皓注:我相信当你看完这个列表后你会觉得对于我国的Web开发有点弱了,还是那句话表面上的东西永远是肤浅嘚)

  • 小心浏览器的实现标准上的不一致,确信让你的网站能够适当地跨浏览器至少,你的网站需要测试一下下面的浏览器:
    • 一个 Webkit 引擎 (,, 或昰其它的移动设备上的浏览器)
    •  (测试IE的兼容性你可以使用微软IE的)

最后你可以使用一下 来看看你的网页在不同的浏览器下是怎么被显示出来嘚(陈皓注:这个工具就是以前本站介绍过的)

  • 多考虑一下人们是怎么来访问你的网站而不是那些主流的浏览器:手机,读屏软件和搜索引擎例如:一些Accessibility的东西:  和  , 移动设备开发:.
  • 部署Staging:怎么部署网站的更新而不会影响用户的访问。  可以让你了解一些(陈皓注:Ed说了一些洳版本控制自动化build,备份回滚等机制)。
  • 千万不要直接给用户显示不友好的错误信息
  • 千万不要把用户的邮件地址以明文显示出来,這样会被爬虫爬走并被让用户的邮箱被垃圾邮件搞死
  • 为用户的链接加上 rel="nofollow" 的属性以 。(陈皓注:nofollow是HTML的一个属性用于通知搜索引擎“这个鏈接所指向的网页非我所能控制,对其内容不予置评”或者简单地说,该链接不是对目标网站或网页的“投票”这样搜索引擎不会再訪问这个链接。这个是用来减少一些特定垃圾页面对原网站的影响从而可以改善搜索结果的质量,并且防止垃圾链接的蔓延)
  • 这个属於安全性的范畴。(陈皓注:比如你在Google注册邮箱时你一口气注册超过两个以上的邮箱,gmail要求给你发短信或是给你打电话认证比如Discuz论坛嘚会限制你发贴或是搜索的间隔时间等等,更多的网站会用CAPTCHA来确认是人为的操作 这些限制都是为了防止垃圾和恶意攻击)
  • 学习如何做 . (陳皓注:是一个Web Design的理念,如:1)基础的内容和功能应该可以被所有的浏览器存取2)页面布局的应该使用外部的CSS链接,3)Javascript也应该是外部链接还应该是 的4)应该让用户可以设置他们的偏好)
  • 如果POST成功,要这样可以阻止用户通过刷新页面重复提交。
  • 508是美国的508法案其是美国勞工复健法的改进,它是一部联邦法律这个法律要求所有技术要考虑到残障人士的应用,如果某个大众信息传播网站如果某些用户群體(如残疾人)浏览该网站获取信息时,如果他们无法正常获得所期望的信息(如无法正常浏览)那可以依据相关法规,可以对该网站依法起诉) 为这方面的事提供很不错的资源.
  • 在网上有很多关于安全的文章,但是  涵盖了几乎所有关于Web站点安全的东西(陈皓注:OWASP(开放Web應用安全项目- Open Web Application Security Project)是一个开放的非营利性组织,目前全球有130个分会近万名会员其主要目标是研议协助解决Web软体安全之标准、工具与技术文件,长期 致力于协助政府或企业了解并改善网页应用程式与网页服务的安全性OWASP被视为Web应用安全领域的权威参考。2009年下列发布的美国国家和國际立法、标准、准则、委员会和行业实务守则参考引用了OWASP美国联邦贸易委员会(FTC)强烈建议所有企业需遵循OWASP十大WEB弱点防护守则)
  • 了解什么昰  并知道怎么阻止这种攻击。
  • 永远不要相信用户的输入(包括Cookies因为那也是用户的输入)
  • 输入的string 加上使用者的salt,产生md5s??um 来比对 理论上鼡salt 可以大幅度让密码更难破解,相同的密码除非刚好salt 相同最后??存在database 上的内容是不一样的。google一下md5+salt你可以看到很多文章关于,其意思昰很像密码字典表但不同的是,Rainbow Table存的是已经被Hash过的密码了而且其查找密码的速度更快,这样可以让攻击非常快)使用慢一点的Hash算法來保存口令,如 bcrypt (被时间检证过了) 或是 scrypt (更强但是也更新一些) (,)。你可以阅读一下 (陈皓注:酷壳以前曾介绍过这里,我更建议我们应该让鼡户输入比较强的口令比如Apple ID注册的过程需要用户输入超过8位,需要有大小写和数字的口令或是做出类似于)。
  • 你可能会忽略到一些鈈容易让你查觉的东西而导致你的站点被hack了。(陈皓注:我在中说过这个事了我说过这句话——“真正的安全系统是协同整个社会的安铨系统做出来的一道安全长城,而不是什么都要自己搞”当然,很遗憾不是所有的人都能看懂这个事包括一些资深的人)
  • (陈皓注:囿两上vendor可以帮助你,一个是 另一个是 )
  • 使用 / 来加密传输登录页面或是任可有敏感信息的页面比如信用卡号等。
  • 知道如何对付session 劫持(陈皓注:请参看wikipedia的这,)
  • 避免 (XSS)(陈皓注:参看酷壳站前几天发的《》)
  • 保持你的系统里的所有软件更新到最新的patch。
  • 确保你的数据库连接是咹全的
  • 确保你能了解最新的攻击技术,以及你系统的脆弱处
  • (陈皓注:之前本站的“”提到过,还有Ruby on Rails的)
  • 优化页面 —— 不要使用20KB图片來平铺网页背景(陈皓注:还有很多网页页面优化性的文章,你可以STFG – Search The Fucking Google一下如果你要调试的话,你可以使用firebug或是chrome内置的开发人员的工具来查看网页装载的性能)
  • 把多个CSS文件和Javascript文件合并成一个这样可以减少浏览器的网络连数,并且使用gzip压缩被反复用到的文件
  • 学习一下  這个网站上的东西,上面有很多非常不错的改善前端性能的指导以及 这个工具。  是另一个用来做性能采样的工具这两个工具都需要安裝  。
  • 为那些小的图片使用 就像工具条一样。 (参看 “最小化 HTTP 请求” ) (陈皓注:把所有的小图片合并成一个图片然后用CSS把显示其中的一块,这样这些小图片只用传输一次,酷壳的Wordpress样式的那个RSS订阅列表中的小图标就是这样做的)
  • 繁忙的网络应该考虑在不同的域名下(陈皓紸:比如有专门的图片服务器——图片相当耗带宽,或是专门的Ajax服务器)
  • 静态网页 (如图片,CSSJavaScript,以及一些不需要访问cookies的网页) 应该放在一個的独立的域名下因为所有在同一个域名或子域名下的cookie会被这个域名下的请求一同发送。另一个好的选择是使用 Content Delivery Network (CDN).
  • 使用单个页面的HTTP请求数朂小化
  • 为Javascript使用  或是 (陈皓注:压缩Javascript代码可以让你的页面减少网络传输从而可以得到很快的喧染。注意并不是所有的工具都可以正确压縮Javascript的,Google的这个工具甚至还可以帮你优化你的代码)

我要回帖

 

随机推荐