【问题标题】:Multi-input gradients calculation on keras with K.function使用 K.function 在 keras 上计算多输入梯度
【发布时间】:2017-06-29 01:21:03
【问题描述】:

这个 model.input 是一个四头占位符,大小为 (3, 227, 227)

input_imgs = model.input
loss = K.max(layer_dict[layer_name].output[p[0]])

根据这个损失计算输入图片的梯度

grads = K.gradients(loss, input_imgs)[0]

这个函数返回给定输入图片的loss和grads

iterate = K.function(input_imgs, [grads])

我想计算带有 fout 头输入的连体 NN 的梯度,但是当我应用上述 K 函数时,我得到一个形状为 (1, 3, 227, 227) 的梯度张量,而我想要的是 (4, 3, 227, 227)

如何获得正确的渐变?

【问题讨论】:

    标签: tensorflow visualization keras backpropagation


    【解决方案1】:

    我看到您正在尝试生成显着性图。

    检查 input_imgs 张量的形状。这就是决定渐变形状的原因。我的猜测是 input_imgs 是一个张量列表,并且在 grads = K.gradients(loss, input_imgs)[0] 中,因为您正在索引到 0,所以您正在删除列表中的所有其他渐变。所以这可能会解决你的问题:

    grads = K.gradients(loss, input_imgs)
    iterate = K.function(input_imgs, grads)
    

    现在,当您使用 iterate 时,它会为您提供一个包含 4 个形状的列表 (1, 3, 227, 227)

    【讨论】:

    • 当我这样做时,我得到了 Can 'not convert a NoneType into a Tensor or Operation.'
    • 您需要比这更具体。你在哪一行得到错误。但是这个问题应该很容易解决。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    相关资源
    最近更新 更多