具有K.function的keras上的多输入梯度计算

时间:2017-02-10 16:04:52

标签: tensorflow visualization keras backpropagation

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

if(strpos(fgets($myfile), 'ROTTEN') !== false){
    echo "<img src='https://webster.cs.washington.edu/images/rotten.gif' alt='Rotten' />";
}else{
    echo "<img src='https://webster.cs.washington.edu/images/fresh.gif' alt='Fresh' />";
};

计算此损失的输入图像的梯度

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

此函数返回给定输入图片的损失和梯度

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

我想计算具有fout头输入的暹罗NN的渐变,但是当我应用上面的K函数时,我得到一个形状为iterate = K.function(input_imgs, [grads]) 的渐变张量,当我想要的是(1, 3, 227, 227)时。

我能做些什么来获得正确的渐变?

1 个答案:

答案 0 :(得分:0)

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

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

iterate

现在,当您使用(1, 3, 227, 227)时,它会为您提供每个形状{{1}}

的列表