Tensorflow:下载并运行预训练的 VGG 或 ResNet 模型

Sam*_*uel 5 python tensorflow

让我们从头开始。到目前为止,我自己已经在 Tensorflow 中创建和训练了小型网络。在训练期间,我保存模型并在我的目录中获取以下文件:

model.ckpt.meta
model.ckpt.index
model.ckpt.data-00000-of-00001
Run Code Online (Sandbox Code Playgroud)

稍后,我加载保存的模型network_dir以进行一些分类并提取模型的可训练变量。

saver = tf.train.import_meta_graph(network_dir + ".meta")
variables = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, scope="NETWORK")
Run Code Online (Sandbox Code Playgroud)

现在我想使用更大的预训练模型,如 VGG16 或 ResNet,并想使用我的代码来做到这一点。我想加载像我自己的网络一样的预训练模型,如上所示。

在这个网站上,我发现了很多预训练模型:

https://github.com/tensorflow/models/tree/master/research/slim#pre-trained-models

我下载了 VGG16 检查点并意识到这些只是经过训练的参数。

我想知道如何或在哪里可以获得这些预训练网络的保存模型或图形结构?例如,我如何使用没有model.ckpt.meta,model.ckpt.indexmodel.ckpt.data-00000-of-00001文件的 VGG16 检查点?

Dmy*_*pko 2

在权重链接旁边,有一个指向定义模型的代码的链接。例如,对于 VGG16:代码。使用代码创建模型并从检查点恢复变量:

import tensorflow as tf

slim = tf.contrib.slim

image = ...  # Define your input somehow, e.g with placeholder
logits, _ = vgg.vgg_16(image)
predictions = tf.argmax(logits, 1)
variables_to_restore = slim.get_variables_to_restore()

saver = tf.train.Saver(variables_to_restore)
with tf.Session() as sess:
    saver.restore(sess, "/path/to/model.ckpt")
Run Code Online (Sandbox Code Playgroud)

因此, vgg.py中包含的代码将为您创建所有变量。使用 tf-slim 助手,您可以获得该列表。然后,按照通常的程序进行即可。对此也有类似的问题。