Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
d2l-zh
提交
35fb8b0d
D
d2l-zh
项目概览
OpenDocCN
/
d2l-zh
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
d2l-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
35fb8b0d
编写于
5月 23, 2018
作者:
M
muli
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix typo
上级
b4c09a30
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
3 addition
and
3 deletion
+3
-3
chapter_convolutional-neural-networks/resnet.md
chapter_convolutional-neural-networks/resnet.md
+3
-3
未找到文件。
chapter_convolutional-neural-networks/resnet.md
浏览文件 @
35fb8b0d
...
...
@@ -9,7 +9,7 @@ ResNet [1] 成功增加跨层的数据线路来允许梯度可以快速的到达
ResNet的基础块叫做残差块。如下图所示,它将层A的输出在输入给层B的同时跨过B,并和B的输出相加作为下面层的输入。它可以看成是两个网络相加,一个网络只有层A,一个则有层A和B。这里层A在两个网络之间共享参数。在求梯度的时候,来自层B上层的梯度既可以通过层B也可以直接到达层A,从而使得层A可以更容易获取足够大的梯度来进行模型更新。
![
残差
快
(左)和它的分解(右)
](
../img/resnet.svg
)
![
残差
块
(左)和它的分解(右)
](
../img/resnet.svg
)
ResNet沿用了VGG全$3
\t
imes 3$卷积层设计。残差块里首先是两次有同样输出通道的$3
\t
imes 3$卷积层,每个卷积层后跟一个批量归一化层和ReLU激活层。然后我们将输入跳过这两个卷积层后直接加在最后的ReLU激活层前。这样的设计要求这两个卷积层的输出都保持跟输入形状一样来保证相加可以进行。如果想改变输出的通道数,我们则引入一个额外的$1
\t
imes 1$卷积层来将输入变换成需要的形状后再相加。
...
...
@@ -26,11 +26,11 @@ from mxnet.gluon import nn
class Residual(nn.Block):
def __init__(self, num_channels, use_1x1conv=False, strides=1, **kwargs):
super(Residual, self).__init__(**kwargs)
self.conv1 = nn.Conv2D(num_channels, kernel_size=3, padding=1,
self.conv1 = nn.Conv2D(num_channels, kernel_size=3, padding=1,
strides=strides)
self.conv2 = nn.Conv2D(num_channels, kernel_size=3, padding=1)
if use_1x1conv:
self.conv3 = nn.Conv2D(num_channels, kernel_size=1,
self.conv3 = nn.Conv2D(num_channels, kernel_size=1,
strides=strides)
else:
self.conv3 = None
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录