1、问题背景:构建神经网络在加入卷积层时出现报错
face_recigntion_model.add(Conv2D(32,3,3,input_shape=(IMAGE_SIZE,IMAGE_SIZE,3),activation='relu'))
AttributeError: module 'tensorflow' has no attribute 'placeholder'
2、报错原因:可能是由于tf.placeholder的版本问题,tf.placeholder是tensorflow1.x版本的东西,tensorflow2.0就不能用了
查看自己的TensorFlow版本print(tf.__version__)
我的为2.8.0,需要降版本
3、解决方法:
方法1:
修改import tensorflow as tf为
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
方法2:
修改import tensorflow as tf为
import tensorflow.compat.v1 as tf
tf.compat.v1.disable_eager_execution()
方法3:我采用上述两种方式都不行,需要手动降TensorFlow的版本,方式为将高版本python改变成低版本python以安装低版本tensorflow.
1、先卸载已有的TensorFlow,在终端中输入:
pip uninstall tensorflow进行卸载
2、将编译环境降为python3.6
由于python3.7以上安装tensorflow只有2.x的版本,所以需要将编译环境也降到python3.6
安装python3.6,在终端中输入:
conda create --name py36 python=3.6 anaconda
重启pycharm,激活python3.6,在终端中输入:
activate py36
验证环境,在终端中输入:
python –version
输出为:
Python 3.6.13 :: Anaconda, Inc.
如果还是原来的版本,需要重新启动下pycharm在检查版本。
3、安装低版本TensorFlow
安装TensorFlow1.4.0,在终端中输入:
pip install tensorflow==1.4.0 -i Simple Index
安装成功
PS:新的编译环境中可能会缺少很多需要用的包,需要采用pip install 下载相关包
4、后续问题补充:
缺少cv2、sklearn… 在终端通过pip安装
pip install opencv-python -i Simple Index
pip install scikit-learn -i https://pypi.douban.com/simple
继续报错:cannot import name ‘tf2‘
原因:keras的版本和tensorflow的版本不匹配,终端输入:
pip list找到TensorFlow的版本
tensorflow 1.4.0
在对应表格中找到对应的keras版本,通过pip安装
pip install keras==2.0.8 -i https://pypi.douban.com/simple
每解决一个问题就运行下程序,遇到新的问题解决新的问题,直至程序能够运行下去不报错。
5、个人心得
如果网络上提供的方法不能解决问题,不要一直找新的答案,要先清楚问题的原因是什么,再去解决。譬如本次报错的主要问题主要是TensorFlow的版本不对,所以输入什么代码以及有没有用不重要,重要的是需要寻找并完成TensorFlow低版本的替代工作。
如果我解决了你的问题,请点赞给我加油,也谢谢在解决问题过程中参考的诸位大佬们。。
主要参考:
将高版本py与tensorflow改变成低版本python以安装低版本tensorflow_树顶上的橙子的博客-CSDN博客_安装低版本tensorflow