我的任务是在开始时利用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'
答案 0 :(得分:2)
回答我自己的问题,因为作为Tensorflow的学生,这对我来说并不是很明显。
这个github page表示研究目录(移动网络所在)中的模型在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的import语句。他们只是假设他们是在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