首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的CNN激活最大化垂直分裂?

为什么我的CNN激活最大化垂直分裂?
EN

Data Science用户
提问于 2021-01-26 06:41:16
回答 1查看 23关注 0票数 0

我在Python中使用了以下代码:

代码语言:javascript
复制
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()

我得到的是:

我想知道为什么在图像的下半部有一个巨大的平面图像区域。

EN

回答 1

Data Science用户

发布于 2021-01-26 06:45:23

我自己回答,因为这可能对其他人有帮助。

错误在这一行中:

代码语言:javascript
复制
outputs = [o[0] for o in output]

我从稠密层可视化代码中复制和粘贴了它,在正确的地方,选择了类0进行可视化。在这里,它没有错,但是它所做的是在所有过滤器(而不是该层的第一个过滤器)中选择该conv层的顶部行。因此,在顶部行附近有许多小规模的特征,在中间有更多的大尺度特征,而在底部没有比这更大的特征。我相信这可能很好地可视化了网络的感知领域。

为了记录在案,

代码语言:javascript
复制
outputs = [o[:, :, 0] for o in output]

预期产量。

票数 1
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/88482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档