如何解决去除卷积层过滤器
对于 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,3))
x.shape
# TensorShape([3,3])
# Pass input through conv layer-
out = conv(x)
out.shape
# TensorShape([3,32])
权重和偏差存储在 Python 列表变量“conv.weights”中。它们可以通过以下方式访问:
for param in conv.weights:
print(f"parameter: {param.shape}")
'''
parameter: (3,3,32)
parameter: (32,)
'''
在这个 (3,32) 的 conv 输出量中:
- 过滤器/内核映射 = (3,3)
- 输入量 = 3(第三个索引)
- 在当前卷积层中应用的过滤器/内核映射数 = 32
根据我的理解,每个过滤器都有音量 (3,3),因为每个过滤器都延伸到整个输入音量。如果我错了,请纠正我。
如果我需要从这 32 个过滤器中删除前 5 个过滤器,请使用代码
conv.weights[0][:,:,:5] = 0
它给了我错误:
TypeError: 'ResourceVariable' 对象不支持项目分配
从这个转换层移除这些过滤器的正确方法是什么?
谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。