【高级运维必看】Docker Buildx缓存卷配置全攻略:告别重复构建

第一章:Docker Buildx缓存机制概述

Docker Buildx 是 Docker 官方提供的 CLI 插件,用于扩展镜像构建功能,支持多平台构建和高级缓存策略。其核心优势之一是引入了现代化的缓存机制,显著提升了构建效率,尤其是在 CI/CD 流水线中频繁构建相同或相似镜像的场景下。

缓存驱动类型

Buildx 支持多种缓存后端,开发者可根据环境选择最适合的类型:
  • inline:将缓存数据嵌入镜像层中,适合简单场景
  • registry:将缓存推送到远程镜像仓库,便于团队共享
  • local:缓存保存在本地目录,适用于开发调试
  • gha:与 GitHub Actions 集成,利用其缓存服务
  • s3、azblob:对接云存储服务,实现跨节点缓存共享

启用 Buildx 并配置缓存

首先确保启用 Buildx 构建器,并指定缓存输出方式。以下命令创建一个名为 mybuilder 的构建器并使用 registry 缓存:
# 创建并启动新的构建器实例
docker buildx create --use --name mybuilder

# 构建镜像并推送缓存至镜像仓库
docker buildx build \
  --platform linux/amd64,linux/arm64 \
  --cache-to type=registry,ref=example.com/myapp:cache \
  --cache-from type=registry,ref=example.com/myapp:cache \
  -t example.com/myapp:latest \
  --push .
上述命令中,--cache-to 表示将本次构建产生的缓存推送到注册表,而 --cache-from 则表示从远程拉取已有缓存以加速构建过程。

缓存命中原理

Buildx 基于内容寻址(content-addressable)的层索引机制判断缓存是否可用。只要某一层的构建上下文、Dockerfile 指令及其前置层未发生变化,即可复用缓存,无需重新执行构建步骤。
缓存类型存储位置适用场景
registry远程镜像仓库生产级多节点共享
local本地文件系统本地开发调试
ghaGitHub Actions CacheGitHub CI 环境

第二章:Buildx缓存类型详解与配置方法

2.1 理解本地缓存与远程缓存的差异

本地缓存通常驻留在应用程序的同一进程中,访问速度快,延迟低。而远程缓存位于独立的服务节点(如 Redis 或 Memcached),需通过网络调用获取数据,延迟相对较高。
性能对比
  • 本地缓存:读写在内存中完成,响应时间通常在纳秒级
  • 远程缓存:涉及序列化、网络传输和反序列化,延迟在毫秒级
数据一致性
远程缓存便于多实例共享状态,适合分布式环境;本地缓存则存在副本不一致风险,需配合失效机制使用。
代码示例:本地缓存实现
var cache = make(map[string]string)
func Get(key string) (string, bool) {
    value, exists := cache[key]
    return value, exists // 零开销访问,无网络调用
}
该代码展示了一个简单的内存缓存结构,直接操作哈希表,适用于单机场景,不具备跨节点共享能力。

2.2 使用local模式实现高效本地缓存挂载

在分布式存储系统中,local模式通过将远程数据缓存在本地磁盘,显著提升读取性能并降低网络开销。
核心配置示例
apiVersion: v1
kind: Pod
spec:
  containers:
    - name: app
      image: nginx
      volumeMounts:
        - name: cache-volume
          mountPath: /cache
  volumes:
    - name: cache-volume
      hostPath:
        path: /mnt/local-cache
        type: Directory
该配置通过 hostPath 将节点本地路径 /mnt/local-cache 挂载到容器的 /cache 目录,实现数据的本地化存储。适用于日志缓存、临时文件处理等高I/O场景。
性能优势对比
模式读取延迟网络占用适用场景
remote-only高高数据一致性要求高
local模式低低高频读、容错性强

2.3 配置registry模式将缓存推送到镜像仓库

在持续集成流程中,配置registry模式可实现构建缓存的远程存储与共享。通过将本地构建缓存推送至镜像仓库,提升跨节点构建效率。
启用registry缓存导出
使用BuildKit时,可通过--output参数指定registry模式:
docker buildx build \
  --push \
  --cache-to=type=registry,ref=example.com/org/app:cache \
  --cache-from=type=registry,ref=example.com/org/app:cache .
其中,cache-to表示推送缓存至镜像仓库,cache-from用于拉取已有缓存。参数ref需指向有效的镜像标签地址。
缓存层级与策略
  • 支持全层级缓存(layer)和清单缓存(manifest)
  • 采用内容寻址存储,确保缓存一致性
  • 与镜像版本解耦,独立管理缓存生命周期

2.4 利用inline模式在镜像层中嵌入缓存数据

在容器镜像构建过程中,利用 inline 模式将缓存数据直接嵌入镜像层可显著提升构建效率。该方式避免了外部缓存依赖,确保构建环境的一致性与可移植性。
工作原理
通过在 Dockerfile 中使用多阶段构建,并将依赖项打包至特定层,后续构建可复用这些层作为缓存源。
FROM node:16 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
# 将依赖层作为缓存嵌入镜像
FROM node:16-alpine
COPY --from=builder /app/node_modules /app/node_modules
上述代码中,npm ci 生成的 node_modules 被固化到中间镜像层,后续构建时若基础依赖未变更,则直接复用该层,跳过下载安装过程。
优势对比
特性Inline 缓存外部卷缓存
可移植性高低
构建一致性强依赖环境

2.5 实践:多种缓存模式性能对比测试

在高并发系统中,不同缓存模式对性能影响显著。为量化差异,我们对比了直写(Write-Through)、回写(Write-Back)与旁路缓存(Cache-Aside)三种典型模式。
测试环境配置
使用 Redis 作为缓存层,MySQL 作为持久化存储,压测工具为 wrk,模拟 1000 并发持续请求。
性能数据对比
缓存模式平均延迟(ms)QPS数据一致性
Cache-Aside4.29,500强一致
Write-Through6.87,200强一致
Write-Back3.111,300最终一致
代码实现示例(Cache-Aside)
// Cache-Aside 模式读取逻辑
func GetUser(id int) (*User, error) {
    // 先查缓存
    user, err := redis.Get(fmt.Sprintf("user:%d", id))
    if err == nil {
        return user, nil
    }
    // 缓存未命中,查数据库
    user, err = db.Query("SELECT * FROM users WHERE id = ?", id)
    if err != nil {
        return nil, err
    }
    // 异步写入缓存
    go redis.SetEx("user:"+strconv.Itoa(id), user, 300)
    return user, nil
}
该模式优先访问缓存,未命中时回源数据库,并异步更新缓存,适合读多写少场景。

第三章:缓存卷挂载核心原理剖析

3.1 构建上下文与缓存命中关系解析

在持续集成系统中,构建上下文直接影响缓存命中率。构建上下文越稳定,缓存复用的可能性越高。
缓存命中关键因素
  • 源码变更粒度:细粒度变更减少上下文变化
  • 依赖版本锁定:使用固定版本避免意外更新
  • 构建路径一致性:确保输出路径可预测
示例:Docker 构建缓存优化
FROM golang:1.21
WORKDIR /app
COPY go.mod .
COPY go.sum .
RUN go mod download  # 利用独立层缓存依赖
COPY . .
RUN go build -o main .
上述 Dockerfile 将依赖下载与源码复制分离,当仅源码变动时,go mod download 层仍可命中缓存,显著提升构建效率。参数 -o main 指定输出文件名,确保构建产物一致性,便于缓存索引。

3.2 缓存键生成机制与层复用策略

在高并发系统中,缓存键的生成直接影响命中率与数据一致性。合理的命名规范能避免键冲突并提升可维护性。
缓存键设计原则
  • 唯一性:确保不同数据源的键不重复
  • 可读性:便于调试与监控
  • 层次化:按业务模块、资源类型分层组织
典型键生成模式
// 使用业务前缀 + 主键 + 版本号构造缓存键
func GenerateCacheKey(entity string, id int64, version string) string {
    return fmt.Sprintf("cache:%s:%d:v%s", entity, id, version)
}
该函数通过格式化字符串生成结构化键,entity表示业务实体(如user),id为主键,version用于缓存版本控制,支持灰度更新与批量失效。
多层缓存中的键复用
层级存储介质键是否复用
L1本地内存是
L2Redis集群是
统一键命名使多层缓存协同工作,降低运维复杂度。

3.3 挂载缓存卷对构建效率的实际影响

在持续集成环境中,挂载缓存卷可显著减少依赖安装时间。通过将常用模块(如 npm 的 node_modules)持久化存储,避免每次构建重复下载。
缓存机制示例
jobs:
  build:
    steps:
      - name: Cache dependencies
        uses: actions/cache@v3
        with:
          path: ~/.npm
          key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
该配置利用 GitHub Actions 缓存模块,将 npm 全局路径映射至缓存卷。key 值包含操作系统与 lock 文件哈希,确保环境一致性。
性能对比
场景平均构建时间网络请求次数
无缓存6m23s89
启用缓存卷2m11s12
数据表明,挂载缓存卷后,依赖解析阶段耗时下降约 65%,同时大幅降低外部服务调用频率,提升系统稳定性。

第四章:高级缓存优化实战场景

4.1 多阶段构建中缓存卷的精准挂载技巧

在多阶段构建中,合理利用缓存卷可显著提升构建效率。通过精准挂载依赖缓存目录,避免重复下载和编译。
缓存挂载策略
使用 --mount=type=cache 可声明缓存路径,确保仅在构建阶段共享临时数据:
FROM golang:1.21 AS builder
WORKDIR /app
# 挂载 Go 模块缓存
COPY go.mod .
RUN --mount=type=cache,target=/go/pkg/mod \
    --mount=type=cache,target=/root/.cache/go-build \
    go build -o main .
上述配置将模块缓存(/go/pkg/mod)与构建缓存(/root/.cache/go-build)独立挂载,减少镜像层冗余。
性能优化对比
策略首次构建(s)二次构建(s)
无缓存120118
精准挂载缓存12015

4.2 CI/CD流水线中持久化缓存的最佳实践

在CI/CD流水线中,合理使用持久化缓存可显著提升构建效率。通过缓存依赖项(如Node.js的node_modules或Maven的本地仓库),可避免重复下载,缩短构建时间。
缓存策略选择
推荐采用按需缓存与版本化键值结合的方式:
  • 使用内容哈希作为缓存键,确保依赖变更时自动失效
  • 对不同环境(测试、生产)使用独立缓存命名空间
GitLab CI 示例配置

cache:
  key: ${CI_COMMIT_REF_SLUG}
  paths:
    - node_modules/
    - .m2/repository/
  policy: pull-push
上述配置中,key基于分支名生成,保证隔离性;policy: pull-push表示在作业开始前拉取缓存,结束后回写,实现跨流水线共享。
缓存有效性监控
建议集成Prometheus监控缓存命中率,设置告警阈值,及时发现异常失效问题。

4.3 跨主机共享缓存卷的解决方案

在分布式系统中,实现跨主机缓存卷共享是提升数据一致性和服务可用性的关键。传统本地缓存无法满足多节点访问需求,因此需引入网络化存储方案。
主流实现方式
  • 使用分布式文件系统(如NFS、GlusterFS)挂载共享目录
  • 基于对象存储构建统一缓存层(如Redis Cluster + 持久化卷)
  • 容器编排平台集成CSI插件实现动态卷共享
以NFS为例的配置示例
# 在服务端导出共享目录
echo "/data/cache *(rw,sync,no_root_squash)" >> /etc/exports
systemctl restart nfs-kernel-server

# 客户端挂载
mount -t nfs 192.168.1.100:/data/cache /mnt/cache
上述配置将NFS服务端的/data/cache目录暴露给所有客户端,参数rw允许读写,sync确保数据同步写入磁盘,no_root_squash保留root权限映射,适用于受控内网环境。

4.4 清理策略与缓存失效管理机制

缓存系统的核心挑战之一是如何保证数据的一致性。当底层数据发生变化时,缓存必须及时更新或失效,否则将导致脏读。
常见清理策略
  • 写穿透(Write-Through):数据写入时同步更新缓存与数据库
  • 写回(Write-Back):先更新缓存,异步刷回数据库,适合高写入场景
  • 失效优先(Invalidate-on-Write):写操作仅使缓存失效,下次读取重新加载
缓存失效的实现示例
// 在用户信息更新后主动失效缓存
func UpdateUser(id int, name string) {
    db.Exec("UPDATE users SET name = ? WHERE id = ?", name, id)
    redis.Del("user:profile:" + strconv.Itoa(id)) // 删除缓存键
}
上述代码在数据库更新后立即删除对应缓存条目,确保下次读取时重建最新数据,避免长期不一致。
失效风暴防护
使用随机过期时间分散缓存失效高峰:
策略描述
固定TTL所有缓存统一过期,易引发雪崩
随机抖动TTL += rand(0, 300s),降低并发失效概率

第五章:未来构建体系的发展方向与总结

云原生构建的持续集成演进
现代构建体系正深度融入云原生生态,Kubernetes 驱动的 CI/CD 流水线成为主流。Tekton 作为 CNCF 的标准框架,允许声明式定义构建任务,实现跨平台一致性。
  • 使用 Tekton Pipeline 定义多阶段构建流程
  • 通过 PersistentVolume 挂载缓存依赖提升速度
  • 集成镜像仓库签名与安全扫描环节
智能化构建优化策略
借助机器学习分析历史构建数据,可动态调整资源分配。例如,根据模块变更频率预测编译顺序,减少等待时间。
构建类型平均耗时(秒)优化后耗时(秒)
全量构建320210
增量构建9867
边缘环境下的轻量化构建
在 IoT 和边缘计算场景中,采用 Distroless 镜像和 Bazel 构建系统可显著减小产物体积。以下为 Go 服务的最小化构建示例:
// Dockerfile.slim
FROM gcr.io/distroless/static:nonroot
COPY server /server
ENTRYPOINT ["/server"]
构建流程图:
源码提交 → 变更检测 → 并行任务调度 → 缓存复用 → 安全扫描 → 推送制品 → 部署验证
企业级实践中,Spotify 采用自研构建代理 Borg,将重复任务去重率提升至 76%,大幅节省计算成本。同时,结合 SLSA 框架保障供应链完整性。
【Linux】Buildx构建异构docker平台镜像(x86-ARM) Docker Buildx 是 Docker的CLI插件,来自于。自从Docker 18.06 开始这个插件直接集成到了Docker build 中,直至成文之日,它仍处于Experimental状态,所以想使用它需要显式地开启它。Buildx 是一个构建工具, 它可以帮助用户快速、高效地构建 Docker 镜像, 并支持多种平台的构建。使用 buildx, 用户可以在单个命令中构建多种架构的镜像, 例如 x86 和 ARM 架构, 而无需手动操作多个构建命令。 阅读详情

相关推荐

Docker buildx 的跨平台编译_docker build docker_buildkit

随着国产化和信创的推进,为应用适配多个操作系统和处理器架构的需求越来越普遍。通过 docker pull 或 docker run 拉取一个支持跨平台的镜像时,docker 会自动选择与当前运行平台相匹配的镜像。由于该特性的存在,在进行镜像的跨平台分发时,我们不需要对镜像的消费做任何处理,只需要关心镜像的生产,即如何构建跨平台的镜像。一次构建多处部署的镜像分发大幅提高了应用的交付效率,对于需要跨平台部署应用的场景,利用 docker buildx 构建跨平台的镜像也是一种快捷高效的解决方案。

2401_89690256的博客 1117

Docker - Docker Buildx

Docker Buildx 是 Docker CLI 的一个插件,它为 Docker 构建提供了全新的功能。它不仅保留了标准。

yueerba126的博客 4806

YOLOv11模型Docker镜像构建与部署全攻略:从基础镜像选型到Kubernetes集群实战

本文介绍了Docker容器化部署YOLOv11的关键价值:确保环境一致性、实现依赖隔离、提升部署效率并支持GPU加速。通过对比传统部署与容器化方案,量化了减少环境问题、提速部署的优势。同时初步探讨了基础镜像的选择原则,为后续构建推理服务奠定基础。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 74

Docker镜像文件打包和启动简易教程-Buildx构建多平台镜像

构建docker镜像文件、启动镜像服务的简易教程,以及利用docker buildx构建跨平台(amd/arm)的指令流程示例

科研小呆瓜的博客 4314

Xilinx SDK调试与FPGA硬件验证全流程解析

本文详细解析了从Vivado导出硬件到Xilinx SDK进行调试与FPGA硬件验证的全流程。重点阐述了正确导出包含bitstream的硬件平台、创建合适的SDK工程、配置Debug会话以编程FPGA,并介绍了串口验证、自定义IP测试以及使用ILA进行软硬件联合调试的高级技巧,帮助开发者高效完成FPGA系统的软硬件协同开发与问题排查。

weixin_28327051的博客 311

嵌入式设备低功耗设计误区:为什么你的RK3568总是被‘意外’唤醒?

本文深入分析RK3568嵌入式设备低功耗设计中的常见误区,重点探讨唤醒源管理不当导致的意外唤醒问题。通过解析硬件设计陷阱、软件配置错误及系统化审计方法,帮助开发者有效排查和解决GPIO配置、唤醒源设置等关键因素引起的功耗异常,提升设备续航能力。

php55的博客 460

Docker Buildx使用教程:使用Buildx构建多平台镜像

记录一下前阵子在X86_64平台使用Docker Buildx构建多平台镜像的办法,包含但不限于构建ARM镜像。 安装qemu-user-static 通知Docker使用qemu 创建Buildx构建容器 当初始化成功,会拉下来moby/buildkit:buildx-stable-1的镜像,并启动构建容器。通过 docker ps 查看如下: 调整Dockerfile接收平台相关参数 同时构建X86...

拾级而上 1万+

解决redhat8/centos8无法使用yum问题(报错:This system is not registered to Red Hat Subscription Management)

解决redhat无法使用yum问题、以及替换repo文件后仍无法使用yum的问题

qq_43569119的博客 4342

VTJ.PRO私有化部署全攻略:从Docker Compose到生产环境运维

容器化技术是现代应用开发和部署的核心,它通过将应用及其依赖打包成标准单元,实现了环境一致性和快速部署。其原理基于操作系统级虚拟化,利用命名空间和控制组实现资源隔离。这项技术的价值在于显著提升了开发效率、保证了环境一致性,并简化了持续集成与部署流程。在应用场景上,容器化广泛用于微服务架构、DevOps流水线以及云原生应用部署。本文聚焦于如何将一站式应用开发平台VTJ.PRO进行私有化部署,深入探讨基于Docker Compose的架构设计、环境配置、以及生产环境下的运维监控与故障排查,为中小型团队构建安全、可

weixin_33749131的博客 440

基于LORA的双机通信的智能农业系统

通过LoRa模块与主机进行通信,监测环境中的温度、湿度、土壤湿度和光照强度等参数,并根据预设的自动控制逻辑或者手动指令控制继电器开关,从而调节风扇、加热器、水泵、喷雾器和灯光等设备,为植物提供适宜的生长环境。使用的Lora是大夏龙雀的感觉这个是我使用过的Lora里面最好用的,因为不用设置频道就可以直接透明传输,使用起来得心应手。就像两个单片机直接串口通信一样,缺点是异步串行,不能同时进行接收和发送。继电器灯亮模拟打开对应的风扇、水泵、灯、喷雾、加热。1.使用温度传感器测当前环境的温湿度。

ssjsjss的博客 1739

SAP MM自动化进阶:STO交货单自动创建的配置与优化

本文深入解析了SAP MM模块中实现公司间库存调拨订单(STO)交货单自动创建的完整配置流程与优化策略。通过激活自动交货与绑定发货点两大核心配置,打通自动化链路。重点探讨了如何集成ATP可用性检查以智能处理库存不足等异常场景,确保自动化流程的可靠性与业务贴合度,并提供了进阶监控与问题排查方法,助力企业显著提升供应链效率。

weixin_29206669的博客 124

Docker镜像加速全攻略:2026实测可用源与配置避坑指南

容器镜像拉取是日常开发与运维中的基础操作,但跨网访问Docker Hub常常因链路不稳定导致超时。Docker镜像加速通过registry mirror机制,在本地与上游仓库间引入缓存层,既提升热门镜像的获取速度,也缓解匿名拉取限流问题。实际配置中,涉及Docker Desktop的图形界面、Linux服务器的daemon.json、以及Kubernetes环境下containerd的mirrors配置,不同运行时需采用不同的设置方式。同时,镜像源的可用性变化很快,定期验证、熟悉故障排查方法、掌握自建镜像缓

weixin_34208283的博客 441

PCL 点云加权均值收缩

PCL 点云加权均值收缩

dayuhaitang1的博客 688

Docker镜像更新全攻略:从分层缓存到可回滚的工程实践

Docker镜像构建与更新是容器化开发的基础操作,其核心原理在于分层缓存机制与Dockerfile指令顺序设计。合理利用缓存可大幅提升构建效率,而多阶段构建与镜像瘦身技术则能有效控制镜像体积。在工程实践中,规范的tag策略与可追溯性设计保障了镜像更新的可回滚性,结合.dockerignore与构建参数优化,可显著提升发布流程的可靠性与安全性。这些技术价值最终体现在持续集成、多环境部署与生产运维等应用场景中。本文围绕镜像内容更新的完整链路,深入剖析从Dockerfile分层设计到推送回滚的工程实践要点。

weixin_32183107的博客 107

信号处理算法:自适应滤波_(8).自适应陷波器

自适应陷波器是一种强大的工具,广泛应用于电力系统、通信系统和生物医学信号处理等领域。通过自适应调整滤波器的参数,自适应陷波器可以在特定频率处形成陷波,从而有效地抑制噪声或干扰信号。常见的自适应算法包括LMS和RLS,它们各有优缺点,可以根据实际需求选择合适的算法。

2401_87715305的博客 1371

多模态目标检测综述介绍及框架提供

多模态目标检测是计算机视觉领域的前沿方向,旨在通过融合不同传感器或数据源的信息(如可见光、红外、深度等),提升复杂场景下目标检测的准确性和鲁棒性。

Limiiiing的博客 4588

Docker镜像离线迁移全攻略:从基础导出到高阶优化实践

容器化技术通过封装应用及其依赖,实现了环境一致性,其核心原理基于镜像的分层存储与联合文件系统。这一机制在DevOps实践中极大提升了部署效率与可移植性。在无法连接外部镜像仓库的内网或隔离生产环境中,如何可靠地迁移Docker镜像成为关键挑战。通过`docker save`和`docker load`命令进行镜像的导出与加载,构成了离线迁移的技术基础。其价值在于保障部署流程在内网环境下的顺畅与稳定,是持续集成与交付链路中的重要环节。本文聚焦于这一通用场景,深入解析了包括文件传输、完整性校验及空间预检在内的全流

weixin_34197488的博客 466

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

OpenClaw智能体框架生产级单机部署全攻略:从Docker编排到高可用架构

智能体框架是构建能够理解指令、使用工具并执行多步骤任务AI应用的核心技术。其原理在于通过模块化设计,将复杂的逻辑推理、工具调用和工作流编排能力封装成可复用的组件,从而降低开发门槛。在工程实践中,智能体框架的技术价值体现在快速集成外部API、处理复杂业务逻辑以及构建自动化流程上,广泛应用于知识库问答、自动化客服和业务流程自动化等场景。本文将聚焦于OpenClaw这一开源框架,深入探讨其在生产环境中的单机部署方案。通过Docker和Docker Compose实现服务编排,结合PostgreSQL、Redis、

weixin_33696822的博客 461

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

VC中sqlite的使用

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

ImHex 安装与编译完全指南:官方发行包、包管理器与跨平台源码构建

> 本文是 ImHex(面向逆向工程师、程序员与深夜工作者的十六进制编辑器)的安装全攻略,覆盖 Windows / macOS / Linux 三大平台的官方发行包安装、Flatpak / Snap / DEB / RPM / AUR 等包管理器安装,以及从源码跨平台编译的完整步骤。读完本文,你将能够根据自身平台与场景选择最合适的安装方式,并掌握基于 CMake 与 Ninja 的源码构建流程、依

gitblog_00746的博客 379

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Linux下Docker安装全攻略:三种方式与CentOS/Ubuntu实战

容器化部署中,Docker安装是基础且关键的环节。其原理是通过包管理器集成官方软件源,确保依赖自动处理与版本可控。技术价值在于提升环境一致性与可维护性,适用于生产服务器、开发测试及内网离线等场景。针对CentOS与Ubuntu两大发行版,仓库安装、便捷脚本和离线包三种方式各有取舍,合理选型能有效避免源配置错误、依赖冲突等常见问题,实现从安装到验证的规范化流程。

weixin_33483304的博客 222

全能Agent实战:AI Skills设计与腾讯云部署全攻略

AI Agent作为大模型技术的重要应用方向,正在从单纯的对话助手向具备自主规划与工具调用的全能型智能体演进。其核心原理在于通过任务拆解、工具调用与记忆管理,让模型能够执行多步骤复杂操作。而AI Skills作为连接模型与外部能力的标准单元,通过统一的输入输出定义和灵活的注册机制,为Agent提供了可复用的技能模块,显著提升了系统的扩展性和容错性。在实际工程落地中,结合云原生技术实现稳定部署尤为关键,腾讯云提供的容器镜像服务与CVM资源为Agent的规模化运行提供了可靠基础设施。本文从需求拆解到Skill设

weixin_34248705的博客 300

ARM架构与交叉编译全攻略:从指令集选型到镜像部署与故障排查

在嵌入式开发、云原生与工控场景中,ARM处理器凭借低功耗和高集成度已成为主流选择。理解ARM体系架构需分清指令集、微架构与SoC三层关系,Cortex-A/R/M系列分别对应Linux、实时控制与低功耗IoT等不同需求。交叉编译是ARM开发的核心环节,选择arm-none-eabi、aarch64-linux-gnu等工具链时需关注ABI、浮点及glibc版本匹配,通过CMake配置工具链文件可高效产出目标平台二进制。系统部署环节涉及镜像格式选型、Docker多架构拉取、JDK与QT等软件栈适配,常见Exe

weixin_34175509的博客 627

Freerouting 开发指南深度解析:从 AGENTS.md 看 PCB 自动布线项目的工程纪律

Freerouting 的 [AGENTS.md](https://link.gitcode.com/i/bb82fbf2e89ce2dd250f15d2834339b4) 是这个 Java PCB 自动布线项目面向 AI 代理与维护者的核心开发准则文档,集中定义了技术栈、架构边界、设置系统不变量、DRC/铜皮架构事实、测试工作流与质量门禁。读完全文,你将掌握 Freerouting 从构建命令、

gitblog_01182的博客 314

Docker Buildx最佳实践:多架构镜像构建指南

Docker Buildx作为官方提供的增强工具,使得开发者能够更简单、更高效地为不同架构创建一致的容器镜像,极大地提升了开发效率和应用的可移植性。它使得用户可以创建多平台(包括不同的CPU架构如AMD64、ARM等)的 Docker 镜像,并且支持更复杂的构建场景。随着技术的不断演进,我们期待Docker Buildx能带来更多创新功能,继续推动容器化技术和云原生应用的发展,帮助开发者更好地满足多样化的业务需求。:允许用户管理和使用多个 builder 实例,每个实例都可以配置为特定的构建选项集。

zzjlhlcd的博客 1916

docker使用buildx构建多平台(x86,arm64)构架镜像

buildx 可用于在单个平台上实现,跨 CPU 架构编译。 buildx 实现 依赖 QEMU (开源的模拟器),支持多种cpu 架构

atzqtzq的博客 1万+

Docker 组件:Docker Buildx

Docker Buildx 是 Docker 官方提供的一个用于扩展构建功能的 CLI 插件,基于 BuildKit 构建引擎,可以实现多平台镜像构建、更高效的缓存利用、并发构建等高级构建能力。它是对传统命令的增强和扩展,特别适用于现代多架构容器部署场景(如 x86_64 和 ARM64)。Docker Buildx 是现代化容器构建流程的关键工具,特别适合构建跨平台镜像和高效自动化构建场景。通过 Buildx,你可以最大化发挥 Docker 构建的性能,支持 DevOps 流程中的复杂需求。

x² 1645
上一篇: Dify环境变量优先级深度解析(90%开发者忽略的配置陷阱)
下一篇: 为什么你的Harbor复制总失败?,深入剖析复制规则配置陷阱
MessyInk
博客等级 码龄11年 136粉丝 1992原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值