转载网址:
https://blog.csdn.net/Eric_Blog_CSDN/article/details/88420234
tensorflow和keras版本匹配的网址:
https://docs.floydhub.com/guides/environments/
环境描述:
系统ubantu16.04
安装anaconda 版本conda 4.5.4
创建虚拟环境 tf-gpu
tensorflow-gpu版本(1.7.0-gpu, 能够import tensorflow)
tf-gpu环境下已安装的包:
(1)conda install scipy matplotlib scikit-learn scikit-image
(2)conda install keras
正文
一直对keras和tf.keras的存在一些混淆和误区,这里说一说自己的理解。误区主要还是源于对python的package和tensorflow的不熟悉导致的,按网上例子写代码出现问题,被各种版本更是弄的晕头转向。
最初是看到这样一段代码
import numpy as np
from tensorflow.keras import layers
from tensorflow import keras
import tensorflow as tf
运行程序,第二句会报错,于是开启了问题之路:
ModuleNotFoundError: No module named 'tensorflow.keras'
我的问题的解决:
1、在我的python环境(能够import tensorflow)下用下面的程序测试(所用工具为jupyter notebook网页编辑器)
测试结果:
这说明tensorflow外的keras正常,可以看到其路径所在,也可以导入其下的包。
2、第二个测试,用下面的程序测试,并给出程序
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
print(tf.VERSION)
print(tf.keras.__version__)
tf.__path__
keras.__path__
tf.keras.__path__
la = tf.keras.layers.Convolution2D(32,(3,3))
from tensorflow.python.keras import layers
layers.__path__
测试结果:
细心观察,发现,和最初代码相比,交换了顺序后,第二句是通过的(之前忽略了),其实只是第三句报错。那赶快验证一下tensorflow中keras的版本和位置,可以看到tensorflow里的keras版本号有个tf标志,再看路径,多了一个python的中间路径!于是进行后续验证,加入中间的python路径后,成功运行。
究其原因,则是我安装的tensorflow中,keras的路径是
~/anaconda3/envs/tf-gpu/lib/python3.6/site-packages/tensorflow/python/keras
所以正确的调用方式是
from tensorflow.python.keras import layers
最后,Keras 是一个用于构建和训练深度学习模型的高级 API,最后,Keras 是一个用于构建和训练深度学习模型的高级 API,
tf.keras 是 Keras API 规范的 TensorFlow 实现。tf.keras 可以运行任何与 Keras 兼容的代码,保留了一些细微的差别。导入包的时候根据其具体位置进行导入,具体问题具体分析。
查找错误的心路历程:
出现No module的错误,可能的几个原因:(1)没有下载这个包;(2)没有正确安装这个包(包括安装路径不对、安装与虚拟环境不匹配、环境变量设置出错等等);(3)间接的,曾经下载了这个包,但和网站上不是同样的版本。
我们知道,tensorflow引用包时,from A.B import C或者 import A.B.C 或者X=A.B.C等这几种引用结构,都表示这包A文件夹下的包B文件夹内,存在包C文件夹或名为C的函数。那我去找找我的tensorflow环境的tensorflow包有没有keras。
确实没有keras这个包。然后百度中搜索No module named 'tensorflow.keras',会有类似以下的检索结果
“No module named 'keras'解决办法”
“解决no module named tensor..._”
“解决ImportError: No module named 'tensorflow.core' ...”
细心观察,其实他们错的都不是tensorflow.keras,而在不熟悉的时候,抱着试一试的态度,于是就打开keras解决办法各种试,一边是,一边疑惑,他们的界面最后成功结果试:import keras成功,我的问题能成功解决么?此路不通。
第二条路,去tensorflow官网(PS,国内访问tensorflow网站,网上查询的www.tensorflow.org不要再尝试了,tensorflow国内站点访问tensorflow.google.cn),查询keras引导,直接就让你导入,没有解释导入的keras哪里来的,点开tf.keras,也没有说明,参考keras.io,又回到了keras,还是没有讲怎么引用,仍然一头雾水。
第三条路,查询tf.keras 与 keras的区别,各种讲它俩的区别,还是没有说引用的问题。不过让我确信了,tensorflow确实封装了keras的包。最后用到了上文的测试程序。