Python: 从 2.7 升级到 3,我比 vue 慢了一点点

【python2.7】基础知识点一遍过,考试不挂科 python2.7基础知识点一遍过,复习突击完考试不挂科 阅读详情

小破站搜索云前端,查看视频版

89313ca528d6a706a6a73ae81bfd6211.jpeg

2024 年 7 月 7 日,据一位长期的Python观察者爆料,Fedora 41 系统最终将停止支持 Python 2.7。这是Python 2系列的最后一个版本,Python 2.7在Fedora Linux 41中将被退役且不再替代。除了PyPy之外,Fedora 41及以后的版本将不再包含Python 2,对于依赖于python2.7的包,在运行时或构建时需要处理这个退役问题,否则它们也将被退役。GIMP 3 也将在Fedora 41中推出,以去除任何剩余的Python 2依赖。

Vue

有趣的是,对比于前端开发领域流行的开发工具 vue.js,其版本 2 向版本 3 的演进也拖延了很久的时间。并且巧合的是,同样是 2.7 的版本,也是vue 2.x中最后一个稳定版本。不同的是vue3之于vue2采用了高度兼容的升级方式,而非python3那样断崖式的不兼容升级。

Vue 2 达到生命周期终点的时间是 2023 年 12 月 31 日,之后 Vue 2 将不再接收新功能、更新或修复,但仍然可以在现有的分发渠道中获取。虽然应用程序将继续运行,但包管理器会发出警告,提醒 Vue 2 已经不再是支持的版本。

我们之前曾制作过一期视频(小破站搜 BV1BP4y1t7Xz),揭秘了 Vue 版本系列中那些有趣的版本命名方式,一些重要版本大多以动漫、科幻电影等命名。在 2.x 最后一个大版本,也是专注于帮助开发者从 v2 迁移到 v3 的 vue2.7 中,Vue 2.7.0 仍遵循以上传统以 "Naruto(火影忍者)" 为代号,而 2023 年平安夜发布的 v2.7.16 的代号则是 Swan Song (绝唱),明确了 v2.x 从此达到 End Of Life(EOL)状态的含义。对于无法立即迁移到 Vue 3 的用户,Vue 官方也与第三方合作提供了 Never-Ending Support -- 即使在 EOL 之后也能继续获得 Vue 2 的更新和安全补丁。

Python

回到 Python 2 的告别,其生命周期原本预计在2015年结束,但后来延长到了2020年。Python维护者宣布,由于RHEL 7的维护结束和RHEL 8中Python 2.7应用的退役,他们将不再定期为Python 2.7回传安全修复到RHEL。尽管如此,这个过时的包在超出其退役日期五年后仍被提供,并将持续提供直到Fedora 40的生命周期结束。除了少数最后的修复工作外,将不再进行更新和维护,这意味着“Python 2将不再接受新的bug报告、修复或更改,且不再受支持”。

关于Python 2到Python 3的迁移,尽管Python 3在过去几年里已成为主流版本,但许多公司仍未完成过渡,仍然使用Python 2。他们普遍认为,Python 2到Python 3的迁移并不容易。特别是对于拥有庞大代码库、复杂逻辑和繁重决策过程的公司,代码兼容性问题、生态系统的碎片化、venv虚拟环境增加了复杂度等,都带来了新旧并存的困扰。在某些场景下,开发者可能需要同时维护Python 2和Python 3的代码,这不仅增加了维护成本,也使得代码管理和版本控制变得更加复杂。

然而不迁移到 Python 3 也要承受各种风险。其一是安全性 -- 随着 Python 2 官方 EOL,将不再有安全更新,这可能导致安全漏洞无人修复,使运行Python 2的系统处于严重风险之中。此外,Python 2 的退役也可能影响吸引新人才和经验丰富的开发人员,因为 Python 在开发者中越来越受欢迎,他们当然倾向于学习新的Python 3版本,而非退休的、不受支持的 Python 2。

尽管如此,Python 3的改进和新特性,如 Unicode 支持、更清晰的语法、性能提升以及对现代编程实践的更好支持、更好的常见习语和模式表达、并发性、故障处理、测试和调试的改进,以及计算速度的大幅提高和其它优化,最终还是证明升级是值得的。随着时间的推移,Python 3完全取代Python 2也只是早晚问题,你可以使用"from future import"等语法编写Python 3友好的代码,一些工具库如Six库提供了用于平滑Python 2和3之间差异的实用函数也为升级提供了便利。

Python 3逐渐成为主流,大部分库和框架都完成了迁移,开发者也逐渐适应了新版本。现在,Python 3的广泛采用和Python 2的退役,标志着Python社区向前迈进了一大步。

Spring Boot

其实版本 2.7 的升级魔咒还不止让 Python 和 Vue 碰到过,比如国内但凡提起微服务架构,可能十个程序员里有九个会立马想起 Spring Boot 来。这个 Java 框架的设计目标是简化 Spring 应用的初始搭建以及开发过程。Spring Boot 提供了约定优于配置(Convention over Configuration)的机制,让开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot 几乎成为了企业级应用开发的标配。

于 2022 年 11 月正式发布的 Spring Boot 3.0 带来了多项重要的更新和改进,包括对Java 17的强制支持、Spring Framework 6的集成、模块化增强、Web框架更新以及数据库访问技术的革新。这些变化促使开发者考虑将现有项目升级,以充分利用新版本带来的优势。在开发者社区中,3.0 的升级当然也引起了广泛关注和期待。不过,升级过程也面临挑战,一些开发者出于开发习惯,或是遗留项目的维护难度、公司组织规定等,表示 JDK8 或 JDK11 不能动就是不能动。

总结

相比之下,Vue.js 和 Spring Boot 从 2.x 到 3.x 的升级,虽然也涉及到一些重大的改变和新特性,但它们的升级路径通常提供了较为明确的迁移指南,且社区和框架本身提供了较多的支持工具,如迁移助手和详细的文档,来帮助开发者平滑过渡。Vue 和 Spring Boot 的升级更多的是对现有特性的增强和对新技术栈的采纳,如 Vue 3 中对 Composition API 的支持,Spring Boot 3 对 Java 17 和 Jakarta EE 的支持,这些升级虽然也需要开发者投入时间和精力进行代码迁移,但总体上争议和阻力小于 Python 2 到 3 的升级。

总之,太阳底下无新事,前端、后端、语言、框架,寰球共此凉热,除了版本上的巧合因素,大致也有一些规律蕴含其中。1.x 版本青涩烂漫肆意挥洒,2.x 版本成熟稳定满身负担,3.x 版本百尺竿头更进一步;你在迁移代码,却逐渐看清了自己。

c46517b5de7320e7d4feb14366d7ad45.png

662aa1cdb729788cb2f462fad5a960b3.png

【Python】python2.7升级到python3.x 【代码】【Python】python2.7升级到python3.x。 阅读详情

相关推荐

ubuntu升级python到python3.11

在 Ubuntu 中升级 Python 到 3.11 版本可以通过编译源代码或者使用第三方工具来完成。请注意,在升级 Python 之前,请确保备份重要数据,并谨慎操作。这个方法pip也会刷新,不用再配pip。以上步骤将会下载 Python 3.11 的源代码,编译并安装在你的系统中。请注意,升级 Python 可能会影响到系统的其他依赖项,因此请确保你了解可能的影响,并提前备份重要数据。另外,也可以考虑使用第三方工具,如 pyenv 或者 Anaconda,来管理 Python 版本。

qianshang666的博客 1587

Win10下python 2.7与python 3.7双环境安装教程

Win10下python 2.7与python 3.7双环境安装教程 1、python软件下载网址: https://www.python.org/downloads/windows/ 2、 安装python2.7.16 第一步双击安装包,选择你要安装的路径 第二步默认next,这里不能配置环境变量,只能安装好后手动配。 点击finish安装完成。这样python2和...

helloxiaozhe的博客 1万+

vue项目从node8.x升级到12.x后

开始使用低于vue-cli3创建的项目,在更新node到12.x后,项目运行不起来了,这个让我想起我刚使用react时,安装的依赖,过了半年后,项目也运行不起来,在这了记录下(时间:2019-10-24) 1.版本更新后报错 更新node后,原来的vue项目的node Sass环境变了,导致项目跑不起来 Node Sass could not find a binding for your ...

ZJW222的博客 1491

【教程】python2.7下载、安装及配置

配置python环境 下载 python2.7 setuptools pip win10下的安装配置 安装 双击 点击next> 记住这个安装路径,点击next> 点击next> 等待安装完成,点击next > 点击finish 配置环境变量 右击此电脑,点击属性 点击高级系统设置 点击环境变量 双击path 点击新建 输入刚才的安装路径C:\Python27,点击所有的确定 重启计算机 重启之后打开cmd(Windows PowerShell)输入:

Shi_zhaopeng的博客 1万+

【PythonStock(39)】Python全栈股票系统:给股票系统升级到3.0使用vue+element做前端展示,修复各种BUG,整个工程项目调整拆分前后端,合并master

使用Python开发一个web股票项目。主要使用开发语言是python。使用的lib库是pandas numpy sqlalchemy akshare stockstats bokeh等。本文的原文连接是:项目从2017年开始编写,一直还都在维护中,断断续续不,最近发现github访问经常有问题。虽然在gitee上面有了6K的星星,也不算太高。项目就是类似做了一个简单的web工具。

freewebsys的专栏 3108

vue Electron ArcGis 桌面应用 Sqllite3 node-grp:老旧项目的起死回生

vue2+electron+sqllite3+node-gyp。看到这个技术栈,基本可以知道感知这个项目的关键词:vue、Gis地图、本地数据库、桌面客户端。顿时深感亚历山大。不多说,开干。

jmszl1991的博客 1678

vue-json-schema-form版本升级指南:从Vue2到Vue3的平滑迁移

vue-json-schema-form是一款基于Vue框架的表单生成工具,它能够根据Json Schema和UI组件库(如ElementUi、antd等)快速生成HTML表单,广泛应用于活动编辑器、h5编辑器、cms等数据配置场景。本指南将为你提供从Vue2到Vue3版本的平滑迁移方案,帮助你轻松应对升级过程中的各种挑战。 ## 为什么要升级到Vue3版本? Vue3带来了许多令人兴奋的新特

gitblog_00015的博客 1095

主流技术栈版本升级策略:Spring Boot 3.x与Python 3.12实战解析

技术版本迭代是软件开发中的核心环节,其本质是通过持续优化提升系统性能与稳定性。从原理层面看,版本升级涉及API兼容性、性能基准测试和依赖管理等多个技术维度。在工程实践中,科学的技术决策框架能够有效平衡新特性引入与系统稳定性的关系,特别是在Spring Boot 3.x的Jakarta EE迁移和Python 3.12的类型注解增强等场景中体现明显。通过建立完善的迁移验证流程和回滚机制,开发者可以系统化应对版本升级挑战,确保技术栈的持续演进。本文基于当前技术生态的发布节奏,重点分析了版本兼容性处理和性能对比等

weixin_33739646的博客 420

记录一次从vue2到vue3的踩坑过程

vue3beta已经上线,最近刚好有一个项目可以让自己随便造,于是就打算使用vue3来造,在此记录下从vue2升级到vue3的一个过程,这里使用的是自己配置的webpack. vue2到vue3中webpack的一些变化 vue2到vue3中webpack打包的配置也发生了一下一些变化(暂时发现): 不再需要vue-template-compiler ,在vue3中,vue-template-compiler被剔除了,不需要这个包,而它的替代品是@vue/compiler-sfc 在执行npm run d

weixin_49172965的博客 3492

【SpringCloud深入浅出系列】如何创建SpringCloud项目

1、新建一个空的maven项目。 2、输入项目名称及相关信息。 3、创建新模块eureka-server。 4、选择“Spring Initializr”->“Spring Cloud Discovery”->“Eureka Server” 5、完成创建模块后,再重复按第3步骤创建其它模块。 ...

邓邓子的博客 2007

Opencv全景图像处理实战:柱面与透视展开技术详解

本文详细解析了使用OpenCV实现全景图像处理的两种核心技术:柱面展开与透视展开。通过原理拆解与实战代码演示,指导开发者将360度环绕的鱼眼或球面图像转换为可用的平面视图,适用于街景展示、车载环视、室内测量等计算机视觉应用场景。

weixin_29081163的博客 582

Element Plus:从Vue 2到Vue 3的UI组件库平滑升级指南

你是否正在为Vue 2项目升级到Vue 3而烦恼?担心现有的Element UI组件无法在新版本中正常工作?Element Plus就是为你量身定制的解决方案!作为Element UI的现代化升级版本,这个完全开源的Vue 3 UI组件库不仅保留了熟悉的API设计,还带来了更好的性能、完整的TypeScript支持和现代化的Composition API架构。 ## 项目背景:为什么需要Elem

gitblog_00044的博客 919

FOC项目知识点总结三 | 完全搞懂 Clarke 与 Park 变换(附动图,仿真文件以及详细讲解数学推导过程)

本文目的,最终可以完整推算两种变换 Clarke 变换 首先先看我们需要用到的两种坐标系 1. 自然坐标系 abcabcabc 我们知道,通过三相逆变电路,我们可以画出一个自然坐标系 abcabcabc ,即三相电压的坐标系,通入的电流在这三轴坐标系中变化: 将三个矢量相加合并在一起就如下图所展现: 使用三个坐标轴来表示十分的麻烦与不直观,因为其是非正交的,于是乎我们想要将其转化成使用两个正交的坐标轴来表示,于是乎便有了 Clarke变换。 Clarke 变换的作用: 将基于三轴二维的定子静止坐标系的各

Wilson Huang的博客 3万+

Django-Vue3-Admin升级指南:从旧版本迁移到最新版

Django-Vue3-Admin是基于RBAC模型的权限控制开发平台,权限粒度达到列级别,采用前后端分离架构。本指南将帮助您快速完成从旧版本到最新版的迁移,确保系统平稳升级并享受全新功能体验。 ## 为什么选择升级到最新版? 最新版的Django-Vue3-Admin带来了多项重要改进: - 更完善的列权限管控,粒度细化到每一列 - 优化的前端架构,采用Vue3+TS+pinia+fastc

gitblog_00375的博客 651

三相逆变器LCL滤波设计实战:从αβ转换到dq解耦控制的完整建模流程

本文详细解析了三相逆变器LCL滤波设计中的关键步骤,从αβ转换到dq解耦控制的完整建模流程。重点介绍了dq坐标系下的解耦控制策略,通过Simulink仿真验证模型准确性,并提供谐振峰偏移、解耦不彻底等实际问题的解决方案,助力电力电子工程师提升系统稳定性。

weixin_28678151的博客 229

OpenClaw 3.13 + Mac mini M4 集成 qmd 记忆存储:qmd embed 卡死 / 报错 sqlite-vec 不可用 终极解决教程

模型加速让 qmd 从国内镜像下载模型,避免网络超时;SQLite 扩展支持:修改 qmd 源码后,Bun 不再使用内置 SQLite,而是调用 Homebrew 安装的,该版本支持接口,可正常加载vec0.dylib向量扩展;OpenClaw 3.13 适配:核心逻辑与 OpenClaw 3.13 的 qmd 记忆调用逻辑完全兼容,无需额外调整;sqlite-vec 加载:qmd 自动通过sqlite-vec包获取vec0.dylib路径,调用完成向量扩展加载,实现高效向量搜索。

wuanxionglidui的博客 1303

Redwood 项目目录结构全解析:api / scripts / web 三大 Side 与首屏代码骨架

本篇指南以 Redwood 官方教程 Chapter 1 的《File Structure》为基础,结合当前仓库中 `create-redwood-app` 的真实模板源码,逐层拆解一个新生成 Redwood 项目的完整目录结构。读完本文,你将理解 `api`、`scripts`、`web` 三大顶层目录各自的职责边界,掌握 `api/src` 下 directives、functions、gra

gitblog_00619的博客 925

使用VNA(Vector Network Analyzer)对S参数进行去嵌(一)

传统上,RF和微波组件被设计成具有同轴接口的封装。通过连接一系列这些单独的同轴设备,可以容易地制造复杂的系统。使用使用类似同轴接口的标准测试设备可以很容易地测量这些部件和系统的性能。然而,现代系统需要更高水平的组件集成、更低的功耗和更低的制造成本。射频组件正在迅速从使用昂贵同轴接口的设计转向使用印刷电路板和表面贴装技术(SMT)的设计。传统的同轴接口甚至可以从最终产品中取消。这就给设计者留下了用需要同轴接口的测试设备测量这些射频和微波组件性能的问题。解决方案是使用连接同轴和非同轴传输线的测试夹具。

小孟同学的博客 1万+

vue2.9升级最新版本,node升级12.0以上版本,解决Can‘t find Python executable “python“错误

安装node-sass报错Can’tfindPythonexecutable“python”,然后进行一下操作。2、找到所需版本点击下载,进入下载页面,点击node-v16.8.0-x64.msi(下载自己需要的版本)下载安装。1、node以往版本地址https//nodejs.org/zh-cn/download/releases/3、安装成功以后cmd运行node-v查看版本。...

weixin_46003296的博客 2418

昇腾AI原生创新算子挑战赛(S1赛季)复盘-LessEqual算子

【代码】昇腾AI原生创新算子挑战赛(S1赛季)复盘-LessEqual算子。

william_myq的博客 507

第21章—技术管理篇(上):身为技术人该怎样带好团队并做好管理者

上节讲了职业规划和学习提升这两个话题,随着职业规划的不断落地,或者自己能力的不断提升,大家也会逐渐被提拔成“职级更高”的人。企业规模扩张时,员工数量也会变多,意味着Boss需要更多的人来辅助管理,而管理者会从外部招聘吗?也许会,但大多企业更喜欢从内部选拔,毕竟人的天性更希望找的人值得信赖。此时,一些能力不错、做事靠谱的老员工,就会被“赶上”管理者的位子。作管理不难,但想要“”就需要一定情商。

运维老生常谈 1364

从Django-Vue-Admin到Django-Vue3-Admin:新版本迁移指南与功能对比

Django-Vue-Admin是一套基于RBAC模型的权限控制基础开发平台,采用前后端分离架构,后端使用Django+Django-REST-Framework,前端则基于Vue+ElementUI+d2admin构建。随着技术的发展,Django-Vue3-Admin作为其升级版本,带来了诸多改进和新特性。本文将为你详细介绍这两个版本的功能对比以及如何顺利完成迁移。 ## 版本概述:新旧版本

gitblog_01085的博客 816

R语言中的混淆矩阵(Confusion Matrix)是一种常用的评估多分类模型性能的工具

除了准确率,混淆矩阵还提供了其他有用的指标,如灵敏度(Sensitivity)、特异度(Specificity)、精确度(Precision)和召回率(Recall)。混淆矩阵通过比较模型预测结果与实际标签的一致性,帮助我们了解模型的分类准确性和错误类型。此外,混淆矩阵还提供了各种错误类型的统计信息,如假阳性(False Positive)和假阴性(False Negative)等。通过混淆矩阵,我们可以了解模型的整体性能和错误类型,从而对模型进行评估和改进。最后,为了更好地理解混淆矩阵的结果,可以使用。

HackSquad的博客 972

mac电脑 Python2 升级 Python3

下载新版 首先进入到 Python 官网,下载最新版本 Pythonhttps://www.python.org/downloads/mac-osx/ 下载后双击安装,装到默认的系统位置即可。装完后会自动写入环境变量的,打开终端,输入命令: vim ~/.bash_profile 打开后在编辑器中可以看到已经存在了 Python 最新版本的配置,如下: # Setting PATH for Python 3.7 # The original version is saved in .bas

Beamon__的博客 763

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

使用 AWS SDK for JavaScript v3 定制 Amazon Cognito 认证行为:Lambda 触发器实战指南

本文围绕 [javascriptv3/example_code/cross-services/wkflw-pools-triggers/README.md](https://link.gitcode.com/i/894c52b2888960917067e0df49382837) 展开,讲解如何用 AWS SDK for JavaScript v3 与 AWS Lambda 定制 Amazon Co

gitblog_00338的博客 900

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

我的第一个Vue3组件,实现TODO-LIST

我是傲夫靠斯,欢迎关注我的公众号【前端工程师的自我修养】,搜索f2ef2e,每天更新。 Vue3已经发布很久了,而且我已经使用Vue很多年了,对Vue框架也是尤为喜爱。今天我将通过一个最简单的组件来展示Vue3的魅力以及它和Vue2的不同之处。我们将会用到Vite、composition API、ref、computed、setup()等Vue3的新特性使用方法。 创建项目 创建项目我不使用Vue-CLI去创建,使用Vue的全新生态共建Vite来创建,Vite是一个非常棒的Web开发打包工具,它可以让我.

小帅的编程笔记 730

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain&#39;s apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath(&#39;DeepLearnToolbox&#39;));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand(&#39;state&#39;,0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = &#39;sigm&#39;;%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, &#39;Too big error&#39;);```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, &#39;Too big error&#39;);```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: <span class=“js_title_inner“>React 19 Cheat Sheet</span>
下一篇: 零帧起手!让程序员的效率再次伟大
云前端
博客等级 码龄17年 101粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值