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

目录
  • 引言
  • 分析
  • 解决方法
  • 理论解释
    • 1. 直接导入keras
    • 2. 从tensorflow里导入keras
    • 3. 从tensorflow.python里导入keras;
    • 4. 不导入keras
  • 总结

引言

目前无论是中文还是国外网站对于如何正确的导入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

寻址到的包为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中方法的重写而不是重定位。tf.python.keras是private的,提供给开发者使用的,并不建议普通用户来使用。

4. 不导入keras

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

总结

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

到此这篇关于pycharm中keras导入报错无法自动补全cannot find reference分析的文章就介绍到这了,更多相关pycharm keras 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 教你如何在pycharm中安装opencv,tensorflow,keras

    目录 一.首先安装Anaconda,python和pycharm 二.首先安装opencv 三.安装tensorflow和kerass 四.小结 我在安装环境的时后,怎么都装不上去,搞了好久,现在来写一下心得. 一.首先安装Anaconda,python和pycharm 有很多教程,我就不在此赘述 二.首先安装opencv 1.点击左下角的Terminal 2.输入pip install opencv-python,然后按键盘上的enter(亲测有效) 3.看到successfully就说明安装

  • 浅析关于Keras的安装(pycharm)和初步理解

    Keras 是一个用 Python 编写的高级神经网络 API,它能够以 TensorFlow, CNTK, 或者 Theano 作为后端运行.Keras 的开发重点是支持快速的实验.能够以最小的时延把你的想法转换为实验结果,是做好研究的关键. 安装 Keras 兼容的 Python 版本: Python 2.7-3.6. 本人使用的是pycharm-2019.3版本 第一步.直接在命令窗口下 pip install keras==2.1.6 这里我之前设置了阿里的镜像,如果使用其他镜像,或者之

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

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

  • 解决pycharm中opencv-python导入cv2后无法自动补全的问题(不用作任何文件上的修改)

    发现问题 当我用pip安装好opencv-pyton后,我激动得在python项目中导入cv2 就像这样: import cv2 as cv but- 码代码时竟然没有自动补全!!!这我还能忍,可是CTRL+左键竟然不能看源码!!!!!!就像这样: 这我就受不了了.于是开始找解决方法 解决问题 查找解决方法, 有的说要将cv2.cp36-win_amd64.pyd文件挪到site-packages下: 有的说要修改_init_.py文件 有的说- 直到我看到https://segmentfaul

  • python pycharm中使用opencv时没有代码自动补全提示的解决方案

    目录 解决方案有2种 方法1 方法2 注意事项 总结 python pycharm中使用opencv时,没有代码自动补全提示 解决方案有2种 今天工作时突然发现,在写OPENCV相关代码时,没有自动补全提示了,只有几个最最基本的补全函数. 方法1 开始以为是opencv坏了,一通折腾搞不定,又把pycharm重装,还是不行,又把Python重装还是不行.甚至还安装了anaconda都还是不行,之前一直是通过pip3进行安装库文件. 最后发现,似乎是pycharm自动升级之后造成的问题,需要将op

  • Pycharm中import torch报错的快速解决方法

    Pycharm中import torch报错 问题描述: 今天在跑GitHub上一个深度学习的模型,需要引入一个torch包,在pycharm中用pip命令安装时报错: 于是我上网寻求解决方案,试了很多都失败了,最后在:Anne琪琪的博客中找到了答案,下面记录一下解决问题的步骤: 1.打开Anaconda prompt执行下面命令: conda install pytorch-cpu torchvision-cpu -c pytorch 等待运行结束. 2. 测试torch是否安装成功 impo

  • Bootstrap3使用typeahead插件实现自动补全功能

    很酷的一个自动补全插件 http://twitter.github.io/typeahead.js 在bootstrap中使用typeahead插件,完成自动补全 相关的文档:https://github.com/twitter/typeahead.js/blob/master/doc/jquery_typeahead.md 数据源: Local:数组 prefectch:json remote等方式 -----------------------------------------------

  • JQuery搜索框自动补全(模糊匹配)功能实现示例

    本地实现了一个搜索框自动补全的小功能,在JQuery UI的autocomplete插件的基础上,加入了自己的业务代码,贴出来回顾一下,同时可以给大家一个参考 首先贴出的是JQuery Ui 的自动补全插件部分的代码,后面的功能都是在其基础上追加的,直接拷贝到你的本地就可以直观的看到运行效果,也可以到官网上面体验和查看,为了方便,我这里是直接引入的JS链接点击下载JQuery UI的源码 <!doctype html> <html lang="en"> <

  • Vue3+Element-plus项目自动导入报错的解决方案

    目录 前言 安装步骤 1.安装插件 2.vue.config.js 设置 3.npm run serve 出错 解决方案 1.问题原因 1.1 unimport 包报错 1.2 node.js 和 npm 版本过低 2.解决方法 2.1 降低 unplugin-auto-import 插件版本 2.2 升级 node.js 和 npm 版本 补充:element-plus自动按需导入及出错解决 总结 前言 在创建 Vue3 + Element-plus 项目时,根据 Element-plus 文

  • 关于pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的问题

    有的bug,莫名其妙就好了- python3.9 报错 "AttributeError: 'HTMLParser' object has no attribute 'unescape'" 异常分析解决. 一.问题描述 安装 python3.9 版本后,pycharm 中切换 python3.9 版本,创建虚拟环境报错:"AttributeError: 'HTMLParser' object has no attribute 'unescape'". Executed

  • arco design按需导入报错排查思路与解决方案解析

    目录 正文 问题描述 排查问题 解决问题 处理思路 总结 正文 记录一档使用arco-design按需加载的问题,来帮助更多的开发者避免.当前项目我使用的 @arco-design/web-vue 与 vite-plugin-style-import 版本是: "@arco-design/web-vue": "^2.43.2", "vite-plugin-style-import": "^2.0.0" 问题描述 首先根据 ar

  • JS 调试中常见的报错问题解决方法

    报错:Uncaught SyntaxError: Unexpected token o in JSON at position 1 at JSON.parse (<anonymous>) at Function.m.parseJSON (jquery.js:8515) at Object.success (crud.html:45) at j (jquery.js:3143) at Object.fireWith [as resolveWith] (jquery.js:3255) at x (

随机推荐