用flutter写Win,Mac,Linux跨平台桌面端程序,合适吗,坑多吗?

跨平台开发技术选型决策地图:Electron/Tauri/Flutter/RN实战指南 跨平台开发不是简单选择一个框架,而是围绕团队能力、性能红线、交付节奏与生态扩展性进行系统性权衡。Electron依托Web技术栈提供高确定性但体积大、内存高;Tauri以Rust+系统WebView实现原生级轻量与性能,适合有系统编程基础的团队;Flutter通过Skia自绘引擎保障UI一致性与动效表现,但在硬件集成上依赖Platform Channel;React Native采用原生桥接模式,复用能力强但存在通信延迟与构建复杂度。本文基于12年27个真实项目沉淀,聚焦‘音乐管理’‘工业控制’‘教育交互’ 阅读详情
AI摘要

本文综合评估了使用Flutter进行桌面端开发的优势与劣势。优势包括高效开发、原生集成及强大的测试支持等;劣势则涉及学习曲线陡峭及桌面端支持的局限性等问题。

哈喽,我是老刘
作为一名使用Flutter 6年的客户端开发者,有很多人问过我,Flutter是否适合桌面端开发。
以下是我对这一问题的综合评估,希望能为对此有疑惑的读者提供一些思路。

一、Flutter的优势

1、高效的开发

Flutter本身是一个成熟度非常高的工业级开发框架。
所以它提供的是一个完整的开发套件,比如IDE、调试工具、性能分析工具等,它不是一个简单是技术框架。
 

image.png


在这个开发套件中包含Dev tools 这样的分析调试工具,也包含热重载这样的优化开发体验的功能。
同时Flutter的Widget库提供了大量的预制组件,减少了从零开始构建UI的需求。

2、无缝的原生集成

通过平台通道,Flutter应用可以调用系统原生的API,例如访问设备的相机或日历功能。
这种集成方式允许开发者利用Dart编写主要的UI和业务逻辑,同时保留对原生性能和特定平台特性的访问。

3、高度一致性的跨平台体验

Flutter提供的平台一致性是众多跨平台框架中最顶级的。
原因是Flutter自带渲染引擎。
相比于MAUI这样最终转化为原生组件进行渲染的框架,Flutter在不同平台使用相同的引擎渲染同样的组件。
能从最基础的架构层面保证尽可能高的平台一致性效果。
 

image.png


其实在平台一致性方面Electron也非常好,因为它的UI其实就是网页,并且在应用中打包了V8内核进行渲染。
只不过我们很好理解,基于网页的UI,在性能方面终究有所欠缺。

4、强大的测试支持

Flutter对测试的支持有两个主要特点。
一是有完整的测试框架支持。
测试框架与Dart语言紧密结合,提供了模拟和测试工具,使得自动化测试变得更加容易。
二是执行性能很好。
不同于客户端原生的单元测试需要编译整个项目,Flutter的单元测试只需要在pc端编译被测文件和依赖的少数文件即可。
下面表格中列出了Flutter针对不同测试级别的性能、依赖度等评估
 

image.png


单元测试的执行效率很高,基本是秒级。
而这种执行效率为TDD这类依赖单元测试的开发流程真正在实战中可行。
这一点是很多跨平台框架不具备的。

5、活跃的社区和生态系统

Flutter社区提供了大量的插件和库,如flutter_markdown和url_launcher,这些插件可以轻松集成到项目中。

6、长期的维护和更新

Flutter团队定期发布新版本,引入新功能和改进,例如最近的版本中对Web和桌面端的支持增强。
Google对Flutter的持续投资确保了框架的长期发展和对新设备及操作系统版本的兼容性。

二、Flutter的劣势

1、陡峭的学习曲线

相对来说Dart是一门比较新的语言,大多数开发者需要重新学习其架构和编程模式。
而Flutter的设计有其独特的思路,很多客户端开发者刚开始学习时会不适应。
因此想要掌握Flutter的高级特性和最佳实践仍然需要大量的实践和经验。

2、桌面端支持的局限性

Flutter的桌面端支持相对较新,一些功能可能还在开发中或社区驱动,需要开发者关注和适应。
比如一些桌面端特有的功能,系统通知或多窗口支持等,可能需要额外的插件或原生代码集成。
另外Flutter官方对移动端的支持力度明显是要比桌面端高一些的。
这会体现在一些大家呼声比较高的功能迟迟得不到支持。
如果原生方面开发能力比较弱的团队,依赖官方提供解决方案多的,要慎重考虑。

3、性能竞争

虽然Flutter的性能通常优于基于Web技术的框架,但在某些特定场景下,如密集的图形处理或视频编辑,可能需要考虑其他技术。
当然,如果你已经有成熟的原生级解决方案,通过Flutter的混合开发模式去调用这些方案是可行的。

三、总结

技术选型应基于项目需求、团队技能和预期的用户体验进行综合评估与权衡。
如果您的团队对Dart和Flutter有深入的了解,并且项目需求与Flutter的特性相匹配,那么Flutter可以是一个优秀的选择。

如果看到这里的同学有学习Flutter的兴趣,欢迎联系老刘,我们互相学习。
点击免费领老刘整理的《Flutter开发手册》,覆盖90%应用开发场景。
可以作为Flutter学习的知识地图。
覆盖90%开发场景的《Flutter开发手册》icon-default.png?t=N7T8https://mp.weixin.qq.com/s?__biz=MzkxMDMzNTM0Mw==&mid=2247483665&idx=1&sn=56aec9504da3ffad5797e703c12c51f6&chksm=c12c4d11f65bc40767956e534bd4b6fa71cbc2b8f8980294b6db7582672809c966e13cbbed25#rd

Flutter开发桌面应用-第一个windwos桌面应用 有问题欢迎留言!一起交流解决。现在新技术层出不穷,如果每次出新的技术,我们都深入的研究的话,很容易分散精力。新的技术可能很久之后我们才会在工作中用得上,当学的新技术无法学以致用,很容易被我们遗忘,到最后真的需要使用的时候,又要从头来过(虽然上手会更快)。我觉得身为技术人,针对新技术应该是持拥抱态度的,入了这一行你就应该知道这是一个活到老学到老的行业,所以面对新技术,不要抵触,拥抱变化就好了。Flutter 明显是一种全新的技术,而对于这个新技术在发布之初,花一个月的时间学习它,成本确实过高。 阅读详情

相关推荐

基于.NET 8与Avalonia构建开源跨平台手写笔记应用

跨平台应用开发是现代软件开发的重要方向,它允许开发者使用单一代码库为多个操作系统(如Windows、macOS、Linux)构建原生体验的应用。其核心原理在于通过抽象层封装各平台差异,利用统一的UI框架和运行时环境实现代码复用。在技术选型上,.NET MAUI、Flutter、Electron等框架各有侧重,而Avalonia作为基于.NET的跨平台UI框架,凭借其高性能自绘引擎和原生控件支持,在需要深度硬件交互的场景中展现出独特优势。对于追求原生手写体验、数据主权和长期可维护性的应用——例如手写笔记工具—

weixin_34121304的博客 297

Flutter Windows开发环境搭建教程与学习资料推荐

Flutter是谷歌推出的一种移动应用开发框架,使用Dart语言编写。更多Flutter资料大家可参考Flutter官网:。Flutter 2.10 起,Windows 的支持已进入 stable 渠道!本篇介绍Flutter Windows开发环境搭建,以及如何使用Flutter进行Windows应用软件开发。

琅嬛福地 3482

跨平台开发实战:从操作系统差异看远程控制软件适配挑战

你是不是也经常遇到这样的困惑:手头一台Windows笔记本办公,家里一台Mac Mini当服务器,还有一台Linux机器跑着脚本,手机是安卓,平板是iPad,新买的设备又是鸿蒙系统。当你想在这些设备之间传个文件、临时处理个任务,或者只是想远程看看家里的服务器状态时,却发现一个看似简单的问题变得无比复杂: 为什么没有一款软件能在所有设备上都提供同样流畅、完整的体验? 这背后折射出的,远不止是某个软件做得好不好的问题,而是一个更深层的技术现实: Windows、macOS、Linux、鸿蒙,这些我们每天都在打交

weixin_33709364的博客 414

目前的Flutter存在着什么问题?

跨平台技术现已成为企业提升研发效率和动态化能力,抢占新赛道的搏击场。从闲鱼到淘宝,从QQ到微信,从京东到百度,从美团到抖音,BAT等一线互联网大厂在全面拥抱Flutter。2020 短短一年里,Flutter在GitHub 和 StackOverflow已经赶超React Native成为开发者首选跨平台框架。尽管Flutter在某些方面表现出色,但仍然有一些人对它的发展前景表示怀疑。

ywh_121215的博客 1051

从零构建Electron+React+Python桌面应用:AI辅助开发全流程实践

桌面应用开发是连接用户与本地系统资源的重要技术领域,其核心在于实现跨平台、高性能的用户交互体验。传统桌面开发往往涉及复杂的系统API调用和多平台适配,而现代Web技术栈与本地运行时结合的方案,如Electron,通过Chromium和Node.js提供了基于Web标准构建跨平台桌面应用的能力,显著提升了开发效率。这种架构的价值在于,它允许前端开发者利用熟悉的HTML、CSS和JavaScript技术快速构建界面,同时通过Node.js无缝集成操作系统原生功能,如文件系统访问和系统通知。在实际应用场景中,对于

weixin_30781775的博客 377

VS Code 安装中文配置与高频报错排查完整指南

代码编辑器是开发者日常工作的核心工具,而 Visual Studio Code 凭借轻量、扩展生态丰富成为首选。然而从下载安装到配置中文界面,再到适配不同开发场景,用户常遇到版本选择、PATH 设置、语言包生效、终端乱码等基础问题,以及 ServiceHub 异常、Flutter 工具链缺失等深层报错。理解编辑器与编译器、工具链的边界,掌握环境配置的底层原理,才能高效搭建稳定的开发环境。本文从安装细节、中文语言包配置方法、C/C++ 与 HTML 场景落地,到典型报错排查策略,系统梳理实战经验,帮助开发者避

weixin_33824363的博客 212

Android高级架构工程师:2024年火爆全网的flutter,今年真的凉了吗?你是怎么看的

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。当然我也为你们整理好了百度、阿里、腾讯、字节跳动等等互联网超级大厂的历年面试真题集锦。这也是我这些年来养成的习惯,一定要学会把好的东西,归纳整理,然后系统的消化吸收,这样才能极大的提高学习效率和成长进阶。碎片、零散化的东西,我觉得最没有价值的。就好比你给我一张扑克牌,我只会觉得它是一张废纸,但如果你给我一副扑克牌,它便有了它的价值。

2401_84558590的博客 4744

基于蓝牙RSSI信号强度实现室内设备定位的Python实践

蓝牙技术作为一种短距离无线通信标准,其核心原理是通过2.4GHz频段进行数据传输。在定位应用中,接收信号强度指示(RSSI)是关键参数,它反映了信号在传播过程中的衰减程度,理论上与距离呈负相关。这项技术的工程价值在于,无需额外硬件即可实现米级精度的接近感知,为物联网和智能家居场景提供了低成本的位置服务方案。通过Python调用系统蓝牙栈,开发者可以监听设备广播并解析RSSI值,结合信号滤波和趋势分析算法,能够构建实用的设备追踪工具。本文以寻找静音手机为典型场景,详细演示了如何利用pybluez库和系统命令实

weixin_34252686的博客 446

24年Flutter都没消息了,是淘汰了吗?

随着技术的不断演进,编程界总有新宠儿和旧爱的交替。2024年,当我们回望几年前的Flutter热潮,不禁会问:这个曾经备受瞩目的跨平台开发框架,如今真的被淘汰了吗?首先,让我们回顾一下Flutter的光辉岁月。Flutter,由谷歌推出,以其高效的开发速度和出色的性能,迅速在移动开发领域占据了一席之地。开发者们被其丰富的组件库和优雅的UI设计所吸引,Flutter一度成为了开发多平台应用的首选技术。然而,技术的生命周期总是充满变数。到了2024年,Flutter似乎从主流媒体和技术讨论中消失了。

嘴巴吃糖了 1万+

保姆级教程:手把手教你给联想System x 3650 M5服务器配置RAID 5并U盘装系统

本文提供联想System x 3650 M5服务器配置RAID 5并U盘安装系统的详细教程,特别适合零基础运维人员。从准备工作、RAID 5配置到U盘引导和系统安装,涵盖全流程关键步骤与常见问题解决方案,帮助用户高效完成服务器部署。

weixin_42535703的博客 358

LTspice 导入 PSpice 模型实战指南 --(解决语法兼容性与模型优化问题)

本文提供了将PSpice模型成功导入LTspice的详细实战指南。针对两者间的语法兼容性问题,文章以TI UCC23513为例,逐步讲解模型获取、符号创建、常见语法错误修改及仿真验证方法,并分享了模型优化与个人库管理技巧,帮助用户高效解决模型导入与仿真难题。

weixin_28278377的博客 821

跨平台桌面应用开发:从Electron迁移到Tauri的体积优化实践

桌面应用开发中,安装包体积与运行时内存是影响用户体验的关键指标。传统方案如Electron因内置完整Chromium和Node.js运行时,常导致安装包动辄200MB以上,内存占用也居高不下。Tauri基于Rust与系统WebView构建,复用操作系统原生组件,安装包可压缩至几MB级别,内存开销显著降低。其通过前端Vue与后端Rust的IPC通信架构,既保留了Web生态的开发效率,又获得了接近原生的性能表现。实际工程中,合理的体积裁剪、异步处理与跨平台兼容策略至关重要。本文从跨平台桌面技术选型出发,对比多种

weixin_34248487的博客 371

企业固定资产管理的SAP实战:FICO模块配置与折旧范围设置详解

本文深入解析了SAP FICO模块中固定资产会计配置的核心实践,重点阐述了折旧范围的设计哲学与配置逻辑。通过详解折旧表、折旧范围、资产分类及折旧码等关键配置步骤,指导企业如何搭建满足多会计准则(如CAS、IFRS)与税务要求的资产管理体系,实现资产购置、折旧计提与报废清理的自动化与精准化。

wdx01234567的博客 728

Gopeed全能下载器:你的跨平台极速下载终极解决方案

还在为下载速度慢、管理混乱而烦恼吗?Gopeed下载器来拯救你了!这款由Golang和Flutter打造的多协议支持下载工具,真正实现了全平台兼容,无论你是Windows、macOS、Linux用户,还是移动端玩家,都能享受到极速下载的乐趣。 ## 🚀 为什么你需要一个现代化下载器? 在数字时代,下载文件就像呼吸一样频繁——无论是工作文档、学习资料,还是娱乐资源。但传统下载工具总是让你陷入这

gitblog_00625的博客 482

python特征选择pso_【来点干货】机器学习中常用的特征选择方法及非常详细的Python实例...

花费了很长时间整理编辑,转载请联系作者授权,违者必究。特征选择(Feature selection)是在构建预测模型的过程中减少输入变量的一个过程。它是机器学习中非常重要的一步并在很大程度上可以提高模型预测精度。这里我总结了一些机器学习中常见的比较有用的特征选择方法并附上相关python实现code。希望可以给大家一些启发。首先,我们为什么要进行特征选择呢?它有以下几个优点:减少过拟合:冗余数据常...

weixin_39927158的博客 1163

YOLOv12模型详解及代码复现

YOLOV12算法详解及Python代码复现

hasakie的博客 6488

easy-vibe 跨平台选型实战指南:从用户入口到系统能力,选择第一条正确的技术路线

> **导读**:本文是 easy-vibe 项目「开发进阶(Stage 3)」中跨平台开发的第一课,面向已经掌握 Web 全栈基础、准备把想法落成真实产品的开发者。文章以「用户在哪里打开软件、任务需要多深的系统权限、谁来长期维护」三个问题为主线,系统梳理 iOS/Android 原生、微信小程序、PWA、Electron/Tauri、Qt、浏览器插件、VS Code 插件、CLI、游戏引擎等十余

gitblog_00186的博客 846

【史上最全面esp32教程】网络篇和tcp/ip的使用

ESP32史上最全面wifi和tcp/ip连接及示例程序

m0_62599305的博客 9522

如何5分钟快速部署inoERP:Go后端+Flutter前端的终极ERP解决方案

inoERP是一款基于Go后端和Flutter前端的企业管理系统,为企业提供完整的ERP解决方案。这款开源ERP系统采用现代化的技术架构,支持多平台部署,让中小型企业能够快速搭建专业的企业管理系统。 ## 📋 什么是inoERP?为什么选择它? inoERP是一个功能全面的企业资源规划系统,采用OneApp架构(Go后端 + Flutter前端)。它包含了运行中小型企业所需的所有核心模块,功

gitblog_00043的博客 532

NEU-DET 冷轧钢缺陷检测:基于 YOLOv8 的目标检测与可视化 UI 实现

冷轧钢的生产过程中,由于设备故障、工艺问题或者人为因素,钢板表面可能会出现多种缺陷,如划痕、裂纹、孔洞等,这些缺陷会严重影响钢材的质量。它比之前的版本(如 YOLOv5、YOLOv4)在速度和精度上都有显著提升,并且对硬件要求较低,适合进行工业界面和嵌入式系统的应用。这些版本相较于更大型的模型(如 YOLOv8x)具有更快的推理速度和较低的资源占用,适合工业生产线中的实时应用。通过将训练好的模型部署到工业生产线摄像头中,我们可以实现实时的缺陷检测,极大地提升生产效率和产品质量。

YOLO 737

Claude Code Cli 源码泄露事件全解析:从51万行代码中拆解AI Agent的记忆护城河

2026年3月,Anthropic的AI编程助手Claude Code意外泄露51万行核心代码,暴露了其多Agent架构、六级权限验证系统及创新的记忆机制。记忆系统采用四层设计:用户自定义框架、自动记忆提取、智能上下文压缩和纯文件存储。最独特的是"自动做梦"功能,AI会定期整理记忆,类似人类睡眠记忆巩固。代码还揭示未发布功能如电子宠物系统,但也暴露权限系统漏洞和代码质量问题。这次泄露展现了AI助手核心技术的复杂性,特别是其记忆系统如何通过透明可编辑的设计建立用户信任。

program哲学 469

easy-vibe 平台选择实战指南:从产品想法到正确技术载体的决策框架

在开发一个真实产品之前,开发者面临的第一道选择题往往不是"怎么写代码",而是"把产品放到哪个平台上"——微信小程序、iOS/Android 原生应用、PWA、浏览器扩展、桌面应用……每个平台都有自己擅长的场景和必须付出的代价。本文以 Datawhale easy-vibe 项目的跨平台教程体系为背景,系统梳理主流平台的能力边界,给出一个可复用的"三问决策法 + 场景对照表 + 决策流程图",帮助你

gitblog_00083的博客 244

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

easy-vibe 多平台选型指南:如何为你的应用选择正确的开发平台

> 本文是 Datawhale easy-vibe 项目「多平台开发」阶段的开篇选型教程(对应 [docs/ar-sa/stage-3/cross-platform/choose-platform/index.md](https://link.gitcode.com/i/f2e1e8cac9a3c2439718a1c9c67e8275))。当你的脑海里有想法、却面对微信小程序、iOS、Androi

gitblog_00115的博客 664

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

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

Awesome-GitHub-Repo 开源项目精选指南:GitHub 高质量仓库的趣味分类导航与实战索引

本指南以当前仓库 [README.md](https://link.gitcode.com/i/3c279eab77a0e1003cf46bba545b6187) 为主体,系统梳理了 Awesome-GitHub-Repo 这份 GitHub 优质开源项目清单的完整结构:从"黑科技""沙雕项目""摸鱼神器"等趣味分类,到前后端分离、低代码、人脸识别等实战项目,再到命令行、Docker、OCR 等实

gitblog_00357的博客 1126

深度学习工具包 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")

C/S与B/S架构深度解析:从原理到实战选型指南

软件系统架构是软件工程的基石,决定了系统的性能、可维护性和扩展性。客户端-服务器(C/S)和浏览器-服务器(B/S)是两种最经典的架构模式,其核心差异在于计算逻辑的分布位置。C/S架构将大量业务逻辑和计算任务放在客户端,能充分利用本地资源,提供高性能和丰富的交互体验,适合对图形处理、实时性要求高的专业软件。B/S架构则将计算集中于服务器端,客户端统一为浏览器,实现了跨平台部署和便捷升级,极大降低了运维成本,成为Web应用和SaaS服务的主流选择。随着WebAssembly、PWA等技术的发展,B/S架构在性

weixin_30598225的博客 382

radix-vue PaginationPrev 组件详解:上一页触发器的 Props、禁用逻辑与源码实现

本指南聚焦 radix-vue(即 Reka UI)Pagination 组件族中的 `PaginationPrev` 触发器:它在分页条中负责将当前页切换为上一页。读完本文你将掌握 `PaginationPrev` 的完整 Props 定义、边界禁用规则、默认渲染行为,以及它如何通过 `PaginationRoot` 提供的上下文与分页状态联动,并学会在真实项目中组合使用。 ## Pagina

gitblog_00951的博客 541
上一篇: 如何评价Flutter?
下一篇: 为什么我建议Flutter中通过构造参数给页面传递信息
程序员老刘·
博客等级 码龄3年 622粉丝 142原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值