资讯专栏INFORMATION COLUMN

pycharm故障报错:keras导入报错无法自动补全cannot find reference无法

89542767 / 752人阅读

  小编写这篇文章的主要目的,就是给大家来介绍关于pycharm故障报错的一些相关问题,涉及到的故障问题有keras导入报错无法自动补全,另外,还有cannot find reference无法补全,遇到这种问题怎么处理呢?下面就给大家详细解答下。


  引言


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


  from tensorflow import keras:pycharm中使用keras相关的包没有自动补全


  from tensorflow.keras.layers import Conv2D:pycharm中如此导入会发生Cannot find reference'keras'in'__init__.py|__init__.py'问题。


  分析


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


  解决方法


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


  使用如下方式导入keras:


  from tensorflow.python import keras


  不从tensorflow里导入keras:


  import keras


  不导入keras,改用tf.keras.xxx来使用keras的相关函数;


  理论解释


  首先我们要明确一个概念,keras只是一个前端的API,其后端的计算都要基于现有的计算引擎,比如Theano或者Tensorflow1,而如今Tensorflow已经成为了Keras的默认后端,后者也成为了前者的官方高级API,也就意味着当我们安装2.0+版本的Tensorflow时实际会自动安装Keras2,经笔者实测也确实如此。


  那么当我们通过不同方式来导入keras时,我们到底在导入什么,不同导入方法导入的包是否有区别呢?以下分别通过包的导入路径及导入内容进行具体分析,为了更好理解其中内容,建议去学习python中import的相关知识3.


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


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


  1.直接导入keras


  寻址到的包为venvLibsite-packageskeras__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


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


  3.从tensorflow.python里导入keras;


  执行了venvLibsite-packagestensorflowpythonkeras__init__.py,这里的keras下包含了第一二种方法里导入的keras下属函数,是对1、2中方法的重写而不是重定位。tf.python.keras是private的,提供给开发者使用的,并不建议普通用户来使用。


  4.不导入keras


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


  总结


  这篇报错处理花了挺长时间去搜集相关资料并且实际验证,最终弄明白了python的import原理和keras到底是以怎样的形式和tensorflow取得联系,也算是个挺大的收获,总结就是后续的代码直接import keras即可。


  综上所述,这篇文章就给大家介绍到这里了,希望可以给大家带来帮助。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/128414.html

相关文章

  • Python中使用pip成功导入库之后,解决vscode报错问题

       小编写这篇文章的主要目的,主要是给大家进行解读在Python这哥们语言中,我们完成了pip成功导入数据库之后,可能会出现vscode报错问题,下面给大家进行详解解答一下解决步骤。  前言  写在开始前:当出现这种问题的时候,需要了解到,其核心的问题是出现在哪里了,并非是要相同的编译器才是这样的解决办法,要学会举一反三。  核心问题分析:  首先确定好了安装成功了该库,但是就是有莫名其妙的错误...

    89542767 评论0 收藏0
  • JavaScript 之 面向对象 [ 严格模式 ]

    摘要:严格模式描述严格模式可以分别作用在全局作用域中和函数作用域中严格模式是对代码的一种限制方式严格模式可以将不明确显示的错误转变成明确显示严格模式可以修正一些解释器难以优化的错误严格模式下的变量禁止意外创建变量没有开启严格模式时在调用该变量时, 严格模式 描述 严格模式可以分别作用在全局作用域中和函数作用域中 严格模式是对JavaScript代码的一种限制方式 严格模式可以将不明确显...

    zsirfs 评论0 收藏0
  • 开发5分钟,调试2小时 - 该如何debug?

    摘要:但在开发时不要使用异常处理,否则阻止了报错信息的发出,影响调试。的作用主要是确定程序的运行路径。二分查找法是一个定位问题的技巧。 前言 几年来我在答疑群、论坛、公众号、知乎回答的各种问题,没有一万也有八千。其中有三分之二以上都是在帮人看报错,帮人 debug(调试代码) 。 可以说, 会不会 debug,有没有 debug 的意识,懂不懂 debug 的技巧,是有没有入门编程的重要标志...

    Charles 评论0 收藏0
  • webpack编译报错Cannot find module '@babel/core�

    摘要:编译报错用了这个指令后报错尝试重新下载了还是不行原来是被我更新了不支持原来的配置了,官方默认对应的版本需要一致即需要搭配最新版本两种解决方案回退低版本更新到最高版本编译无法识别语法需要安装之后 ** webpack编译报错Cannot find module @babel/core **~ npm install babel-core babel-loader --save-dev ...

    DandJ 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<