如何更新反卷积层的权重?

2024-04-28

我正在尝试开发一个反卷积层(或者准确地说是转置卷积层)。

在前向传递中,我进行了完全卷积(零填充卷积) 在向后传递中,我进行有效的卷积(没有填充的卷积)以将错误传递到前一层

偏差的梯度很容易计算,只需对多余维度进行平均即可。

问题是我不知道如何更新卷积滤波器的权重。梯度是多少?我确信这是一个卷积运算,但我不知道如何进行。我尝试对输入与错误进行有效的卷积,但无济于事。


反卷积解释

首先,反卷积is一个卷积层,仅用于不同的目的,即上采样(为什么它有用的解释在这张纸 http://arxiv.org/abs/1411.4038).

例如,这里有一个2x2输入图像(蓝色底部图像)被上采样为4x4(上图为绿色):

为了使其成为有效的卷积,首先对输入进行填充以使其6x6, 之后3x3无需跨步即可应用过滤器。就像普通的卷积层一样,你可以选择不同的填充/跨步策略 https://github.com/vdumoulin/conv_arithmetic生成您想要的图像尺寸。

向后传球

现在应该清楚,反卷积的反向传递是卷积层反向传递的部分情况,具有特定的步长和填充。我认为您已经完成了,但是这里有一个针对任何步幅和填充的幼稚(而且不是很有效)的实现:

# input: x, w, b, stride, pad, d_out
# output: dx, dw, db <- gradients with respect to x, w, and b

N, C, H, W = x.shape
F, C, HH, WW = w.shape
N, C, H_out, W_out = d_out.shape

x_pad = np.pad(x, pad_width=((0, 0), (0, 0), (pad, pad), (pad, pad)), mode='constant', constant_values=0)

db = np.sum(d_out, axis=(0, 2, 3))

dw = np.zeros_like(w)
dx = np.zeros_like(x_pad)
for n in xrange(N):
  for f in xrange(F):
    filter_w = w[f, :, :, :]
    for out_i, i in enumerate(xrange(0, H, stride)):
      for out_j, j in enumerate(xrange(0, W, stride)):
        dw[f, :, :, :] += d_out[n, f , out_i, out_j] * x_pad[n, :, i:i+HH, j:j+WW]
        dx[n, :, i:i+HH, j:j+WW] += filter_w * d_out[n, f, out_i, out_j]
dx = dx[:,:,1:H+1,1:W+1]

使用同样的方法可以更有效地完成im2col and col2im,但这只是一个实现细节。另一个有趣的事实:卷积运算(对于数据和权重)的向后传递又是一个卷积,但具有空间翻转的滤波器。

下面是它的应用方式(简单的 SGD):

# backward_msg is the message from the next layer, usually ReLu
# conv_cache holds (x, w, b, conv_params), i.e. the info from the forward pass
backward_msg, dW, db = conv_backward(backward_msg, conv_cache)
w = w - learning_rate * dW
b = b - learning_rate * db

正如您所看到的,它非常简单,只需要了解您正在应用相同的旧卷积。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何更新反卷积层的权重? 的相关文章

随机推荐

  • 使用 malloc() 为 const char 字符串动态分配内存

    我正在编写一个程序 该程序从 ini 文件读取值 然后将该值传递到接受 PCSTR 即 const char 的函数中 函数是getaddrinfo 所以 我想写PCSTR ReadFromIni 为了返回一个常量字符串 我计划使用分配内存
  • 放弃root权限

    我有一个以 root 身份启动的守护进程 因此它可以绑定到低端口 出于安全原因 初始化后我非常希望它放弃 root 权限 谁能指点我已知正确C 中的一段代码可以做到这一点 我阅读了手册页 研究了不同应用程序中的各种实现 它们都是不同的 其中
  • Chrome消息传递错误:尝试使用断开连接的端口对象

    我的 Chrome 扩展使用长期存在的 端口 对象在 内容脚本 和 弹出 页面之间传递消息 弹出窗口 能够向 内容脚本 事件监听器发送消息 但是 内容脚本 中的 端口 对象无法将消息发送到 弹出 页面 var port chrome ext
  • 在 AngularJS 中的控制器之间共享数据

    我学习了如何在控制器之间共享数据 但遇到了一些问题 我有这样的html视图 div div div div
  • Jmeter 下降的最佳方法?

    我们都知道 Jmeter 并不是最擅长在运行期间更改活动线程的数量 除非您喜欢并创建以不同时间间隔触发的单独线程组 有没有人想出一个好的解决方案来在测试结束时降低速度 例如 我从 50 个线程开始 在 30 分钟内我想要 0 个活动线程 查
  • 使用不同时区的 POSIXct 到数字

    我想我一定不明白 POSIXct 是如何工作的 或者什么的 据我了解 它是自纪元以来的秒数 纪元是标准时间 例如 1970 01 01 GMT 我取两个 POSIXct 时间 一个在 EST 一个在 PST 它们是相同的绝对时间 然而 当我
  • 用于搜索内部文件的 ssh 命令

    几周前 我的两个网站可能被 ftp 暴力攻击所利用 破坏了我网站的许多文件 我发现他们通常会在js或php文件中插入以下代码 Trojan code removed as irrelevant to this question 我想通过 s
  • AWS Glue 爬网程序更改 serde

    我有带引号字符串的 csv 默认情况下爬虫会使用 LazySimpleSerde 注册该表 无论如何 我可以通过编程方式更改它以使用 OpenCSVSerde 吗 您可以使用 boto3 它是一个 aws sdk 您可以使用 python
  • 如何在 Docker 容器内动态添加 Jenkins 用户和权限

    当我为 python 项目构建声明式 Jenkins 管道时 使用 Pip 时收到以下错误消息 WARNING The directory cache pip or its parent directory is not owned or
  • Chart.js 刻度线和 X 轴之间的空间

    我正在使用 Chart js 版本 3 x 制作一个简单的画布 它只是显示价格的演变 X 轴用于时间 Y 轴用于进化百分比 我已经成功做到了这一点 但现在 我想添加一些风格 我的目标是在标记刻度和 X 轴之间添加一些空间 我用过chart
  • 无法打开 mysql-workbench

    我开始使用 mysql 但无法打开 mysql workbench 当我尝试通过 ubuntu 命令行打开它时 出现以下错误 usr lib mysql workbench mysql workbench bin 符号查找错误 usr li
  • NodeJS 的续集:支持这些功能吗?

    以下是关于sequelize支持的功能的一些问题 续集项目网站 http sequelizejs com 在决定是否使用它之前我想澄清一下 链接 效率 当链接多个查询时 这些查询是收集到对数据库的一个请求中 作为一批操作 还是每个请求单独发
  • fs.readFileSync 不是文件相关的? Node.js

    假设我的项目根目录下有一个名为file xml 假设我在tests 中有一个名为 test js 的测试文件 它有 const file fs readFileSync file xml 如果我现在跑步node tests test js从
  • 以编程方式强制 Cocoa 应用程序以 32 位模式启动

    我有一个 Cocoa 应用程序 通常在任何支持此架构的 Mac 上以完整 64 位模式运行 现在我有一个外部 API 只能作为 32 位插件加载到主程序中 该 API 适用于第三方输入设备 只有一小部分用户会购买该设备 但这对于那一小部分用
  • wpf 多重绑定到视图模型?

    如何向 xaml 中的多个视图模型对象添加多重绑定 我需要绑定IsEnabled上下文菜单的属性为我的视图模型中的两个整数 以下绑定不起作用 因为它是为 GUI 组件设计的 我该如何做才能与我的ints一起工作
  • 获取给定月份的所有日期和日期

    想要检索给定月份的所有日期和日期 目前有这个显示当月的所有天数 但我如何解析指定的月份 list array for d 1 d lt 31 d time mktime 12 0 0 date m d date Y if date m ti
  • Spring Boot可执行jar结构

    我正在尝试运行 Spring Boot 示例应用程序 我在 webapp 文件夹下的 images 文件夹中添加了几张图像 与 WEB INF 同一级别 我创建了可执行 jar 这些图像在网页上正确显示 但是 我很困惑 可执行 jar 中的
  • 如何导出 WAS 6.1 服务器配置

    有没有一种方法可以从 WAS 在 RAD 6 下运行 导出我的服务器设置 以便其他开发人员能够使用相同的脚本来设置他们的环境 要手动执行此操作 请在RAD 6 x 只需右键单击 服务器 视图中的服务器名称并选择以下选项之一 Export s
  • 文件在 rpm 规范文件中列出两次

    我的规范文件的文件部分如下所示 files prefix htdocs config prefix htdocs share settings config inc php 现在 由于配置文件已经包含在 prefix htdocs 我收到警
  • 如何更新反卷积层的权重?

    我正在尝试开发一个反卷积层 或者准确地说是转置卷积层 在前向传递中 我进行了完全卷积 零填充卷积 在向后传递中 我进行有效的卷积 没有填充的卷积 以将错误传递到前一层 偏差的梯度很容易计算 只需对多余维度进行平均即可 问题是我不知道如何更新