开发者的 Mac 磁盘为什么越用越满?用 SpacePeek 排查 node_modules、.git、build 和缓存

园区网从零到精通(9):802.1X / MAC / Portal 认证失败怎么定界——先看 User online fail reason,再按四段链路分责 管理员登不上设备,和终端用户上不了网,用的是同一套 AAA 机制、同一个。 阅读详情

如果你是一名 Mac 开发者,可能遇到过一个很奇怪的问题:

刚买电脑的时候,硬盘空间怎么看都够。

用了几个月以后:

Macintosh HD
剩余空间:越来越少

打开 Finder 看了一圈,却发现:

“我也没存多少电影啊。”

再仔细看看项目目录:

Projects/
├── project-a/
├── project-b/
├── project-c/
├── old-project/
└── experiments/

每个项目看起来都不算特别大。

但真正展开以后,可能会发现:

node_modules/
.git/
build/
dist/
target/
cache/
backup/

这些目录一个比一个“能吃”。

问题来了:

这些目录到底哪些可以清理?

更准确一点:

为什么一个看起来只有几 GB 的源码项目,最后可能膨胀成几十 GB?

这篇不准备给出一张简单的“删除清单”。

因为开发目录最怕的就是:

看到目录很大 → 直接删。

更稳妥的做法是先找到空间异常的位置,再判断它为什么这么大。

而这正是 SpacePeek 比较适合参与的地方。

SpacePeek 可以从 Finder Quick Look 直接查看文件夹大小、最大项目、Contents 和目录结构,并通过搜索进一步定位文件和文件夹。官方目前采用按需扫描,而不是后台建立全盘索引。(spacepeek.space)


一、开发者为什么特别容易遇到“磁盘越用越满”?

普通用户的文件增长通常比较直观:

照片
视频
文档
下载

开发环境则不一样。

一个项目可能同时拥有:

源码
依赖
Git 历史
构建产物
缓存
测试数据
日志
临时文件
备份
压缩包

而且很多目录是工具自动产生的。

你可能甚至不知道它什么时候变大的。

比如:

2026-01
project = 2 GB

2026-04
project = 8 GB

2026-08
project = 31 GB

源码本身可能只增加了几百 MB。

剩下的空间增长,可能来自:

node_modules
.git
build
cache
backup

所以开发者排查磁盘空间时,最重要的第一步不是:

“找垃圾文件。”

而是:

“找出空间增长发生在哪里。”


二、先建立一个概念:源码大小 ≠ 项目目录大小

这是开发者非常容易忽略的一点。

例如一个项目:

src/
    200 MB

看起来很小。

但整个项目:

project/
├── src/           200 MB
├── node_modules/    8 GB
├── .git/            3 GB
├── build/           2 GB
├── cache/           5 GB
└── backup/          7 GB

最后:

project ≈ 25 GB

所以如果你只看源码:

“这个项目明明没多少代码。”

完全可能。

因为真正占空间的不是代码。

而是围绕代码工作的整个环境。


三、第一嫌疑人:node_modules

如果你使用 Node.js 生态,node_modules 几乎是绕不开的话题。

一个项目:

package.json
package-lock.json
src/
node_modules/

真正让目录膨胀的经常是:

node_modules/

原因也不难理解。

现代 JavaScript 项目的依赖树可能非常复杂:

你的项目
 ↓
依赖 A
 ↓
依赖 B
 ↓
依赖 C
 ↓
更多间接依赖

最终产生大量文件。

而且这些文件不一定是几个大文件。

可能是:

几十万甚至更多的小文件

所以这里有一个很重要的认知:

目录占用空间,不只是“大文件”造成的。

文件数量本身也会带来明显的存储和扫描成本。


四、那 node_modules 能不能删?

通常来说:

如果项目可以通过 package.json / lockfile 重新安装依赖,那么 node_modules 往往属于可以重新生成的内容。

但这句话后面有一个非常重要的限定:

“可以重新生成”不等于“任何时候都应该删除”。

比如你正在:

离线开发

或者:

当前项目环境刚好配置完成

这时候删除以后,下一次工作可能需要重新安装依赖。

所以真正的问题不是:

node_modules 能不能删?

而是:

我现在是否愿意用重新安装依赖的时间,换取这部分磁盘空间?

这就是工具无法替你做出的决定。


五、SpacePeek 在这里负责什么?

它不需要告诉你:

“删除 node_modules。”

它只需要让你看到:

project/
├── src/             300 MB
├── node_modules/     11 GB
├── build/             2 GB
└── .git/              1 GB

这时候问题已经清晰很多。

你原本只知道:

“Mac 磁盘快满了。”

现在变成:

“原来这个项目的 node_modules 就占了 11 GB。”

这就是空间分析的价值。

SpacePeek 的 Overview 和 Contents 都是围绕这个过程设计的:先看文件夹整体情况,再继续向下浏览具体目录。(spacepeek.space)


六、第二嫌疑人:.git

如果 node_modules 是“文件很多”,那么 .git 更容易让人产生另一种误解:

“源码明明没有这么大,为什么 Git 目录这么大?”

因为 .git 保存的是版本控制相关的数据。

一个项目长期开发以后:

v1
↓
v2
↓
v3
↓
v4
↓
大量 commit

历史记录可能逐渐增长。

尤其是某些项目曾经提交过:

  • 大型二进制文件;
  • 构建产物;
  • 数据文件;
  • 压缩包;
  • 视频;
  • 模型文件;

即使后来从工作目录删除,它们也可能继续存在于 Git 历史中。

所以:

.git 很大

本身并不奇怪。


七、但 .git 是一个典型的“千万不要凭大小删除”的目录

因为:

rm -rf .git

这种操作的破坏性非常直接。

工作目录可能还在。

但 Git 仓库历史也可能随之消失。

因此,如果你发现:

.git = 8 GB

正确的思路不是:

“8 GB,删。”

而应该是:

为什么这么大?
       ↓
有没有大文件进入历史?
       ↓
是否需要保留完整 Git 历史?
       ↓
是否有远程仓库?
       ↓
是否可以采用 Git 专门的清理方案?

注意这里已经超出了 SpacePeek 的职责范围。

SpacePeek 可以告诉你:

.git 很大。

但如果你需要进一步分析:

Git 历史里到底是谁占空间。

应该使用 Git 自己的分析方法。

这就是工具边界。


八、第三嫌疑人:build 和 dist

很多项目都会产生:

build/
dist/
out/
target/

这类目录。

它们通常保存构建后的结果。

例如:

src/
   ↓
编译 / 打包
   ↓
dist/

如果你反复执行:

build

那么构建产物可能不断变化。

有些项目每次都会完整清理。

有些项目则可能保留额外的缓存。

还有些项目会生成大量中间文件。

因此看到:

dist = 6 GB

不能直接得出:

“dist 没用了。”

你需要知道这个项目的构建流程。


九、一个非常实用的判断方法:问自己“它能不能重新生成?”

对于开发目录,可以把文件分成两类。

第一类:源数据

例如:

src/
README.md
配置文件
设计源文件
数据库

通常应该谨慎处理。


第二类:可再生成产物

例如某些情况下:

build/
dist/
node_modules/
cache/

这些可能可以重新生成。

但注意:

“可能可以重新生成”必须结合具体项目。

不能把所有同名目录一刀切。


十、这就是为什么“按大小排序”只是第一步

假设 SpacePeek 显示:

node_modules   12 GB
.git            8 GB
build           7 GB
assets          5 GB
src             1 GB

如果只看大小:

12 GB
8 GB
7 GB
5 GB

但如果按照“是否可以处理”来看:

node_modules → 需要判断
.git         → 高风险
build        → 可能可重建
assets       → 通常谨慎
src          → 通常不要碰

这就是为什么:

空间分析 ≠ 清理决策。

工具给你排序。

人负责理解。


十一、第四类经常被忽略:缓存

开发环境里还有大量:

cache/
.caches/
tmp/
logs/

它们往往非常适合拿来做空间排查。

但“缓存”这个词也容易误导。

缓存通常意味着:

数据可以再次生成。

但具体能不能直接删除,仍然取决于产生它的应用。

例如某些开发工具的缓存:

删除
 ↓
下一次启动重新生成

可能只是第一次启动慢一点。

但某些目录虽然名字里带 cache:

cache/

实际可能包含用户没有其他副本的数据。

所以不要建立:

文件夹名字叫 cache → 直接删。

这样的机械规则。


十二、SpacePeek 特别适合做“第一轮排查”

比如:

~/Projects/

你发现:

Projects = 180 GB

继续往下:

project-a = 12 GB
project-b = 72 GB
project-c = 16 GB
project-d = 80 GB

那么:

project-b 和 project-d 值得重点检查。

再进入:

project-d/

看到:

node_modules = 20 GB
.git         = 11 GB
build        = 31 GB
src           = 2 GB

这时候你已经获得了非常有价值的信息:

这个项目不是源码太大,而是构建相关目录异常大。

接下来才是进一步调查。


十三、如果是 build 很大,应该怎么继续?

例如:

build = 31 GB

下一步不要直接删除。

先问:

这个目录是什么生成的?

可能是:

Xcode
CMake
Gradle
Rust
Android
前端构建工具

不同工具的清理方式不同。

所以正确流程应该是:

SpacePeek
 ↓
发现 build 很大
 ↓
确认项目构建系统
 ↓
查对应工具的清理方式
 ↓
执行清理
 ↓
重新构建验证

这就形成了:

SpacePeek 负责发现问题,专业工具负责解决问题。


十四、如果是 .git 很大,也不要直接删除

更合理的流程:

发现 .git 很大
 ↓
判断是否必须保留历史
 ↓
分析 Git 对象
 ↓
定位大对象
 ↓
根据 Git 工作流决定处理方式

如果只是:

“这个项目已经废弃了。”

那整个项目是否还需要保留,才是更大的问题。

也就是说:

.git 很大

可能最终得到的答案不是:

清理 .git。

而是:

整个项目已经不需要了,可以归档到外部存储。

这就是为什么目录分析必须结合上下文。


十五、第五类:备份目录

开发者经常会有:

backup/
old/
archive/
release/
snapshot/

这些目录非常容易越积越大。

例如:

project/
├── backup-2024/
├── backup-2025/
├── backup-2026/
└── current/

可能每个版本都有:

10 GB

最后:

backup = 30 GB

这里最容易犯的错误是:

“backup 肯定是旧东西。”

但备份存在的意义就是:

平时可能用不到,出问题时非常重要。

所以处理备份时应该首先确认:

还有没有其他副本?
是否已经上传?
是否需要保留历史版本?
是否有明确的保留周期?

如果这些问题都没有答案:

不要为了释放空间而急着删除。


十六、搜索功能在这里也派上用场

假设:

Projects/

里有大量项目。

你可以先搜索:

backup

或者:

node_modules

然后快速找到相关目录。

SpacePeek 当前支持在文件夹树中按文件、文件夹或项目名称进行搜索。(spacepeek.space)

这对于项目很多的人尤其方便。

你不需要:

project-a
project-b
project-c
project-d
project-e
...

一个一个展开。


十七、但不要把“搜索 node_modules”理解成“所有 node_modules 都应该删”

搜索的作用只是:

找出来。

例如:

project-a/node_modules
project-b/node_modules
project-c/node_modules
project-d/node_modules

现在你可以进一步问:

  • 哪些项目还在维护?
  • 哪些已经废弃?
  • 哪些依赖安装成本很高?
  • 哪些项目需要离线工作?
  • 哪些目录可以重新生成?

这时候搜索结果就变成了一个决策清单。

而不是删除命令。


十八、一个很实用的开发者清理模型

可以把开发目录里的内容简单分成四层:

第一层:源数据
↓
源码 / 配置 / 数据 / 素材

第二层:版本历史
↓
.git / 历史备份

第三层:可再生成内容
↓
node_modules / build / dist / cache

第四层:临时内容
↓
tmp / logs / 临时导出

越靠近第一层:

越应该谨慎。

越靠近第四层:

越值得优先检查。

但这只是一个判断框架。

不是删除规则。

因为具体项目的目录语义可能完全不同。


十九、如果磁盘只剩 20 GB,应该先查哪里?

假设:

Mac 可用空间:20 GB

你的 Projects 已经占:

200 GB

可以这样处理:

第一轮

SpacePeek 查看:

Projects

找出最大的项目。

第二轮

进入项目:

project-a

查看:

node_modules
.git
build
cache
assets

第三轮

搜索:

backup
cache
build
node_modules

第四轮

逐项判断:

可重新生成?
是否有其他副本?
项目还在用吗?
删除后恢复成本多高?

第五轮

再决定:

删除
移动
归档
保留

这种方式比“全盘扫描 → 自动清理”更适合开发环境。


二十、还有一个容易被忽略的问题:SSD 空间不是只由项目目录决定

如果你发现:

Projects = 150 GB

当然值得检查。

但如果整个磁盘:

容量 1 TB
可用 10 GB

而你只找到:

Projects = 150 GB
Downloads = 30 GB
Documents = 20 GB

那么不要假设:

“剩下的空间肯定都是垃圾。”

macOS 还有系统数据、应用数据、各种数据库、缓存以及其他存储区域。

因此 SpacePeek 更适合:

从你能够访问和检查的文件夹开始定位问题。

它并不是 macOS Storage 页面或系统级存储管理机制的完全替代品。

这也是工具边界。


二十一、实测这篇文章时,建议准备一个真实开发项目

如果你希望这篇文章最终达到更高的 优快云 质量,可以不要只写概念。

最好找一个你自己的真实项目。

例如:

项目目录:
~/Projects/example-project

记录:

项目总大小:
文件数量:
node_modules:
.git:
build:
dist:
cache:
其他大目录:

然后用 SpacePeek 做一次完整检查。

最重要的是:

不要人为删除测试数据以后再说“清理释放了 XX GB”。

应该保留原始状态,先分析,再处理。

这样文章才真正有“实战”价值。


二十二、测试结果最好记录成这样的表

目录大小初步判断最终处理
src/源数据保留
node_modules/可重建依赖根据项目情况处理
.git/版本历史谨慎处理
build/构建产物根据构建工具判断
dist/发布产物根据用途判断
cache/缓存确认来源后处理
backup/备份确认副本后处理

这张表有一个好处:

把“空间大小”和“处理决定”分开了。

这样不会让读者形成:

大 = 删除

这种危险的条件反射。


二十三、如果想把这篇文章写得更专业,可以加入“为什么”

例如不要只写:

node_modules 很大。

继续问:

为什么?

因为依赖树会带来大量文件和间接依赖。

不要只写:

.git 很大。

继续问:

为什么?

因为版本历史可能保存大量对象,尤其是曾经提交过的大文件。

不要只写:

build 很大。

继续问:

为什么?

因为构建系统可能产生中间产物、缓存或多个目标平台的构建结果。

不要只写:

backup 很大。

继续问:

为什么?

因为多个历史版本可能被长期保留。

这种写法比单纯罗列目录更有技术含量。


二十四、SpacePeek 在开发场景中的真正价值

如果让我把它在开发环境里的作用压缩成一句话:

它不是告诉开发者“什么能删”,而是帮助开发者快速发现“什么值得检查”。

这两个定位差别非常大。

例如:

Mac 空间不足
      ↓
Projects 很大
      ↓
某个项目异常
      ↓
build 占 31 GB
      ↓
发现构建产物异常
      ↓
再使用对应构建工具解决

SpacePeek 在这里完成的是:

定位

而不是:

自动修复

这其实也是一个比较稳妥的工具边界。


二十五、哪些情况下不应该依赖 SpacePeek?

这部分同样重要。

如果你的目标是:

1. 自动清理系统垃圾

SpacePeek 不是专门的系统清理工具。

2. 自动判断哪些文件可以删除

它不是数据价值判断系统。

3. 分析 Git 历史中的大对象

应该使用 Git 自己的分析手段。

4. 清理 Xcode / Android / Docker 等特定工具产生的数据

优先使用这些工具对应的官方清理机制或专门方法。

5. 管理整个团队的开发环境

这已经属于开发基础设施管理问题。

所以:

SpacePeek 是文件系统排查入口,不是开发环境治理平台。


二十六、一个比较稳妥的开发者磁盘排查顺序

如果以后自己的 Mac 又出现空间不足,可以直接按照这个顺序:

① 看整体存储情况
        ↓
② 找出最大的用户目录
        ↓
③ SpacePeek 检查目录结构
        ↓
④ 找最大的项目
        ↓
⑤ 查看 node_modules / .git / build / cache / backup
        ↓
⑥ 搜索重复或历史目录
        ↓
⑦ 判断是否可以重新生成
        ↓
⑧ 确认是否存在其他副本
        ↓
⑨ 再决定删除 / 移动 / 归档
        ↓
⑩ 最后验证释放了多少空间

这个流程最大的特点就是:

把“发现”和“删除”分开。

对于开发环境来说,这一点尤其重要。


二十七、写在最后:开发者真正需要的,可能不是“清理神器”

Mac 磁盘空间不足的时候,人很容易陷入一个误区:

“我需要一个能帮我自动清垃圾的工具。”

但很多时候真正缺少的其实是:

我不知道空间到底去哪了。

尤其是开发环境。

因为:

node_modules
.git
build
dist
cache
backup

每一个都可能很大。

但每一个的处理方式又不一样。

所以一个更可靠的思路是:

先找到
   ↓
再理解
   ↓
再判断
   ↓
最后处理

SpacePeek 更适合处在前三步。

它可以从 Finder Quick Look 开始,让你快速看到文件夹大小、最大项目和目录结构,再通过搜索、预览和 Archive Preview 继续缩小范围。官方当前版本为 2.1,支持 macOS 14.0 及以上。(spacepeek.space)

如果你是开发者,我觉得这反而是一个值得保留的使用习惯:

看到磁盘空间不足,先别急着删。

先问三个问题:

谁占空间?

为什么这么大?

它还能不能删?

第一个问题,可以交给工具。

后面两个问题,最好还是留给自己。

因为代码可以重新安装,构建可以重新生成。

但误删的数据,未必能重新生成。

流体动力学仿真软件:Star-CCM+_(1).Star-CCM+基础及入门 Star-CCM+的用户界面(UI)分为多个部分,包括菜单栏、工具栏、工作区、视图窗口和控制台。菜单栏包含文件、编辑、视图、工具等常用菜单。例如,“File”菜单可以用于打开、保存和退出项目。工具栏提供常用的工具按钮,如新建项目、打开项目、保存项目等。也可以自定义工具栏,添加常用的功能按钮。工作区显示当前项目的结构和各个对象。可以通过拖拽方式组织和管理项目中的各个部分。视图窗口显示几何模型、网格、结果等。可以通过不同的视图模式查看和分析数据。控制台显示软件的运行日志和输出信息。 阅读详情

相关推荐

CST Studio Suite安装详细教程(附安装包)CST Studio Suite 2024超详细安装教程

CST Studio Suite 2024安装指南摘要:本文详细介绍了CST Studio Suite 2024电磁仿真软件的下载与安装流程,包含23个图文步骤说明,从解压安装包到配置许可证服务器。重点提示了以管理员身份运行、自定义安装路径等关键步骤,并提供了常见问题解决方案和入门技巧。该软件适用于天线设计、PCB分析等高频电磁场仿真,安装后需通过localhost:27000连接许可证服务器完成激活。

pythonqiang9的博客 1万+

小白一键部署:VoiceStudio 本地语音工作室(Linux/Win/Mac)

VoiceStudio 是破十万星的开源本地语音工作室。本文在 Debian 13 实机用官方一行命令装上 0.5.7,记录 GPU 崩溃启动参数、Install local runtime、模型许可,以及 CPU 上 Voice Design 合成 7 秒 demo。与只做听写的 Hex 互补。

m0_56699208的博客 199

总结-NuerIPS2023-Direct Preference Optimization:Your Language Model is Secretly a Reward Model

对比PPO,DPO的泛化能力更强。

m0_60361484的博客 1609

OpenClaw Mac mini部署教程:接入飞书、AI Agent与公网访问

OpenClaw Mac mini部署教程:接入飞书、AI Agent与公网访问

wei_shuo的博客 1万+

SQL注入绕过information_schema:实战技法与替代路径详解

SQL注入是Web安全领域的核心漏洞类型,其原理是通过构造恶意SQL语句,干扰应用程序与数据库的正常交互逻辑,从而窃取或篡改数据。在渗透测试与CTF竞赛中,绕过常见防护措施是提升技术能力的关键。当标准的信息收集方式受阻时,例如无法访问information_schema数据库,攻击者需要掌握替代的元数据获取方法。这些技术价值在于模拟真实环境中日益严密的防御体系,锻炼在受限条件下的系统性信息收集思维。典型的应用场景包括存在WAF过滤、权限限制或编码干扰的实战环境。本文将围绕SQL注入这一核心,深入探讨如何利用

weixin_33980459的博客 430

北斗导航 | ILS(仪表着陆系统)、MLS(微波着陆系统)和GBAS(地基增强系统)的性能对比

最 早 的 GBAS 系 统 是 **局 域 增 强 系 统(LAAS)**,它是 1990 年由美国 Honeywell 公司 和 NASA 共 同 完 成 的 差 分 GPS(DGPS)演 变 而 来 的。1998 年,LAAS 被 ICAO 采 纳为 GBAS。2009 年 9 月 3 日 Honeywell 公 司 的GBAS 系统通过了 **CAT-I 精密进近着陆系统**的设计认证 ,而 **CAT-II 和 CAT-III 系统的研发和验证工作也正在有序的进行中**

尘世冰封的专栏 3991

WebStorm macOS 安装调优与实战效果全景

本文以实测视角展示 WebStorm 2025.3 在 macOS 上的极致体验:原生 arm64 启动仅需 3–5 秒,Islands 主题显著提升标签页辨识度,AI 全行补全精准响应,正确排除 node_modules 后索引时间压缩至 30 秒内,重命名重构时静态引用清晰呈现。通过真实项目流程验证其在 React + TypeScript、Vue 3 + Vite 中的高效开发闭环。文末明确适用边界——适合中大型项目与深度开发者,对轻量级或简单脚本场景优势有限。

独坐一隅,凝神遐想,是种幸福! —— 独隅 60

【git】git: ‘interpret-trailers’ is not a git command. See ‘git --help’

cents 7.6系统. yum源安装git最新版本是1.8.3 报错: git: 'interpret-trailers' is not a git command. See 'git --help'. cannot insert change-id line in .git/COMMIT_EDITMSG 解决: git add xxx git commit -m "xxx" 然后修改 vim .git/hooks/commit-msg #if test -n "${reviewurl}" ; th

machh的专栏 4760

Mac 和 Windows 虚拟机怎么共享文件?用 UVM 设个共享文件夹

在 UVM 选择 Mac 共享文件夹,从 Windows 的「此电脑」打开共享盘,验证双向读写。文末附 UVM 简介与官方下载入口。

hsduren的专栏 148

DSI3协议介绍

分布式系统接口(DSI)是一种通用且功能强大的总线协议,旨在将多个遥感器和执行器设备互连到中央控制模块。该网络的主要目标应用是汽车安全系统。这种应用的一些特点是需要低成本、高鲁棒性、中速互连,仅限于两根导线。此外,它必须具有故障安全性、确定性和良好的EMC特性。即使具有所有级别的智能和可编程性的设备都可以连接到网络,远程设备也必须能够通过简单的状态机实现。由于模块尺寸非常重要,因此中央模块和远程单元中的最小组件至关重要。

汽车电子软件领域知识分享 1万+

STM32F4 SPI FLASH(W25Q128)驱动详解(含DMA+完整读写擦除+低功耗)

本文实现了一款基于STM32 HAL库的SPI Flash驱动,以W25Q128为例,提供了完整的初始化、读写、擦除、ID读取等功能。驱动集成了DMA传输、超时保护、页对齐写入等特性,支持扇区擦除、整片擦除、页写入及跨页缓冲写入。代码结构清晰,易于移植到其他SPI Flash型号(如W25Q64、W25Q16等),适用于数据存储、固件升级、文件系统等嵌入式场景。

kevin1499的博客 98

组网第64课:802.1X 与准入——三角色、Guest VLAN、MAC 认证、哑终端准入

2021 年一个制造客户,接入层四十多台交换机,端口全是默认开放。会议室墙上留了四个网口给投影和视频会议,平时没人管。某天流量监控报警:办公网里有台设备在扫 ,一小时扫了三百多个地址。顺着 ARP 表往上找,端口在会议室,MAC 不在资产台账里。到现场一看,一台不属于公司的笔记本插在墙插上,外包人员来开会顺手插的,插上就拿到了办公网 IP,直接能访问文件服务器。IT 负责人跟我说了句大实话:“我们没做过准入,端口插上就能用。”这就是准入要解决的问题。不是"防黑客"这种空话,是很具体的三件事:谁能接进来、接进

qq_36765170的博客 273

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

WebStorm macOS 安装部署与高效调优完全指南

本文为 WebStorm 2025.3/2026.1 在 macOS 上的安装与调优指南,针对零基础开发者,涵盖系统检查、dmg 安装、首次配置、快捷键迁移、Node.js 环境关联、调试实操及性能优化。重点澄清“右键排除 node_modules 无效”“nvm 用户需手动指定路径”等常见误区,提供内存调优、索引排除、插件精简等实战技巧,助用户构建高效稳定的前端开发环境。附常见报错排查表与资源链接,可快速上手并持续优化。

独坐一隅,凝神遐想,是种幸福! —— 独隅 438

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

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

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

电脑自带录屏功能怎么带声音?Windows 与 Mac 完整设置指南

Windows 用户优先用 Xbox Game Bar 或 Windows 11 截图工具,在音频面板里同时打开系统声音和麦克风即可;Mac 用户用 QuickTime 或 Shift + Command + 5 可以轻松录到人声,但要录系统内部声音需要额外配置虚拟音频设备,或者安装专业录屏软件。记住「系统声音」和「麦克风声音」是两套独立开关,分别确认,基本就能解决绝大多数录屏无声的问题。

xiaolu12388的博客 150

GitHub 今日推荐|Stela:在 PC 上直接启动 macOS 的翻译层

Stela 让 x86-64 PC 通过 UEFI 启动 macOS,用 Rust 实现 ARM64 到 x86-64 指令翻译和 NVIDIA Metal 驱动,模拟 M2 Mac mini 硬件环

wfly blog 227

截图快捷键不生效、被占用怎么办?Mac 和 Windows 的排查顺序

截图快捷键按了没反应,常见原因是同一个组合键已被聊天软件、输入法、系统功能或另一款截图工具占用,或者软件没有在后台运行、缺少系统权限。本文按「先确认谁在响应、再查冲突、最后改键」的顺序,给出 macOS 和 Windows 上的排查办法,并说明如何选一个不容易撞车的组合。macOS、Windows 和鸿蒙 OS 上的 InSnap 都可以在设置里自定义截图快捷键。

BingMao_Tp的博客 200

两台 Mac 拼成推理池,加机器不加内存

11 月 11 日,Apple 通过子公司 Claris 放出了 Harbor 的预览,两台用雷雳 5 连起来的 Mac 能自动组网,把各自的内存汇成一块统一的推理资源。这件事方向我有兴趣,但不用等预览资格,手边两台 Mac 今天就能用 Ollama 拼出同款逻辑。先把一个误区说清楚,省得后面白算账。

m0_58155849的博客 148

不用降低系统安全策略,也能在 Mac 上写入 NTFS 的方法

FSKit 是苹果官方主推的新一代文件系统扩展技术,也是未来 NTFS 读写工具的主流发展方向,只是推出时间不长,很多开发者和用户还不够熟悉。一旦调低启动安全性,整台电脑的安全防线都会放宽,不是仅针对硬盘读写工具生效,为一块移动硬盘牺牲整机安全性性价比很低。老牌 NTFS 读写工具底层依赖内核扩展,这类程序运行在系统最底层,拥有极高权限,今天就来说说不用降低系统安全策略,也能在 Mac 上写入 NTFS 的方法。

candlelight的专栏 279

Mac上装了最新版本的Android Studio,但是没找到jdk的设置选项也没找到jbr的目录

新版Android Studio(2025.3.1+)因三项变更导致常见问题:一、JDK设置移至“DaemonJVM criteria”,新项目默认自动探测或下载JDK;二、JBR目录改名为带版本号的jbr-21等,需进入.app/Contents/查看,或通过About窗口确认运行时;三、命令行缺adb因platform-tools未加入PATH,需在SDK Manager中勾选并配置~/.zshrc中的ANDROID_HOME及PATH。重装或清理残留可解决缺失问题,切勿手动设JAVA_HOME或安装冲

Programming is a highly artistic endeavor 390

macOS 27.3 完整磁盘访问机制变更:FDA 不再自动添加授权条目

macOS 27.3 Beta 内置 TCC/FDA_WARNING 功能标记,开启之后,应用尝试读取受保护系统文件时,系统直接静默拒绝访问,不再将程序写入 TCC 权限数据库,软件也就不会自动出现在「完整磁盘访问」列表。本文记录该底层改动、新旧权限流程差异、手动授权步骤、高频踩坑点,同时介绍处于开发阶段的 Private Folders 细粒度文件夹权限方案。

candlelight的专栏 354

没有无障碍树,桌面应用怎么做真机 E2E 测试:macOS 坐标点击加像素断言的完整做法

没有无障碍树的桌面应用,E2E 不是不能做,只是要把"地图"换成"坐标 + 像素":CGEvent 发事件、screencapture 截图、PIL 数像素。完整做法是五步:定五层架构和用例总表 → 写合成事件工具链(60ms 间隔、arm64 按值传、拖动用 Dragged、键盘走 CGEvent、防睡眠断言)→ 像素断言(实测阈值、工具栏自动定位、三层坐标换算)→ 测试隔离与可观测性(空白工作区、

遇码开源社区 238

【Linux网络编程】计算机网络基础:局域网与广域网、OSI七层模型与TCP/IP五层模型、封装解包与MAC/IP地址、端口号与socket编程接口

本文系统讲解Linux网络编程基础,涵盖局域网与广域网概念、OSI七层与TCP/IP五层模型对比,深入解析数据封装/解包过程,阐明MAC地址(局部寻址)与IP地址(全局定位)的区别,结合端口号实现进程级通信,并介绍socket编程接口的核心机制。通过分层设计思想,揭示网络通信本质为“进程间通信”的远程延伸,为后续深入学习奠定坚实基础。

分享 AI 时代程序员的进阶之路:大模型应用、AI 编程工具实战,同时沉淀 C / Linux 底层技术笔记。与君共赴,万里征途。 973

macOS 10 、Docker 玩轉 MySQL

本文介紹如何在macOS 10.14上使用Docker Desktop運行MySQL 8.0。透過docker pull mysql/mysql-server:8.0下載鏡像,並以docker run啟動容器,映射3306埠實現外部連接。預設root密碼需從日誌中提取,可通過環境變數MYSQL_ROOT_PASSWORD設定自定密碼。若需外部連線,可修改root帳號host或建立新使用者。資料儲存於Docker Volume,路徑位於/var/lib/docker/volumes/,macOS使用者需進入L

csdn_aspnet的专栏,请点击博客主页右上角三个点中的私信联系 302

一个休息提醒 App,怎样才能在 Mac 上留下来?

一个休息提醒 App 能否长期用下去,取决于它是否适合自己的日常。Tick Rest 是一款免费开源的 Mac 应用,提供多种休息方案,支持自定义间隔、时长和工作时段,也能选择小窗或全屏提醒。通过菜单栏可以查看倒计时、立即休息,临时忙碌时还能延后或暂停。无需注册账号,没有广告,设置与休息记录保存在本机。从简单的初始设置开始,根据使用感受逐步调整,让提醒融入工作节奏,也让接水、远眺和起身活动更容易发生。

fthux的博客 163

电脑自带录屏功能怎么带声音:Windows 与 Mac 完整指南

Windows 用户优先使用 Xbox Game Bar 或 Windows 11 截图工具,在设置中把音频来源选为「全部」即可同时录制系统声音和麦克风;Mac 用户使用 Shift + Command + 5 或 QuickTime Player,麦克风可直接选择,系统声音则需要借助 BlackHole 等虚拟音频设备或改用 OBS、数据蛙录屏软件。录制前先确认音频来源和音量,能避免大部分「录完没声音」的问题。

xiaolu12388的博客 209

不用买开发板:用 QEMU 走通嵌入式 Linux 全流程(五)在 macOS 上搭 Linux 构建环境

前面四篇都在 QEMU 里操作。从这一篇开始要编译内核和 Buildroot,需要一个真正的 Linux 构建环境。本篇讲为什么不能直接在 macOS 上编、用什么方案、以及一个很常见的 root 构建报错。

博客 153
上一篇: SpacePeek 能清理 Mac 磁盘吗?从“找出大文件”到“敢不敢删除”
coding4u
博客等级 码龄14年 0粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值