LWN:Linux kernel中如何废弃不用的软件和硬件平台!

Pandas入门教程(二十二):股票数据分析实战——yfinance 获取数据、技术指标与收益率分析 把 Pandas 用在真实场景,才能体会它的价值。本文以茅台股票为例,用 yfinance 获取历史行情,完成缺失值处理与列筛选,绘制收盘价曲线,计算 SMA 移动平均线与 RSI 相对强弱指数,并通过日收益率、累计收益率和波动率完成完整的量化分析流程。 阅读详情

关注了就能看到更多这么棒的文章哦~

Software and hardware obsolescence in the kernel

By Jonathan Corbet
August 28, 2020
LPC
原文来自:https://lwn.net/Articles/829733/
DeepL assisted translation.

在内核中添加代码以支持新的硬件,相对来说是比较容易的。删除那些不再有用的代码可能更难,主要是因为很难知道什么东西在何时真的不再有用了。在 2018 年从内核中删除了对八种架构的支持的 Arnd Bergmann 就很清楚这有多难。在 2020 年的 Linux Plumbers 大会上,他主持了两场会议,专门讨论过时的软件和硬件的话题。他说,只要稍加努力,应该可以更好地知道什么时候可以删除某些东西。

The software side

他说,过时的硬件(obsolete hardware),定义上来说是不再生产的设备,通常是因为它们已经被更新的、更便宜的、更好的产品所取代。过时的硬件可能仍然有用,而且往往会保持使用很长一段时间,但人们很难知道是否某种特定的设备仍然有人在使用。过时的代码(obsolete code)有点不同,它所支持的硬件可能还在生产中,但它的所有用户都在运行旧的内核,而且永远不会升级。在这种情况下,代码可以被删除,因为没有人从它的持续维护中获益。

Bergmann 的建议是创建一种方式来记录内核中的哪些代码仅仅是为了支持过时的硬件;具体来说,它将记录与该硬件相关的内核配置符号。对于每个符号,文档会描述为什么它还在使用,以及这种情况预计会持续多久。移除这个支持会发生什么后果(例如对其他依赖它的驱动程序的影响)以及移除它的好处都会被记录下来。

有很多群体会受到这个变化的影响。例如,内核保留了对一些业余爱好者平台的支持;这些平台包括一些没有商业价值,但却有很多业余爱好者的处理器架构。内核仍然支持一些 Sun 3 工作站型号;他不知道是否有人真的在运行这样的系统。只要有人愿意维护,内核开发者一般都喜欢让业余爱好者的平台继续存在。

还有一些平台的用户很少,但这些用户可能真的需要它们。这些包括各种类型的嵌入式系统、工业控制器、军事系统等等。还有一些系统显然在未来会走向淘汰。这些包括 32 位架构,虽然现在仍在大量使用,但最终会消失。使用 Big Endian byte order 的系统在过去十年中下降了 90%,最终可能会完全消失。

那么这类信息应该记录在哪里呢?他提出了几个选择,包括在文档目录下新建一个文件、或在定义相关配置符号的 Kconfig 文件中、在 wiki.kernel.org 的某个地方、或者完全在其他什么地方放置。根据会议系统中的投票,仅有超过一半的与会者表示倾向于在内核 tree 中建立这样一个文件。

这时 LWN 编者不得不跳出来问,这个想法与内核的 feature-removal-schedule.txt 文件相比如何。这个文件是在 2005 年添加的,作为一种警告用户即将消失的特性的方式;这个文件本身在 2012 年被 Linus Torvalds 厌烦之后被删除。现在讨论的新文件,跟它的命运为什么会有不同呢?Bergmann 回应说,这个文件不会是移除支持的时间表;相反,它将是一种记录支持至少需要保留一定时间的方式。受影响硬件的用户可以很容易地在任何时候更新该文件,以向社区保证它们仍然存在。作为在内核中保留支持的理由的文件,它将会更有用。

Florian Weimer 问,如果这个建议被采纳,对用户空间会有什么影响;答案是 "没有"。Bergmann 说,用户空间接口属于不同的类别,在删除它们之前需要克服更高的门槛。这个文件将涵盖硬件专用代码。Mike Rapoport 补充说,一旦明确没有人在相关硬件上运行上游内核,这将是一种知道用户何时不受影响的方法。

Catalin Marinas 建议为支持过时硬件的代码创建一个 CONFIG_OBSOLETE 标记,但 Will Deacon 对这个想法很紧张。他最近在 32 位 SPARC 机器的页表代码上做了一些工作;他没有收到关于这些改动的 review 反馈,但当各种持续集成系统测试它们时,他确实得到了报告。如果使用 CONFIG_OBSOLETE 标记的话,可能会被这类系统的维护者认为是代码不再需要测试的信号,从而大大降低测试覆盖率。

Bergmann 补充说,32 位 SPARC 是一个有趣的案例。他说,人们一直在该代码中发现严重的错误,System V 进程间通信根本无法正常工作。有很多对 32 位 SPARC 用户空间的测试,但这些测试都是在 64 位内核上运行的,在此环境中这些问题并不存在。他相信这段代码的剩余用户很少(假如不是 0 的话)。

Len Brown 又回到了旧的 feature-removal-schedule.txt 文件的问题上,询问从那次经历中得到了什么经验。Bergmann 回答说,他提议的文件旨在帮助为移除做更好的规划。他说,要想弄清楚是否有人在使用某个特定的功能是一件很费劲的事;以这种方式记录有哪些用户,将大大减少工作量。Laurent Pinchart 补充说,这些信息对于开发者来说也是很有用的,他们可以找到某个硬件的用户来测试提议的改变。

在会议即将结束时,James Bottomley 指出,这种问题经常出现在 SCSI 子系统中,因为 SCSI 子系统往往会 "keep drivers forever"。不过最终,内部 API 的变化会迫使人们讨论删除特定的驱动程序,但这每次都是一件很难做到的事情。人们总说如果事实证明确有需要的话,被移除的驱动可以随时从 Git 历史中复活出来,但说起来很容易,真正实践时并不顺利。

Bergmann 在最后指出,某个驱动的维护者通常知道没有人在使用某个设备。但一旦发生这种情况,维护者往往也会离开,带着这些信息离开。这时,没有人负责删除相关代码,而且可能会持续多年。

System-on-chip obsolescence

Bergmann 在另一场专门讨论片上系统芯片(SoC)产品生命周期的会议上又回到了这个话题。他花了很多时间研究内核中架构支持的各个方面,他了解到如何支持 SoC 演进的信息,以及这对目前内核支持的架构意味着什么。

他说,在内核中,对任何给定 SoC 的支持有五个级别。

  1. 完全的上游支持,所有代码都在主线上,所有功能都可以使用,新的内核功能也完全支持。

  2. 最小的上游支持,但修复和更新仍然会进入稳定的内核版本。

  3. 主线中的更新最多只是零星的,也许修复的内容会进入长期支持的内核中。

  4. 不再有上游支持;用户直接从厂商那里获得任何更新。

  5. 系统可以运行,但主线内核中没有更新或持续支持。内核中可能还有代码,但不被任何人使用。

对于 SoC 支持来说,最重要的阶段是 bringup 阶段,也就是第一次让 SoC 工作起来的这个阶段;如果可能的话,这种支持应该一直到 "完全支持 "级别。支持的水平通常只会从那里开始下降。人们停止提供更新 patch,最终,这些 update 根本就不再出现了。

在 bringup 时出现的问题往往发生在可以预测到的一些地方,比如最常见的就是 GPU 驱动程序部分的错误。据说最近一段时间情况已经好了很多,越来越多的 GPU 有 upstream support 了。Android patch 可能是另一个症结所在,随着时间的推移,这一点也在改善。上市时间(time to market)很短,以及产品寿命(product lifespan)短也都会成为实现全面支持级别的阻碍。

Bergmann 放了一张图,显示了 2010 年的 "CPU 架构世界图";可以在他的幻灯片[PDF]的第 6 页看到。

这张图在一个轴向上绘制了从微控制器到数据中心应用的各种不同架构,在另一个轴向上展示了它们更靠近 big-endian 还是 little-endian。这些架构分布在图中不同位置,IBM Z 占据了 big-endian、数据中心的这个角落,而众多的架构如 Blackfin 和 unicore32 则在 little-endian、微控制器的角落。

他说,那个时代有很多架构可供选择,其中很多架构的前景都很好。Arm 架构是只用在手机上的 "小东西",在当时并不是特别重要。但手机现在看来原来是 Arm 成功的关键。随着手机性能的提高,它能够淘汰其他大部分的产品。

图中中间这部分,就代表了市场上的 SoC 这一部分。这类系统比微控制器(microcontrollers)大,但比数据中心的处理器小。其中有三代产品对 Linux kernel 很重要。第一代,以 Armv5 架构为典型代表,在 2000 年左右问世,现在仍在继续发展;这些都是单处理器系统,内存大小以兆字节为单位。2007 年推出的 Armv7-A 代,一个 SoC 上最多有 4 个内核,内存大小可达 2GB;这一代完全由 Arm 处理器主导。最后,从 2014 年开始的 Armv8-A(以及 x86-64)这一代产品,支持 2GB 以上的内存大小和 64 位处理器。

他也介绍了一下内存技术,指出 DDR3 内存往往是 2-4GB 以下尺寸的性价比最高的选择,但超过这个尺寸就没有竞争力了。这一点很重要,因为第二代处理器无法支持 DDR4 内存。

他说,如果需要极低的成本,那么就要选择第一代处理器,这也是选择第一类处理器的唯一理由。对于大多数其他应用场景来说,正在被 64 位系统所统治,它们正在取代一些厂商的 32 位 SoC。中间这一代的 Armv7-A 正在慢慢被挤出。

Kernel support implications

那么对内核支持有什么影响呢?他先用一张图来说明目前内核支持的机器(machines)有多少;其中大部分机器,此时都是用 devicetree 文件来描述的。剩下的几百种 machine 则需要 board files(也就是以 C 代码形式编写的 machine description)。他建议,所有 board files machine 可能也到了被移除的时候。他说,如果这些 machine 还在使用,那么就会有人把它们转换为 devicetree。

到了 2017 年,很明显,许多架构的生命已经接近尾声;相应地在 2018 年取消了对其中 8 个架构的支持。剩余的架构中有一些看起来也快要停止了。例如,Itanium、SPARC M8 或富士通 SPARC64 处理器可能不会有新产品。目前业界主要凝聚在 x86 和 Arm 架构上。

显然,这些架构在 2020 年及以后会有新的产品问世,所以它们会存在一段时间。还有一些其他架构。其中 RISC-V 架构正在快速增长。IBM Power10 和 Z15 架构还在开发中。Kalray Coolidge 和 Tachyum Prodigy 目前还在开发中,没有内核支持。有一个 64 位版本的 ARC 架构正在开发中,还没有内核支持。目前仍有 Loongson 和 Ingenic 等厂商推出 MIPS 芯片,或许有人会感到惊讶,现在仍有基于 20 年前 Armv5 内核的 SoC 在推出。

他说,big-endian 系统显然正在被淘汰。有一些架构同时支持这两种 endian;大多数架构正在转向只支持 little-endian。SPARC32 和 OpenRISC 没有屈服,但是预计它们的用户将可能在近期迁移到 RISC-V。大约只有 IBM Z 是唯一还在往 big-endian 方向发展的架构。

还有一些新的 SoC 架构正在酝酿中。最重要的是 RISC-V,各个厂商的 SoC 众多。对 RISC-V 的期望值很高,但目前还没有产品在内核上支持。ARC 架构已经存在了 25 年,仍然很活跃,它在微控制器中得到了很多应用。内核中对 32 位 ARC SoC 的支持不多,对即将到来的 64 位版本还没有支持。不过,显然正在开发中。

这一切的发展方向是什么?Bergmann 最后对 2030 年的情况做了一组预测。他说,市场将被 x86-64、Armv8+和 RISC-V 架构所瓜分;任何其他架构都很难找到挤进来的办法。内核 upstream 中对这些架构的支持将继续得到改善。IBM Z 主机仍将有利可图。

而最后的 Armv7 芯片,现在已经发布了,但它们仍然会在 2030 年出货(并且在之后的很长一段时间内使用)。所以 32 位系统在 2030 年以后仍然需要得到支持。基于这些原因以及更多的原因,他预计至少在未来一年内不会看到内核进一步取消架构支持。

在另一方面,还有 128 位的架构,如 CHERI,将崭露头角。这对内核的支持可能是一个巨大的挑战。在移植到 Alpha 架构之前,最初的内核只支持 32 位系统;这种移植是可行的,因为当时的内核还很小。而现在的 kernel 大得多了,并且一直有一个假设,即一个 unsigned long 跟指针的大小相同,由于指针用的非常广泛,所以打破这个原则将是一个痛苦和充满伤痛的经历。要修复这个问题,可能需要由新一代 kernel hacker 来完成了。

全文完

LWN文章遵循CC BY-SA 4.0许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注LWN深度文章以及开源社区的各种新近言论~

Cadence Allegro实战:如何精准导入结构DXF文件避免安装偏差(附图层配置技巧) 本文详细讲解了在Cadence Allegro中精准导入结构DXF文件以避免安装偏差的实战技巧。核心在于导入前的单位校准、创建专用图层结构,以及基于坐标基准点的精确对齐方法。文章还分享了将DXF图形转化为正式板框和禁布区、高效管理图层以及向结构工程师导出DXF的完整流程,帮助PCB工程师确保设计与机械结构完美契合。 阅读详情

相关推荐

SimNow模拟环境实战:用vnpy_ctp连接期货市场的5个关键配置步骤

本文提供了一份详细的量化交易实战指南,重点讲解如何使用vnpy_ctp插件连接SimNow期货模拟环境的5个关键配置步骤。内容涵盖SimNow环境选择、vnpy_ctp核心参数解析、实战连接脚本编写、深度排错技巧以及向实盘迁移的准备,旨在帮助量化交易开发者快速搭建可靠的测试环境,避免常见陷阱。

weixin_29063035的博客 1272

内核中架构相关代码简介

以下内容源于朱友鹏《物联网大讲堂》课程的学习,如有侵权,请告知删除。 1、内核代码基本分为3块 (1)arch:本目录下全是cpu架构有关的代码 (2)drivers:本目录下全是硬件的驱动 (3)其他:相同点是这些代码都和硬件无关,因此系统移植和驱动开发的时候这些代码几乎都是不用关注的。 2、架构相关的常用目录名及含义 (1)mach(machine architec

主要记录嵌入式学习与开发过程。 1630

康耐视 VisionPro CogImageFileTool(将获得的图像保存至文件或从文件中获取图像)工具

VisionPro CogImageFileTool(将获得的图像保存至文件或从文件中获取图像)工具

zhihuishuxia__的博客 2061

linux内核版本对cpu支持,Linux 内核将停止支持旧CPU架构 可减50万行代码

Linux 内核维护者已经决定在即将发布的版本中放弃对旧 CPU 架构的支持。因此,Linux 4.17 内核将减少大约 50 万行代码,目前它包含大约 2030 万行代码。Linux 内核维护者已经决定在即将发布的版本中放弃对旧 CPU 架构的支持。因此,Linux 4.17 内核将减少大约 50 万行代码,目前它包含大约 2030 万行代码。将被弃用的体系结构是 Blackfin,CRIS,F...

weixin_39831991的博客 460

Tessent_StdcellLib

第二种为 Tessent Cell lib,既可用于功能仿真,也可以用于测试逻辑插入。lib包含了用于仿真的功能信息,也包含DFT cell属性。如何使用tessent工具将stdcell verilog 仿真模型转换为tessent自己的lib。运行后工具会生成一个atpg的lib文件,打开文件,找到一个带SI的DFF,只有功能描述。tessnt lib分为两种,第一种为ATBG lib,可以用于仿真;打开生成的lib文件,多了dft_cell_selection。第二部:编写attributes文件。

qq_40411444的博客 2134

ais信号接收设备_国内首款基于软件无线电技术的AIS基站投入测试使用

星网宇达子公司北京凯盾环宇科技有限公司经过多年的潜心研发,成功研制出国内首台基于软件无线电(SDR)的CATON 9011 AIS基站。该基站采用软件无线电技术,利用软件数字技术代替传统的模拟电路,大大的降低了模拟器件的使用率,提高了基站的可靠性和使用年限。CATON 9011 AIS基站研制依据ITU-R M.1371-5、IEC 62320-1、IEC 61162-1等国际标准,兼容...

weixin_29057163的博客 2334

删除linux内核多余架构,删除多余Linux内核方法

我使用的是Linux Mint,更新频繁,旧版本的Linux内核只会浪费硬盘空间,因此我会定期删除多余的内核。查看已安装所有内核:sudo dpkg --get-selections |grep linux-image查看当前正在使用的内核:uname -r删除不需要的内核,注意不要删除当前正在使用的内核,否则会导致系统无法登录。sudo apt-get remove 内核名称再次查看已安装内核,...

weixin_29195217的博客 561

07 Zabbix 微信告警

Zabbix 微信告警 1.注册企业微信 企业微信注册地址:https://work.weixin.qq.com 2.进入企业微信后台管理 2.1 添加微信成员 2.2创建应用 2.3 获取四项数据 (1)AgentID (2) Secret (3) 企业ID (4)部门ID 3.Zabbix Server配置 3.1确认脚本目录 # grep alertscripts /etc/zabbix/zabbix_server....

Jian Sun_的博客 1297

linux

内容待写。

code 342

CAN轴控制流【6041,6040】

【代码】CAN轴控制流【6041,6040】

cfqq1989的博客 1782

VS2019 C# 连接IBM DB2数据库并查询数据表

操作系统:win10 64位 C#:VS2019 数据库:IBM DB2v11.1_win64_expc 其他工具:IBM Data Studio ibm_ds4130_win 步骤一:使用命令行或是IBM DB2工具:Data Studio,创建一个数据库。这里名称为:Student CREATE DATABASE "Student" AUTOMATIC STORAGE YES ...

坚韧与专注 3796

在过时硬件上架设LINUX BOX

前几天,售后开发票的系统升级,终于可以摆脱原始的DOS系统进入窗口时代。配合软件升级主机 换了台联想的机器,原先的浪潮随之可以退役了。配置太低,WINDOWS是很难在上面运行了,就有了想把它改造成LINUX主机的想法。这个过程也不是一帆风顺的,几经波折还是成功了。硬件配置:[root@Rh9-Jnbenz log]# more /proc/*info::::::::::::::/p

Asnow的专栏 1256

Ubuntu零基础教学-史上最详Ubuntu20.04安装教程,超级详细,强烈建议收藏!

官网地址:https://www.vmware.com/ 1、VMware Workstation Pro 15.5.1在Windows 10的安装不再介绍了,一路下一步即可。 2、下面详细介绍在VMware 虚拟机里安装Ubuntu 20.04 LTS的步骤

**My Coding Family** 2万+

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 390

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

深度学习工具包 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'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('DeepLearnToolbox'));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('state',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'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',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 = 'sigm';%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, 'Too big error');```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('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';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)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';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, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% 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'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 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, 'Too big error');```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('state',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, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',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, 'Too big error');%% ex3 neural net with dropoutrand('state',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, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % 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, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % 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, 'Too big error');%% 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('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % 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, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

从一段视频到可漫游的 4D 有声场景:思路拆解与最小复现手记

只需一段手机视频,你就能生成可"走进去"的 4D 有声场景:转头时狗叫声方向随之变化,走近时声音更清晰。本文拆解 Video-to-4DAVScene 的核心思路,手把手带你用几十行 Python 搭出最小管线,把视频中的运动物体变成带空间位置的声源,并附上三个真实踩坑的排障经验,代码可直接跑。🎧

helloagent的博客 228

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Python+Agent入门笔记(二):列表推导式、模块和异常,这些写 Agent 前得会

接上一篇《Python+Agent入门笔记(一)》。基础语法跑通之后,这篇聊几块日常写脚本绕不开的东西。还是按 JS/Go 开发者的视角写,尽量记录我实际卡过的地方。

qq_41241612的博客 430

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

详解Python条件语句

在 Python 中,if...else 是一种条件语句,可以根据给定的条件执行不同的操作。这个语句通常用于控制程序的流程。

2601_96798737的博客 205

微调数据集构建:清洗、标注、格式转换完整流程

摘要解决微调数据直接抓取导致的噪声污染、模式崩溃与Token错位问题。适用于需为大模型SFT阶段构建高质量训练集的数据与算法工程师。读完可获得包含启发式清洗、MinHash去重及ChatML格式对齐的完整可运行数据流水线。关键词数据清洗、MinHash去重、数据标注、ChatML、SFT数据集、数据配比背景与问题大模型微调效果的上限由数据质量决定,直接使用未经处理的原始语料极易引发模型复读、幻觉与指令遵循能力退化。

2402_85729970的博客 485

Python3 协程:异步编程的核心机制与实战

协程是解决I/O密集型任务等待瓶颈的高效机制,相比线程更轻量、无锁开销。从yield到async/await的演进,使异步编程语义清晰、易于理解。通过async/await可实现并发执行多个任务(如gather、create_task),显著提升网络请求、爬虫等场景性能。关键在于使用异步库(如aiohttp)替代同步库,避免阻塞事件循环。合理控制超时与并发数,才能发挥协程最大优势。

Lxn2zh的博客 159

python如何控制浏览器

Python 可以通过 Selenium、Playwright 等工具实现浏览器自动化,从打开网页到执行复杂交互操作均可脚本化完成。Selenium生态成熟

2601_96797912的博客 76

二进制木马免杀-Python 分离免杀与 Web 挂马

二进制木马免杀-Python 分离免杀与 Web 挂马

2503_94637398的博客 267

torch.compile 差异仅 1e-6,边界样本预测为何翻转

torch.compile 加速后输出与 eager 不一致,部分预测翻转。逐层对比与 graph break 分析定位到动态分支翻转根因。容差回归仅适用于无分支翻转场景,零容忍场景应禁用编译。

昨日种种,皆成今我。今日种种,皆成新我。 158

Python 100讲课程导航:第08篇《Python input 与类型转换:构建可靠的交互程序》

本文详解Python中input()的返回类型为字符串,强调必须通过int()、float()等函数进行类型转换。重点讲解了输入验证的重要性,结合try-except处理ValueError等异常,实现可靠的交互程序。通过购物预算计算器实战,演示如何防范非法输入、处理边界值,并推荐使用Decimal避免浮点精度问题,提升程序健壮性。

铭渊老黄 133

【Python】国家中小学智慧教育平台电子教材批量下载与 PDF 合成实战

成果:两本语文电子课本(一年级上册 118 页 / 23MB、三年级上册 130 页 / 30.3MB),合计 248 页、约 54MB,单本下载加合成 40~60 秒,PDF 页数校验全部通过。经验教训SPA 站点的数据接口优先从 bundle 里挖,比抓页面稳得多;资源链接要按 private/public 分组看待,只取平台公开部分;页数、目录名这类“可推断”的信息,永远用实际响应验证一次;受限环境里“能不能跑浏览器”要在方案定稿前确认。后续计划:这版 PDF 是图片版,没有文字层;

木头大左的博客 122

魔塔社区微调训练Qwen2-1.5B-Instruct模型并烧录到‌RK3568开发板教程

本文基于Ubuntu 22.04 + CUDA 13.0.3环境,使用LLaMA-Factory框架对Qwen2-1.5B-Instruct模型进行LoRA微调,训练儿童故事生成专用模型。通过配置qwen模板、制作alpaca格式数据集、执行sft训练并合并LoRA权重,最终将模型转换为GGUF格式,并量化为Q4_K_M以适配RK3568嵌入式平台。全程支持国产镜像加速下载与显存优化,实现高效轻量化部署。

浅清秋慕夏的博客 184

【回眸】DeepSeek V4.1 Flash 快速上手与实战

本文介绍如何高效本地部署开源大模型,通过现代化工具链实现分钟级环境搭建。聚焦显存优化、一键安装、代码调用与多轮对话实现,解决“显存不足”“连接超时”等痛点,提供参数调优与结构化输出技巧,助力开发者在离线场景下快速构建稳定、高效的本地推理系统。

啤酒鸭的物联网开发记录博客 222
上一篇: LWN:使用Rust进行Linux kernel开发!
下一篇: LWN: Linux desktop环境下的资源管理!
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值