当前位置: 首页 > news >正文

动手学深度学习-深度学习计算-3延后初始化

目录

实例化网络

小结


到目前为止,我们忽略了建立网络时需要做的以下这些事情:

  • 我们定义了网络架构,但没有指定输入维度。

  • 我们添加层时没有指定前一层的输出维度。

  • 我们在初始化参数时,甚至没有足够的信息来确定模型应该包含多少参数。

有些读者可能会对我们的代码能运行感到惊讶。 毕竟,深度学习框架无法判断网络的输入维度是什么。 这里的诀窍是框架的延后初始化(defers initialization), 即直到数据第一次通过模型传递时,框架才会动态地推断出每个层的大小。

在以后,当使用卷积神经网络时, 由于输入维度(即图像的分辨率)将影响每个后续层的维数, 有了该技术将更加方便。 现在我们在编写代码时无须知道维度是什么就可以设置参数, 这种能力可以大大简化定义和修改模型的任务。 接下来,我们将更深入地研究初始化机制。

实例化网络

首先,让我们实例化一个多层感知机。

from mxnet import np, npx
from mxnet.gluon import nnnpx.set_np()def get_net():net = nn.Sequential()net.add(nn.Dense(256, activation='relu'))net.add(nn.Dense(10))return netnet = get_net()

此时,因为输入维数是未知的,所以网络不可能知道输入层权重的维数。 因此,框架尚未初始化任何参数,我们通过尝试访问以下参数进行确认。

print(net.collect_params)
print(net.collect_params())
<bound method Block.collect_params of Sequential( (0): Dense(-1 -> 256, Activation(relu)) (1): Dense(-1 -> 10, linear) )> sequential0_ ( Parameter dense0_weight (shape=(256, -1), dtype=float32) Parameter dense0_bias (shape=(256,), dtype=float32) Parameter dense1_weight (shape=(10, -1), dtype=float32) Parameter dense1_bias (shape=(10,), dtype=float32) )

注意,当参数对象存在时,每个层的输入维度为-1。 MXNet使用特殊值-1表示参数维度仍然未知。 此时,尝试访问net[0].weight.data()将触发运行时错误, 提示必须先初始化网络,然后才能访问参数。 现在让我们看看当我们试图通过initialize函数初始化参数时会发生什么。

net.initialize()
net.collect_params()
[07:01:36] ../src/storage/storage.cc:196: Using Pooled (Naive) StorageManager for CPU
sequential0_ (Parameter dense0_weight (shape=(256, -1), dtype=float32)Parameter dense0_bias (shape=(256,), dtype=float32)Parameter dense1_weight (shape=(10, -1), dtype=float32)Parameter dense1_bias (shape=(10,), dtype=float32)
)

如我们所见,一切都没有改变。 当输入维度未知时,调用initialize不会真正初始化参数。 而是会在MXNet内部声明希望初始化参数,并且可以选择初始化分布。

接下来让我们将数据通过网络,最终使框架初始化参数。

X = np.random.uniform(size=(2, 20))
net(X)net.collect_params()
sequential0_ ( Parameter dense0_weight (shape=(256, 20), dtype=float32) Parameter dense0_bias (shape=(256,), dtype=float32) Parameter dense1_weight (shape=(10, 256), dtype=float32) Parameter dense1_bias (shape=(10,), dtype=float32) )

一旦我们知道输入维数是20,框架可以通过代入值20来识别第一层权重矩阵的形状。 识别出第一层的形状后,框架处理第二层,依此类推,直到所有形状都已知为止。 注意,在这种情况下,只有第一层需要延迟初始化,但是框架仍是按顺序初始化的。 等到知道了所有的参数形状,框架就可以初始化参数。

小结

  • 延后初始化使框架能够自动推断参数形状,使修改模型架构变得容易,避免了一些常见的错误。

  • 我们可以通过模型传递数据,使框架最终初始化参数。

相关文章:

动手学深度学习-深度学习计算-3延后初始化

目录 实例化网络 小结 到目前为止&#xff0c;我们忽略了建立网络时需要做的以下这些事情&#xff1a; 我们定义了网络架构&#xff0c;但没有指定输入维度。 我们添加层时没有指定前一层的输出维度。 我们在初始化参数时&#xff0c;甚至没有足够的信息来确定模型应该包含…...

Linux | 零基础Ubuntu搭建JDK

目录 软件简介 在线文档 压缩包安装 下载地址 补:传输软件 传输等待 目录结构 解压安装 配置环境 更新环境 测试JDK结果 APT安装 软件简介 Java Development Kit (JDK) 是 Sun 公司&#xff08;已被 Oracle 收购&#xff09;针对 Java 开发员的软件开发工具包。自…...

Android `android.graphics` 包深度解析:架构与设计模式

Android android.graphics 包深度解析:架构与设计模式 目录 引言android.graphics 包概述核心类与架构 CanvasPaintBitmapColorPathShaderMatrix设计模式在 android.graphics 中的应用 工厂模式装饰者模式策略模式享元模式高级图形处理技术 硬件加速离屏渲染自定义 View 中的…...

WPF使用OpenCvSharp4

WPF使用OpenCvSharp4 创建项目安装OpenCvSharp4 创建项目 安装OpenCvSharp4 在解决方案资源管理器中&#xff0c;右键单击项目名称&#xff0c;选择“管理 NuGet 包”。搜索并安装以下包&#xff1a; OpenCvSharp4OpenCvSharp4.ExtensionsOpenCvSharp4.runtime.winSystem.Man…...

你不需要对其他成年人的情绪负责

在这个纷繁复杂的世界里&#xff0c;每个人都是独一无二的个体&#xff0c;背负着各自的故事、梦想与烦恼。在人际交往的广阔舞台上&#xff0c;我们时常会遇到这样的情境&#xff1a;朋友、同事、家人&#xff0c;甚至是陌生人&#xff0c;他们的情绪似乎总能不经意间影响到我…...

25秋招面试总结

秋招从八月底开始&#xff0c;陆陆续续面试了不少&#xff0c;现在也是已经尘埃落定&#xff0c;在这里做一些总结一些我个人的面试经历 腾讯 腾讯是我最早面试的一家&#xff0c;一开始捞我面试的是数字人民币&#xff0c;安全方向的岗位&#xff0c;属于腾讯金融科技这块。…...

高斯核函数(深入浅出)

目录 定义及数学形式主要特点应用示例小结 高斯核函数&#xff08;Gaussian Kernel&#xff09;&#xff0c;又称径向基核&#xff08;Radial Basis Function Kernel&#xff0c;RBF Kernel&#xff09;&#xff0c;是机器学习与模式识别中最常用的核函数之一。它通过在高维空间…...

支付宝百宝箱 工具,快速上手制作一个agent

作品&#xff1a;历史上的今天-作文素材积累 Datawhale 动手学AI Agent 关键词&#xff1a;AI助手开发、LangGPT框架 链接&#xff1a;百宝箱百宝箱平台是一款可以提供一站式 AI 原生应用的开发平台&#xff0c;您无需具有任何代码基础&#xff0c;只需通过自然语言即可三步完…...

六十:HTTP/2与gRPC框架

随着互联网技术的发展&#xff0c;应用程序之间的通信需求日益复杂和多样化。传统的HTTP/1.x协议虽然广泛应用&#xff0c;但在性能和功能方面已经难以满足现代应用的需求。为了解决这些问题&#xff0c;HTTP/2协议和基于其之上的gRPC框架应运而生。本文将介绍HTTP/2协议的特点…...

1.RPC基本原理

文章目录 RPC1.定义2.概念3.优缺点4.RPC结构5.RPC消息协议5.1 消息边界5.2 内容5.3 压缩 6.RPC的实现6.1 divide_protocol.py6.2 server.py6.3 client.py RPC 1.定义 远程过程调用(remote procedure call) 2.概念 广义:所有通过网络进行通讯,的调用统称为RPC调用 狭义:不采…...

vue2/3,Spring Boot以及生产环境跨域解决方案

vue2和vue3跨域解决方案 Vue 2 (基于 Webpack) 的跨域解决方案 1. 创建或编辑 vue.config.js 文件 Vue CLI为Webpack项目提供了简单的代理配置方式。你可以通过创建或编辑项目的根目录下的 vue.config.js 文件来设置开发服务器的代理规则&#xff1a; // vue.config.js mod…...

【centos8 镜像修改】centos8 镜像修改阿里云

要将 CentOS 8 的镜像源修改为阿里云镜像&#xff0c;你需要编辑 /etc/yum.repos.d/ 目录下的 .repo 文件。以下是具体的步骤&#xff1a; 备份原始的 .repo 文件&#xff1a; 在编辑之前&#xff0c;建议备份原始的 .repo 文件&#xff0c;以便在出现问题时可以恢复。 sudo cp…...

多线程编程初探:掌握基本概念与核心原理

目录 1 初识线程 1.1 线程的由来 1.2 线程的产生 1.3 进程 VS 线程 1.4 关于系统内部关于线程和进程的资源调度问题 2 页表、虚拟地址和物理地址 2.1 对物理地址的描述 2.2 对于页表设计的解析 3 线程的控制 3.1 进程创建 3.1.1 pthread_create 3.2 线程退出 3.2.1 主…...

【信息系统项目管理师】第13章:项目资源管理过程详解

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 一、规划资源管理1、输入2、工具与技术3、输出二、估算活动资源1、输入2、工具与技术3、输出三、获取资源1、输入2、工具与技术3、输出四、建设团队1、输入2、工具与技术3、输出五、管理团队1、输入2、工具与技…...

vue3封装而成的APP ,在版本更新后,页面显示空白

一、问题展示 更新之后页面空白&#xff0c;打不开 &#xff0c;主要是由于缓存造成的 二、解决办法 1、随机数代码实现 使用随机数来动态的生成静态资源目录名可以避免浏览器缓存&#xff0c;但同时每次也会导致浏览器每次都下载最新的资源。如果静态资源过大&#xff0c;可…...

GEE云计算、多源遥感、高光谱遥感技术蓝碳储量估算;红树林植被指数计算及提取

大气温室气体浓度不断增加&#xff0c;导致气候变暖加剧&#xff0c;随之会引发一系列气象、生态和环境灾害。如何降低温室气体浓度和应对气候变化已成为全球关注的焦点。海洋是地球上最大的“碳库”,“蓝碳”即海洋活动以及海洋生物&#xff08;特别是红树林、盐沼和海草&…...

【知识】cuda检测GPU是否支持P2P通信及一些注意事项

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 代码流程 先检查所有GPU之间是否支持P2P通信&#xff1b;然后尝试启用GPU之间的P2P通信&#xff1b;再次检查所有GPU之间是否支持P2P通信。 test.cu&…...

用 Python 生成功能强大的二维码工具(支持自定义颜色与 Logo)

在很多项目中&#xff0c;二维码作为一种便捷的方式传递信息越来越常见。今天&#xff0c;我们将介绍如何用 Python 编写一个功能更全的二维码生成工具&#xff0c;它不仅支持自定义二维码的颜色&#xff0c;还能在二维码中间添加 logo。 1. 环境准备 首先&#xff0c;我们需…...

RTX5 数据队列传输流程

1、首先获取当前内存是否有值 rptr = (net_mpool_t*)osMemoryPoolAlloc(id_mp_net,0U); 说明:通过相同的key,可以操作值。 2、设值到队列中 如果有值,则将rptr变量的值放入消息队列id_mp_net rptr->len = USART2_RxBfr[0]+1;memcpy (rptr->Recvbuf, &USART2_Rx…...

24.try块怎么用 C#例子

这是一个用英语写的try-catch例子 简单来说就是一个try&#xff0c;try里面的代码可能会出错&#xff0c;然后有两个catch&#xff0c;规定了具体的错误是什么 如果发生相应的错误&#xff0c;就会把错误信息存到err里&#xff0c;err.Message是一个字符串格式的提示信息&…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

Vite中定义@软链接

在webpack中可以直接通过符号表示src路径&#xff0c;但是vite中默认不可以。 如何实现&#xff1a; vite中提供了resolve.alias&#xff1a;通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言&#xff1a; 双亲委派机制对于面试这块来说非常重要&#xff0c;在实际开发中也是经常遇见需要打破双亲委派的需求&#xff0c;今天我们一起来探索一下什么是双亲委派机制&#xff0c;在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言&#xff1a; 类加载器 1. …...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...

自然语言处理——文本分类

文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益&#xff08;IG&#xff09; 分类器设计贝叶斯理论&#xff1a;线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别&#xff0c; 有单标签多类别文本分类和多…...