为什么slim.nets.vgg使用conv2d而不是fully_connected图层?

Car*_*Run 5 tensorflow

在tensorflow/models/slim/nets中,这里是vgg的相对片段的链接.我很好奇为什么slim.nets.vgg使用conv2d而不是full_connected图层,虽然它实际上以相同的方式工作?这是为了速度吗?我很感激一些解释.谢谢!

Car*_*Run 1

一段时间后,我认为至少有一个原因可以避免权重转换错误。

Tensorflow/slim 以及其他高级库默认允许张量格式BHWC(batch_size、高度、宽度、通道。下同)或BCHW(为了获得更好的性能)。

当在这两种格式之间转换权重时,[in_channel, out_channel]第一个 fc (全连接层,在 conv 层之后)的权重必须被重新整形为,[last_conv_channel, height, width, out_channel]例如,然后转置为[height, width, last_conv_channel, out_channel]并再次重新整形为[in_channel, out_channel]

如果您使用卷积权重而不是完全连接的权重,则这种转换将显式应用于 fc 层(实际上是卷积权重)。肯定会避免转换错误。