pycharm中keras导入报错分析(无法自动补全,cannot find reference)

这篇具有很好参考价值的文章主要介绍了pycharm中keras导入报错分析(无法自动补全,cannot find reference)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引言

 目前无论是中文还是国外网站对于如何正确的导入keras,如何从tensorflow中导入keras,如何在pycharm中从tensorflow里导入keras,这几个问题都众说纷纭,往往是互相借鉴给出一个可用的解决方法,但没有更进一步的解释了。常见因为keras导入引发的问题有以下几个:

  1. from tensorflow import keras: pycharm中使用keras相关的包没有自动补全
  2. from tensorflow.keras.layers import Conv2D: pycharm中如此导入会发生Cannot find reference 'keras' in '__init__.py | __init__.py'问题。

分析

 首先需要说明的是上面两种问题其实并不能称之为“问题”,因为实际上这些代码都是可以运行的,并且如果在pycharm自带的python console里执行这些问题也都是不存在的, 只是由于编译器自带的bug1使得这些现象一再发生。如果您只是要求代码能运行即可,那可以关闭页面大胆的继续编程了,但要是想要解决这些不便,可以继续看下去。

解决方法

 首先给出这些问题的解决方法

  1. 使用如下方式导入keras:
    from tensorflow.python import keras
  2. 不从tensorflow里导入keras:
    import keras
  3. 不导入keras,改用tf.keras.xxx来使用keras的相关函数;

理论解释

 首先我们要明确一个概念,keras只是一个前端的API,其后端的计算都要基于现有的计算引擎,比如Theano或者Tensorflow2,而如今Tensorflow已经成为了Keras的默认后端,后者也成为了前者的官方高级API,也就意味着当我们安装2.0+版本的Tensorflow时实际会自动安装Keras3,经笔者实测也确实如此。
 那么当我们通过不同方式来导入keras时,我们到底在导入什么,不同导入方法导入的包是否有区别呢?以下分别通过包的导入路径及导入内容进行具体分析,为了更好理解其中内容,建议去学习python中import的相关知识4.

 keras常用导入方法有以下几种

import keras
from tensorflow import keras
from tensorflow.python import keras
import tensorflow as tf
tf.keras

1. 直接导入keras;

寻址到的包为venv\Lib\site-packages\keras\__init__.py,也就是找到了keras的安装路径,直接运行了__init__.py。但是keras这个包的init文件中并没有显式的导入keras包中的所有子包,只是显式导入了一部分比如Sequetial ,Model:

from keras import models
from keras.engine.input_layer import Input
from keras.engine.sequential import Sequential
from keras.engine.training import Model

在仅导入keras的情况下,pycharm窗口中我们无法使用其他的代码自动补全,比如keras.optimizers等等。但值得注意的是,刚刚我说的是没有“显式导入”,而实际上显式导入的这些py文件本身其实又导入了大部分keras所包含的函数,这就使得虽然我们写出keras.optimizers这样的语句在pycharm中无法不全、高亮,但运行起来是没有问题的,而在python console中运行也能够自动补全,其实这也算是pycharm的一个bug了。如果希望在窗口界面也能自动补全,就应该直接导入keras文件夹下的optimizer子文件夹:import keras.optimizer

2. 从tensorflow里导入keras

这一方法是执行了venv\Lib\site-packages\tensorflow\__init__.py,而该文件中的keras实际是从 keras.api._v2 中导入了keras,执行了\venvLib\site-packages\keras\api\_v2\keras\_init.py,而再进一步的查看它实际也只是个空壳,进一步的调用了\venvLib\site-packages\keras\api\_v2\keras文件夹下的其他子文件夹,虽然这些文件夹看起来十分唬人,和重写了所有方法一样,但实际上其下只包含着__init__文件,内容也只是from keras import xx,和1中的方没有区别,只是个重定位而已。因此我们可以推测,在2.0+的版本里使用tf.keras.xxkeras.xx实际上是等价的,而在以前的版本是否存在区别,亦或者独立安装的keras是否有区别,笔者尚未去证实。

3. 从tensorflow.python里导入keras;

执行了venv\Lib\site-packages\tensorflow\python\keras\__init__.py,这里的keras下包含了第一二种方法里导入的keras下属函数,是对1、2中方法的重写而不是重定位。而从5中回答可知,tf.python.keras是private的,提供给开发者使用的,并不建议普通用户来使用。

总结起来的话,1和2是等价的,3是独立的,查阅资料的说法是第三种方法不推荐使用,是供开发者使用的,后续更新可能随时修改,官方建议的用法是第二种。

4. 不导入keras

 这一方法和2是等价的,不同点在于在pycharm中使用这种方式书写可以实现代码的自动补全。

总结

 这篇报错处理花了挺长时间去搜集相关资料并且实际验证,最终弄明白了python的import原理和keras到底是以怎样的形式和tensorflow取得联系,也算是个挺大的收获,总结就是后续的代码直接import keras即可。当然还有一些不太明晰的地方,比如tf.python.keras和keras在通用函数的实现方面方面是否存在区别,又有着怎样的区别?

参考文献


  1. PyCharm doesn’t resolve anything under tensorflow.keras ↩︎

  2. TensorFlow 2.0中的tf.keras和Keras有何区别? ↩︎

  3. How To Install Keras And TensorFlow ↩︎

  4. 关于Python的import机制原理 ↩︎

  5. What is the difference between tf.keras and tf.python.keras? ↩︎文章来源地址https://www.toymoban.com/news/detail-437702.html

到了这里,关于pycharm中keras导入报错分析(无法自动补全,cannot find reference)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android Studio代码无法自动补全

    在写layout布局文件时,代码不提示,不自动补全,可以采用如下方法: 点击File—Project Structure,之后如图所示,找到左侧Modules,修改SDK版本号,以自己实际使用为准。我的是26。 这三者保持一致。 设置完点击OK。 试验一下: 但是运行程序发现会报错,再改一下, 就好使了

    2024年02月04日
    浏览(35)
  • 【问题记录】VS Code 无法自动补全 Unity 脚本代码

    目录 一,设置 Unity 脚本文件使用 VS Code 打开 二,查看 Unity 要求的 dotnet 版本 三,下载对应版本的 dotnet 四,最后设置 VS Code 智能补全 Unity 代码 五,附加链接 Unity 内置支持在 VS Code 中打开脚本,作为Windows和macOS上的外部脚本编辑器。所以在 Unity 界面中的工具栏点击  Edit

    2024年02月09日
    浏览(43)
  • Pycharm找不到Conda可执行文件路径(Pycharm无法导入Anaconda已有环境)

    在使用Pycharm时发现无法导入Anaconda创建好的环境,会出现找不到Conda可执行文件路径的问题。 在输入框内输入 D:anaconda3Scriptsconda.exe ,点击加载环境。 注意前面目录是自己Anaconda的安装位置,之后就可以找到Anaconda的现有环境。

    2024年02月12日
    浏览(46)
  • 【python】pycharm 2023.02导入matplotlib报错

    换新电脑、重装系统后,新装的pycharm 2023.02版本导入 matplotlib 会报错:找不到指定的模块 需要重新安装 Microsoft Visual C++ 2015 Redistributable Update 3或更高版本 下载链接:Download Microsoft Visual C++ 2015 Redistributable Update 3 from Official Microsoft Download Center

    2024年02月13日
    浏览(24)
  • 在PyCharm中 导入 selenium时,报错问题解决

    遇到下面的情况,无法py文件中无法导入selenium相关的包  解决办法: 1、检查这里是否是自己安装的Python  2、检查文件夹是否与selenium相同,如果相同,则无法导入;请修改成其他名称  一切检查,并修改完成,则可以。下图是修改之后的  

    2024年02月11日
    浏览(31)
  • mac pycharm 启动报错 cannot connect to already running ide instance

    cannot connect to already running ide instance 删除.lock文件 Deleting the file ~/Library/Application Support/JetBrains/PyCharm2023.2/.lock solved my problem

    2024年01月21日
    浏览(52)
  • Windows系统安装Anaconda、conda源换源、PyPI源换源、jupyter的kernel内核配置、jupyter自动补全配置、PyCharm的Python解释器配置

    在Python的学习,以及机器学习、深度学习的过程当中,大概率会用到Anaconda平台,为了使后来的学习工具更加高效,这里讲解Anaconda的安装以及进行换源 前言: 分为四大部分 1、anaconda安装 2、anaconda换源conda源 3、anaconda换源pypi源 4、jupyter的kernel配置 5、PyCharm的Python解释器选择

    2024年01月17日
    浏览(66)
  • jupyter notebook 导入已经在pycharm里pip install过的包报错

    🐱: 当我每天都在cmd/Terminal等地方pip install我的python lib时,打开Jupyter notebook 发现,有一些包明明在电脑里有,比如torch, searborn之类的,在jupyter notebook 里import 对应包确报错,找不到这些包 🔵查看平时pip install 的lib文件目录 在jupyter notebook 的cell里面输入: 🟡运行上面代码

    2024年02月08日
    浏览(46)
  • pycharm unsupported Python 3.1报错:pycharm无法识别python 3.10

    本人电脑中的pycharm版本是2019的,在使用python3.10环境的时候,pycharm无法识别,出现如下错误: 网上说是因为python版本过高,无法兼容低版本的pycharm,解决方案分两种:要么降低python环境的版本,取消使用3.10,改用3.7或者3.8之类的版本;要么就是下载高版本的pycharm。这里我

    2024年02月13日
    浏览(31)
  • 【Pycharm安装torch报错:无法定位到动态连接库】

    @TOC 用官网命令“conda install pytorch torchvision torchaudio pytorch-cuda=11.6 -c pytorch-nightly -c nvidia”安装torch库, Proceed选择y后报错: 无法定位到动态连接库“D:anacondaLibrarybinxxx.dll” 原因可能是Anaconda没装好,卸载重新安装即可

    2024年02月13日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包