我在Python中使用了以下代码:
import matplotlib.pyplot as plt
import tensorflow as tf
from tf_keras_vis.activation_maximization import ActivationMaximization
def get_conv(in_model):
target_layer = in_model.get_layer(name="block5_conv3")
new_model = tf.keras.Model(inputs=in_model.inputs, outputs=target_layer.output)
new_model.layers[-1].activation = tf.keras.activations.linear
return new_model
def get_score(output):
outputs = [o[0] for o in output]
return outputs
model = tf.keras.applications.vgg16.VGG16()
vis = ActivationMaximization(model, get_conv)
seed = tf.random.uniform((1, *model.input.shape[1:]), 0, 255)
maps = vis(get_score, seed)
plt.imshow(maps[0])
plt.show()我得到的是:

我想知道为什么在图像的下半部有一个巨大的平面图像区域。
发布于 2021-01-26 06:45:23
我自己回答,因为这可能对其他人有帮助。
错误在这一行中:
outputs = [o[0] for o in output]我从稠密层可视化代码中复制和粘贴了它,在正确的地方,选择了类0进行可视化。在这里,它没有错,但是它所做的是在所有过滤器(而不是该层的第一个过滤器)中选择该conv层的顶部行。因此,在顶部行附近有许多小规模的特征,在中间有更多的大尺度特征,而在底部没有比这更大的特征。我相信这可能很好地可视化了网络的感知领域。
为了记录在案,
outputs = [o[:, :, 0] for o in output]预期产量。
https://datascience.stackexchange.com/questions/88482
复制相似问题