ResNet的tf-slim实施中的权重共享

问题描述

我正在尝试应用此处描述的第一种技术(https://arxiv.org/abs/1510.00149)。 基本上,我想减轻resnet卷积网络的负担,修改权重的存储和使用方式-简而言之,我想将每个权重矩阵转换为索引矩阵,其中每个索引对应于k个值的向量,其中每个这些值是原始矩阵在k个簇上的质心。

为此,我需要更改每个权重的存储方式以及用于卷积的方式。我通过Tensorflow中实现的一个小型CNN做到了这一点,因为使用tf.nn.Conv2dhttps://www.tensorflow.org/versions/r1.15/api_docs/python/tf/nn/conv2d)的操作,您直接传递了TF用于卷积的权重。

现在的问题是,我也在尝试使用tf-slim(https://github.com/google-research/tf-slim/tree/8f0215e924996d7287392241bc8d8b1133d0c5ca)将此方法应用于resnet实现,在该实现中,每个卷积运算都使用tf.python应用于模型中。图层(https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/layers/Conv2D)-在这方法中,您无权访问权重矩阵,只需将输入和要应用的过滤器数量(当然还有其他参数)传递给Tensorflow,函数将仅返回卷积的结果,从而将Tensorlfow自动存储和训练的部分权重隐藏起来。

问题是:如何获得它?有没有办法介入这种卷积的实现部分?我只需要找到一种方法即可找到将实际权重矩阵传递给函数方法

谢谢。

p.s。只是给您一些代码和具体示例:我想以某种方式转换此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)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)