首页 > 解决方案 > 去除卷积层过滤器

问题描述

对于 Python 3.8 和 TensorFlow 2.5.0,具有 32 个过滤器/内核映射的简单卷积层定义为:

conv = tf.keras.layers.Conv2D(
    filters = 32, kernel_size = (3, 3),
    strides = (1, 1), activation = 'relu',
    padding = 'same',
    kernel_initializer = tf.keras.initializers.glorot_normal(),
    use_bias = True
    )

这接受 CIFAR-10 数据集图像-

# Some random inputs having 3 RGB images of shape (32, 32, 3)-
x = tf.random.normal(mean = 0, stddev = 1, shape = (3, 32, 32, 3))

x.shape
# TensorShape([3, 32, 32, 3])

# Pass input through conv layer-
out = conv(x)

out.shape
# TensorShape([3, 32, 32, 32])

权重和偏差存储在 Python 列表变量“conv.weights”中。它们可以通过以下方式访问:

for param in conv.weights:
    print(f"parameter: {param.shape}")
'''
parameter: (3, 3, 3, 32)
parameter: (32,)
'''

在这个 (3, 3, 3, 32) 的 conv 输出量中:

  1. 过滤器/内核映射 = (3, 3)
  2. 输入量 = 3(第三个索引)
  3. 当前卷积层中应用的过滤器/内核映射数 = 32

据我了解,每个过滤器都有体积 (3, 3, 3),因为每个过滤器都延伸到整个输入体积。如果我错了,请纠正我。

如果我需要从这 32 个过滤器中删除前 5 个过滤器,请使用代码

conv.weights[0][:, :, :, :5] = 0

它给了我错误:

TypeError:“ResourceVariable”对象不支持项目分配

从这个转换层中删除这些过滤器的正确方法是什么?

谢谢

标签: pythonpython-3.xconv-neural-networktensorflow2.x

解决方案


推荐阅读