首页 文章

调整现有的Tensorflow图(VGG)

提问于
浏览
1

我想使用Ryan的VGG转换张量流模型 .

https://github.com/ry/tensorflow-vgg16

现在我想调整图层并添加另一个图层或更改完全连接的图层 . 但我不知道如何从 graphDef 中获取单层/权重或如何调整图形 .

2 回答

  • 0

    简短的回答:你不能调整图表,但有可能找到你想要的东西 .

    答案很长:TensorFlow Graph对象在结构上是不可变的 . 您可以修改它们的某些方面(例如,流入节点的张量的形状),但是您无法删除节点或在两个现有节点之间添加节点 . 但是,有几种方法可以获得相同的效果:

    • 如果您的更改仅限于添加,那么执行此操作没有问题 . 例如,如果您想在网络末尾添加一个图层,请选择它 . 同样,您可以通过简单地添加一个新的图层来实现最后一个图层,该图层将倒数第二层作为输入,而忽略现有的最后一层 . 当您运行图形时,如果您从未要求输出原始的最后一层,TensorFlow将永远不会计算它 .

    • 如果需要进行修改,一种方法是逐个节点慢慢构建图形的副本 . 因此,请阅读原始图形定义,然后通过迭代原始图形并将类似节点添加到新副本来构建自己的新图形 . 这有点单调乏味且容易出错 . 此外...

    • ...您可能根本不需要"adjust"图表 . 如果你想要类似于VGG-16的实现,你可以直接处理python code . 不喜欢fc6的宽度?只需编辑生成它的代码即可 .

    然而,这将我们带到了真正的问题 . 如果您的目标是修改网络 and 能够重新使用权重,那么在很多情况下可以使用2.和3.不是't going to work. Realistically, this isn' . 例如,如果我想在VGG-16中间添加或删除一个图层(例如,添加另一个卷积图层),则预先训练的权重将不再有效 . 您可能能够挽救在您的更改上游的任何预先训练的权重,但下游的所有内容基本上都是错误的 . 你仍然需要重新训练 . )即使你仍然需要训练网络 .

  • 1

    谢谢!我重新创建了图形,然后通过获取图形定义的值来加载每个重量 .

    这是通过graph.get_tensor_by_name('import / ...')完成的,其中...是权重的名称

    https://www.tensorflow.org/versions/r0.9/how_tos/tool_developers/index.html

相关问题