網站首頁 編程語言 正文
引言
目前無論是中文還是國外網站對于如何正確的導入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.xx
和keras.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在通用函數的實現方面方面是否存在區別,又有著怎樣的區別?
原文鏈接:https://juejin.cn/post/7115210948066951176
相關推薦
- 2022-08-23 .net?core中的System.Buffers命名空間_基礎應用
- 2022-05-18 ASP.NET?MVC自定義操作過濾器_實用技巧
- 2024-07-18 Spring Security之認證過濾器
- 2022-04-30 C#實現鼠標消息捕獲_C#教程
- 2022-06-23 Python+Turtle制作獨特的表白圖_python
- 2022-08-21 python數字圖像處理之基本形態學濾波_python
- 2022-04-16 C語言線性表之雙鏈表詳解_C 語言
- 2022-11-06 Android?ViewPager2?使用及自定義指示器視圖實現_Android
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支