tensorflow - ResNet 的 tf-slim 实现上的权重共享
问题描述
我正在尝试应用此处描述的第一种技术(https://arxiv.org/abs/1510.00149)。基本上,我想减轻 ResNet 卷积网络,修改权重的存储和使用方式 - 简要地说,我想将每个权重矩阵转换为索引矩阵,其中每个索引对应于 k 个值的向量,其中每个这些值是原始矩阵给出的 k 个簇上的质心。
为此,我需要更改每个权重存储和用于卷积的方式。我通过在 Tensorflow 中实现的小型 CNN 做到了这一点,我之所以能够做到这一点,是因为通过 tf.nn.conv2d 的操作(https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/nn /conv2d ) 你直接传递 TF 将用于卷积的权重。
现在的问题是我也在尝试将此方法应用于使用 tf-slim 的 ResNet 实现(https://github.com/google-research/tf-slim/tree/8f0215e924996d7287392241bc8d8b1133d0c5ca),在这个实现中每个卷积操作改为使用 tf.python.layers ( https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/layers/Conv2D ) 在模型中应用 - 在这种方法中您无权访问权重矩阵,您只需将输入和要应用的过滤器数量(当然还有其他参数)传递给 Tensorflow,该函数将只返回卷积的结果,隐藏您的权重部分由 Tensorfow 自动存储和训练。
问题是:我怎样才能访问它?有办法解决这个卷积的实现部分吗?我只需要找到一种方法来将实际权重矩阵传递给函数。
谢谢你。
ps 只是给你一些代码和具体的例子:我想以一种我接受模型权重的方式转换这个 tf.slim.convolution 实现,并以一种恢复经典权重矩阵并传递它的方式更新它们到卷积。
layer = tf.layers.Conv2D(
filters=num_outputs,
kernel_size=kernel_size,
strides=stride,
padding=padding,
data_format=df,
dilation_rate=rate,
activation=None,
use_bias=not normalizer_fn and biases_initializer,
kernel_initializer=weights_initializer,
bias_initializer=biases_initializer,
kernel_regularizer=weights_regularizer,
bias_regularizer=biases_regularizer,
activity_regularizer=None,
trainable=trainable,
name=sc.name,
dtype=inputs.dtype.base_dtype,
_scope=sc,
_reuse=reuse)
outputs = layer.apply(inputs)
解决方案
推荐阅读
- angular - Angular Material Slider - 在不禁用滑块的情况下允许最小值
- flutter - 将错误显示为预期的“资产”是一个列表,但得到了 -assets/tulas1.jpg (字符串)。飘飘然
- javascript - 最大高度减小时最大高度转换不起作用
- ansible - 带有循环的 Ansible vmware_host_fact
- scala - Scala中泛型结构中的类型条件方法
- python - SparkSQL JDBC (PySpark) 到 Postgres - 创建表和使用 CTE
- java - 有没有办法将我所有重复的 VBox 重新组织成自定义 JavaFX 标记?
- sass - sass(CSS3)中的calc()问题
- android - 如何使用回收站视图创建类似于三星 One UI 的查看区域?
- python - 了解 pandas 应用循环行为