已安装TensorFlow v2.3仍出现ModuleNotFoundError: No module named 'tf'的问题咨询
我来帮你捋清楚这个问题——你已经装好了TensorFlow,也能正常搭建神经网络,但导入正则化器时却触发了模块找不到的错误,核心原因是Python模块导入的规则和你写的导入语句不匹配。
为什么会报错?
你开头写了import tensorflow as tf,这行代码只是在当前脚本的命名空间里给tensorflow模块起了个简短别名tf,但这个别名不能用在from <模块路径> import ...的语法里。
当你写from tf.keras.regularizers import l2, activity_l2时,Python会去系统的包目录(比如Anaconda环境的site-packages)里寻找一个名为tf的顶级模块文件夹,但你的TensorFlow安装的顶级模块名是tensorflow,根本不存在tf这个模块,所以就抛出了ModuleNotFoundError。
正确的解决方法
根据你已有的导入代码,你可以选择以下任意一种正确的写法:
利用已导入的
keras对象
你已经通过from tensorflow import keras导入了keras模块,直接从这里导入正则化器即可:from keras.regularizers import l2, activity_l2使用完整的TensorFlow模块路径
直接用官方的完整模块路径导入,不会有别名混淆的问题:from tensorflow.keras.regularizers import l2, activity_l2通过
tf别名访问(不使用from导入)
如果你想保留tf别名的使用习惯,可以直接通过别名调用正则化器,而不是用from导入:import tensorflow as tf # 直接通过tf访问正则化器 l2_regularizer = tf.keras.regularizers.l2(0.01) activity_regularizer = tf.keras.regularizers.activity_l2(0.01)
另外提个小提醒:activity_l2在TensorFlow的较新版本中已经被标记为弃用,建议你查看官方文档,改用更推荐的方式来对层的输出活动施加正则化哦。
内容的提问来源于stack exchange,提问作者An old man in the sea.

