1

我有一个利用 tf-slim 启动的任务。我们应该使用预定义的架构和预训练的权重来训练一个新模型。示例代码如下所示。

from tensorflow.contrib.slim.nets import inception
import tensorflow.contrib.slim as slim

我想使用 mobilenet,但它似乎不会像它不可用一样导入。

import tensorflow.contrib.slim.nets
from tensorflow.contrib.slim.nets import mobilenet

input_tensor = tf.placeholder(tf.float32, shape=[None, height, width, channels], name="input_tensor")
with tf.contrib.slim.arg_scope(mobilenet_v2.training_scope()):
    logits, endpoints = mobilenet_v2.mobilenet(input_tensor)

ImportError:无法导入名称“mobilenet”

4

1 回答 1

3

回答我自己的问题,因为这对我作为 Tensorflow 的学生来说并不是很明显。

这个github 页面说研究目录(mobilenet 所在的位置)中的模型在 tensorflow 的发布分支中不受官方支持,因此在生产安装中不可用。

“研究模型。链接到外部站点。是研究人员在 TensorFlow 中实现的大量模型。它们不受官方支持或在发布分支中可用;由单个研究人员来维护模型和/或提供支持关于问题和拉取请求。”

但是,您可以通过在项目中包含该目录来解决这个问题。事实上,我遇到了一个讨论,表明正式有必要将代码复制到您的项目中。如果我能找到同一个论坛,我会更新答案。

import tensorflow as tf
from models.research.slim.nets.mobilenet import mobilenet_v2
input_tensor = tf.placeholder(tf.float32, shape=[None, 224, 224, 3], name="input_tensor")
with tf.contrib.slim.arg_scope(mobilenet_v2.training_scope()):
       logits, endpoints = mobilenet_v2.mobilenet(input_tensor)

此外,在 mobilenet_v2.py 中,还有一些相关的 python 导入语句。他们只是假设他们是从 models/research/slim 目录中运行的,因此试图导入 nets.mobilenet。只需将它们更改为使用完全限定的包名称,例如在网络前面加上models.research.slim。

from models.research.slim.nets.mobilenet import conv_blocks as ops
from models.research.slim.nets.mobilenet import mobilenet as lib
于 2018-04-16T00:51:44.760 回答