在tensorflow / models / slim / nets中,这是vgg的相对片段的链接。我很好奇为什么slim.nets.vgg使用conv2d而不是full_connected图层,虽然它实际上以相同的方式工作?这是为了速度吗? 我很感激一些解释。谢谢!
答案 0 :(得分:1)
过了一段时间,我认为至少有一个原因可以避免权重转换错误。
Tensorflow / slim以及其他高级库允许张量格式默认为BHWC
(batch_size,height,width,channel。相同如下)或BCHW
(为了更好的性能)。< / p>
在这两种格式之间转换权重时,第一个fc(完全连接的图层,在转换图层之后)的权重[in_channel, out_channel]
必须重新转换为[last_conv_channel, height, width, out_channel]
,然后转换为[height, width, last_conv_channel, out_channel]
并重新改编为[in_channel, out_channel]
。
如果你使用conv权重而不是完全连接的权重,这种转换将明确地应用于fc层(实际上是conv权重)。当然会避免转换错误。