【发布时间】:2020-02-07 07:34:46
【问题描述】:
如果我有一个经过训练的模型,我想重新训练相同的模型,并从现有模型中删除一些过滤器/内核。例如
conv1 = tf.get_variable('conv1_1', shape=(11, 11, 3, 64), initializer=tf.contrib.layers.xavier_initializer()),
我想调整这个张量的大小,使其具有 (11, 11, 3, 20) 的形状,但名称和位置相同,意味着完全相同的变量。提前感谢您的帮助。
我已经尝试过tf.reshape,但它给了我不匹配 a 和 b 中的元素数量的错误
我也试过tf.assign(a,b, validate_shape=false)
self.weights = {
'conv1_': tf.get_variable('conv1_l1', shape=(11, 11, 3, 64), initializer=tf.contrib.layers.xavier_initializer()),
'conv2_': tf.get_variable('conv2_l1', shape=(7, 7, 64, 128), initializer=tf.contrib.layers.xavier_initializer())
}
【问题讨论】:
-
您是否尝试将预训练模型的权重转移到新模型。需要注意的是新模型的过滤器数量较少?
-
不是新型号。我想继续用一组新的内核/过滤器训练相同的模型
-
一旦你改变了过滤器的数量,它就不再是同一个模型了。架构发生了变化。你同意吗?
-
我认为架构是通过变量数量及其相互联系来定义的。变量的数量和它们的相互联系保持不变,这里的情况是重塑一个变量。即 'conv1_': tf.get_variable('conv1_l1', shape=(11, 11, 3, 64), initializer=tf.contrib.layers.xavier_initializer()) 是具有给定大小的单个变量,所以在保持这个的同时变量到位,以调整其形状。可能是我的观念不正确。对不起
-
不。变量的数量不一样,因为过滤器来自维度:(11, 11, 3, 64) -> (11, 11, 3, 20)。假设前 2 个维度是您的图像大小。这意味着您的过滤器组从 64 个过滤器减少到 20 个过滤器。因此,网络的设计发生了变化。我会告诉你架构(连接)保持不变。
标签: tensorflow machine-learning image-processing computer-vision