这可能完全是noob问题,与python模块导入有关,但是我不明白为什么以下内容有效:
> import tensorflow as tf
> f = tf.train.Feature()
> from tensorflow import train
> f = train.Feature()
但是以下语句会导致错误:
> from tensorflow.train import Feature
ModuleNotFoundError: No module named 'tensorflow.train'
能否请人解释一下为什么这种方式不起作用?我的目标是在这样的代码中使用更简短的符号:
> example = Example(
features=Features(feature={
'x1': Feature(float_list=FloatList(value=feature_x1.ravel())),
'x2': Feature(float_list=FloatList(value=feature_x2.ravel())),
'y': Feature(int64_list=Int64List(value=label))
})
)
tensorflow版本为1.7.0
答案 0 :(得分:4)
替换
from tensorflow.train import Feature
使用
from tensorflow.core.example.feature_pb2 import Feature
通常,您必须记住这一点,例如:
from tensorflow import train
实际上是
的别名from tensorflow.python.training import training
您可以通过打印模块轻松地检查实际模块名称。对于当前示例,您将获得:
from tensorflow import train
print (train)
<module 'tensorflow.python.training.training' from ....
在Tensorflow 1.7中,您不能使用from tensorflow.train import Feature
,因为from
子句需要实际的模块名称(而不是别名)。假设train
是别名,您将获得ImportError
。
这样做
from tensorflow import train
print (train.Feature)
<class 'tensorflow.core.example.feature_pb2.Feature'>
您将获得train
的完整路径。现在,您可以使用上面的解决方案中所示的导入路径。
在TensorFlow 1.9.0中,from tensorflow.train import Feature
将起作用,因为tensorflow.train
是实际的包,因此可以导入。 (这是我在已安装的Tensorflow 1.9.0和文档中看到的内容,但在Github存储库中却没有。它必须在某个地方生成。)
您可以在文档中找到完整的模块路径。每个模块都有一个“定义于” 部分。参见下图(取自Module: tf.train):
答案 1 :(得分:0)
我建议您不要从非公共API导入Feature
(或其他任何对象),这很不方便(您必须弄清楚Feature
的实际定义位置),冗长和主题在将来的版本中进行更改。
我建议作为简单定义的替代方法
import tensorflow as tf
Feature = tf.train.Feature