我正在尝试为我的 CNN 创建一些很酷(并且至少有些有意义)的可视化,用于自动编码图像,因为我使用编码的中间层进行相似性比较。
即,我想要输入图像的视图,但如果有意义的话,可以使用某种“热图”或覆盖的东西来显示 CNN “关注”的内容。也许是某种梯度幅度,我在另一个 CNN 项目中看到了这个,例如类似于这个网站上的例子。
我怎么能为我的自动编码器做这个?网络是用 Keras 用 Python 编码的,我复制了下面的代码:
img = Input(shape=(IMG_W, IMG_H, IMG_C), name='input_img_')
network = Convolution2D(CONV_0, 3, 3, activation='elu', border_mode='same', name='conv_0_e')(img)
network = MaxPooling2D((2, 2), border_mode='same')(network)
network = Convolution2D(CONV_1, 3, 3, activation='elu', border_mode='same', name='conv_1_e')(network)
network = MaxPooling2D((2, 2), border_mode='same')(network)
network = Convolution2D(CONV_2, 3, 3, activation='elu', border_mode='same', name='conv_2_e')(network)
network = MaxPooling2D((2, 2), border_mode='same')(network)
network = Convolution2D(CONV_3, 3, 3, activation='elu', border_mode='same', name='conv_3_e')(network)
encoded = MaxPooling2D((2, 2), border_mode='same', name='encoded')(network)
network = Convolution2D(CONV_1, 3, 3, activation='elu', border_mode='same', name='conv_0_d')(encoded)
network = UpSampling2D((2, 2))(network)
network = Convolution2D(CONV_1, 3, 3, activation='elu', border_mode='same', name='conv_1_d')(network)
network = UpSampling2D((2, 2))(network)
network = Convolution2D(CONV_2, 3, 3, activation='elu', border_mode='same', name='conv_2_d')(network)
network = UpSampling2D((2, 2))(network)
network = Convolution2D(IMG_C, 3, 3, activation='elu', border_mode='same', name='conv_decoded')(network)
decoded = UpSampling2D((2, 2))(network)
model_inputs = img
model_outputs = decoded
model = Model(input=model_inputs, output=model_outputs)
model.compile(loss='binary_crossentropy', optimizer='adadelta')
这个问题有点开放,我认为本身没有“正确答案”,但我对如何可视化网络正在做什么的创造性想法持开放态度。讨厌这样说,但我正在寻找一些我会向外行展示的东西,他们会像“哇,看看那个 AI go”哈哈。但说真的,这就是我在这里寻找的东西。也许是特征图的拼贴图像?让我知道你的想法,我非常感谢任何示例代码!

