首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在火炬中实现LeNet

在火炬中实现LeNet
EN

Stack Overflow用户
提问于 2019-12-08 01:25:45
回答 1查看 535关注 0票数 2

如果这个问题非常基本的话,很抱歉。我觉得网上有丰富的资源,但大多数都是半完整的,或者跳过了我想知道的细节。

我正在尝试用毕火炬来实现LeNet以供实践。

https://pytorch.org/tutorials/beginner/blitz/neural_networks_tutorial.html

  • 为什么在这个例子和许多在线例子中,定义了init中的卷积层和fc层,而在前向中定义了次采样和激活函数?
  • 用于某些函数的目的是什么,对其他函数使用torch.nn是什么目的?例如,您有卷积与torch.nn (https://pytorch.org/docs/stable/nn.html#conv1d)和卷积与torch.nn.functional (https://pytorch.org/docs/stable/nn.functional.html#conv1d)。为什么要选择其中一种呢?
  • ,假设我想尝试不同的图像大小,比如28x28 (MNIST)。本教程建议我调整MNIST的大小。是否有一种方法来代替改变LeNet的值?如果我不改变它们,会发生什么?

  • ,num_flat_features的目的是什么?如果你想使特性变平,你就不能做x= x.view(-1,16*5*5)吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-08 02:16:01

为什么在这个例子和许多在线例子中,定义了init中的卷积层和fc层,而在前向定义了次采样和激活函数?

任何具有可训练参数的层都应该在__init__中定义。二次抽样、某些激活、辍学等没有任何可训练的参数,因此可以在__init__中定义,也可以在forward期间通过torch.nn.functional接口直接使用。

某些函数使用torch.nn.functional,其他函数使用torch.nn的目的是什么?

torch.nn.functional函数是在大多数torch.nn层的核心使用的实际函数,它们调用C++编译代码。例如,nn.Conv2d子类nn.Module,任何包含可训练参数的自定义层或模型都应该这样做。该类处理注册参数,并封装培训和测试所需的其他一些必要功能。在forward过程中,实际使用nn.functional.conv2d进行卷积运算。正如第一个问题中提到的,在执行像ReLU这样的无参数操作时,使用nn.ReLU类和nn.functional.relu函数实际上没有区别。

他们被提供的原因是他们给了一些做非常规事情的自由。例如,在我前几天写的this answer中,提供一个没有nn.functional.conv2d的解决方案是很困难的。

,假设我想尝试不同的图像大小,比如28x28 (MNIST)。本教程建议我调整MNIST的大小。是否有一种方法来代替改变LeNet的值?如果我不换呢?

没有明显的方法来改变现有的,经过训练的模型,以支持不同的图像大小。线性层输入的大小必然是固定的,模型中该点的特征数通常取决于网络输入的大小。如果输入的大小与模型设计的大小不同,那么当数据进展到线性层时,它将有错误的元素数并导致程序崩溃。有些模型可以处理一系列的输入大小,通常在线性层之前使用nn.AdaptiveAvgPool2d层来确保线性层的输入形状总是相同的。即便如此,如果输入图像大小太小,则网络中的下采样和/或池操作将导致特征映射在某个点消失,导致程序崩溃。

num_flat_features的目的是什么?如果您想将特性扁平化,就不能只做x= x.view(-1,16*5*5)吗?

当你定义线性层时,你需要告诉它权重矩阵有多大。线性层的权值只是一个无约束矩阵(和偏置向量)。因此,权重矩阵的形状由输入形状决定,但在向前运行之前不知道输入形状,因此在初始化模型时需要将其作为附加参数(或硬编码)提供。

去问真正的问题。是的,在forward期间您可以简单地使用

代码语言:javascript
复制
x = x.view(-1, 16*5*5)

更好的,使用

代码语言:javascript
复制
x = torch.flatten(x, start_dim=1)

本教程是在将.flatten函数添加到库之前编写的。作者实际上只是编写了他们自己的扁平功能,不管x的形状如何,都可以使用它。这可能是因为您有一些可移植的代码,可以在您的模型中使用,而无需编写硬编码。从编程的角度来看,泛化这些东西是很好的,因为这意味着如果您决定更改模型的一部分,就不必担心更改这些神奇的数字(尽管这种关注似乎没有扩展到初始化)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59231709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档