相关疑难解决方法(0)

通过嵌套 tf.map_fn 反向传播梯度

我想在与维度为[batch_size, H, W, n_channels]的矩阵中每个像素的深度通道相对应的每个向量上映射一个 TensorFlow 函数。

换句话说,对于批次中大小为H x W的每个图像:

  1. 我提取一些具有相同大小H x W的特征图F_k (其数量为 n_channels) (因此,特征图一起是形状为[H, W, n_channels]的张量;
  2. 然后,我希望将自定义函数应用于与每个特征图F_k的第 i行和第 j列相关联的向量v_ij,但探索整个深度通道(例如v的尺寸为[1 x 1 x n_channels])。理想情况下,所有这些都会并行发生。

下面有一张解释该过程的图片。与图片的唯一区别是输入和输出“感受野”的大小均为 1x1(独立地将函数应用于每个像素)。

在此输入图像描述

这类似于对矩阵应用 1x1 卷积;但是,我需要在深度通道上应用更通用的函数,而不是简单的求和运算。

我认为tf.map_fn()可能是一个选项,我尝试了以下解决方案,其中我递归地使用tf.map_fn()来访问与每个像素相关的功能。然而,这种似乎不是最优的,最重要的是,它在尝试反向传播梯度时会引发错误

您知道发生这种情况的原因以及我应该如何构建代码以避免错误吗?

这是我当前对该功能的实现:

import tensorflow as tf
from tensorflow import layers


def apply_function_on_pixel_features(incoming):
    # at first the input is [None, W, H, n_channels]
    if len(incoming.get_shape()) > 1: …
Run Code Online (Sandbox Code Playgroud)

gradient nested backpropagation map-function tensorflow

5
推荐指数
1
解决办法
1067
查看次数