python - 去除卷积层过滤器
问题描述
对于 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 输出量中:
- 过滤器/内核映射 = (3, 3)
- 输入量 = 3(第三个索引)
- 当前卷积层中应用的过滤器/内核映射数 = 32
据我了解,每个过滤器都有体积 (3, 3, 3),因为每个过滤器都延伸到整个输入体积。如果我错了,请纠正我。
如果我需要从这 32 个过滤器中删除前 5 个过滤器,请使用代码
conv.weights[0][:, :, :, :5] = 0
它给了我错误:
TypeError:“ResourceVariable”对象不支持项目分配
从这个转换层中删除这些过滤器的正确方法是什么?
谢谢
解决方案
推荐阅读
- flutter - Flutter - 在应用程序内打开特定应用程序的商店/市场屏幕
- php - 如何使用此代码的替代方法?我试图从我的数据库中为访问我的页面的每个用户提供不同的数字
- kerberos - 阿帕奇长凳。带有 Kerberos 身份验证的 API
- flutter - 在颤动中减小图像大小
- javascript - JS addEventListener 并非所有事件都被捕获
- blazor - Blazor 命名范围依赖注入
- c++ - 从基类指针克隆派生类
- php - 致命错误:未捕获异常:FPDF 错误:一些数据已经输出,无法发送 PDF 文件(输出开始于
- google-app-engine - 将 MERN 堆栈应用程序部署到 GAE 标准环境的问题
- python - 线性回归 Python - 不合适