小編寫(xiě)這篇文章的主要目的,就是給大家來(lái)介紹關(guān)于pycharm故障報(bào)錯(cuò)的一些相關(guān)問(wèn)題,涉及到的故障問(wèn)題有keras導(dǎo)入報(bào)錯(cuò)無(wú)法自動(dòng)補(bǔ)全,另外,還有cannot find reference無(wú)法補(bǔ)全,遇到這種問(wèn)題怎么處理呢?下面就給大家詳細(xì)解答下。
引言
目前無(wú)論是中文還是國(guó)外網(wǎng)站對(duì)于如何正確的導(dǎo)入keras,如何從tensorflow中導(dǎo)入keras,如何在pycharm中從tensorflow里導(dǎo)入keras,這幾個(gè)問(wèn)題都眾說(shuō)紛紜,往往是互相借鑒給出一個(gè)可用的解決方法,但沒(méi)有更進(jìn)一步的解釋了。常見(jiàn)因?yàn)閗eras導(dǎo)入引發(fā)的問(wèn)題有以下幾個(gè):
from tensorflow import keras:pycharm中使用keras相關(guān)的包沒(méi)有自動(dòng)補(bǔ)全
from tensorflow.keras.layers import Conv2D:pycharm中如此導(dǎo)入會(huì)發(fā)生Cannot find reference'keras'in'__init__.py|__init__.py'問(wèn)題。
分析
首先需要說(shuō)明的是上面兩種問(wèn)題其實(shí)并不能稱(chēng)之為“問(wèn)題”,因?yàn)閷?shí)際上這些代碼都是可以運(yùn)行的,并且如果在pycharm自帶的python console里執(zhí)行這些問(wèn)題也都是不存在的,只是由于編譯器自帶的bug5使得這些現(xiàn)象一再發(fā)生。如果您只是要求代碼能運(yùn)行即可,那可以關(guān)閉頁(yè)面大膽的繼續(xù)編程了,但要是想要解決這些不便,可以繼續(xù)看下去。
解決方法
首先給出這些問(wèn)題的解決方法:
使用如下方式導(dǎo)入keras:
from tensorflow.python import keras
不從tensorflow里導(dǎo)入keras:
import keras
不導(dǎo)入keras,改用tf.keras.xxx來(lái)使用keras的相關(guān)函數(shù);
理論解釋
首先我們要明確一個(gè)概念,keras只是一個(gè)前端的API,其后端的計(jì)算都要基于現(xiàn)有的計(jì)算引擎,比如Theano或者Tensorflow1,而如今Tensorflow已經(jīng)成為了Keras的默認(rèn)后端,后者也成為了前者的官方高級(jí)API,也就意味著當(dāng)我們安裝2.0+版本的Tensorflow時(shí)實(shí)際會(huì)自動(dòng)安裝Keras2,經(jīng)筆者實(shí)測(cè)也確實(shí)如此。
那么當(dāng)我們通過(guò)不同方式來(lái)導(dǎo)入keras時(shí),我們到底在導(dǎo)入什么,不同導(dǎo)入方法導(dǎo)入的包是否有區(qū)別呢?以下分別通過(guò)包的導(dǎo)入路徑及導(dǎo)入內(nèi)容進(jìn)行具體分析,為了更好理解其中內(nèi)容,建議去學(xué)習(xí)python中import的相關(guān)知識(shí)3.
keras常用導(dǎo)入方法有以下幾種:
import keras from tensorflow import keras from tensorflow.python import keras import tensorflow as tf tf.keras
1.直接導(dǎo)入keras
尋址到的包為venvLibsite-packageskeras__init__.py,也就是找到了keras的安裝路徑,直接運(yùn)行了__init__.py。但是keras這個(gè)包的init文件中并沒(méi)有顯式的導(dǎo)入keras包中的所有子包,只是顯式導(dǎo)入了一部分比如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
在僅導(dǎo)入keras的情況下,pycharm窗口中我們無(wú)法使用其他的代碼自動(dòng)補(bǔ)全,比如keras.optimizers等等。但值得注意的是,剛剛我說(shuō)的是沒(méi)有“顯式導(dǎo)入”,而實(shí)際上顯式導(dǎo)入的這些py文件本身其實(shí)又導(dǎo)入了大部分keras所包含的函數(shù),這就使得雖然我們寫(xiě)出keras.optimizers這樣的語(yǔ)句在pycharm中無(wú)法不全、高亮,但運(yùn)行起來(lái)是沒(méi)有問(wèn)題的,而在python console中運(yùn)行也能夠自動(dòng)補(bǔ)全,其實(shí)這也算是pycharm的一個(gè)bug了。如果希望在窗口界面也能自動(dòng)補(bǔ)全,就應(yīng)該直接導(dǎo)入keras文件夾下的optimizer子文件夾:import keras.optimizer。
2.從tensorflow里導(dǎo)入keras
這一方法是執(zhí)行了venvLibsite-packagestensorflow__init__.py,而該文件中的keras實(shí)際是從keras.api._v2中導(dǎo)入了keras,執(zhí)行了venvLibsite-packageskerasapi_v2keras_init.py,而再進(jìn)一步的查看它實(shí)際也只是個(gè)空殼,進(jìn)一步的調(diào)用了venvLibsite-packageskerasapi_v2keras文件夾下的其他子文件夾,雖然這些文件夾看起來(lái)十分唬人,和重寫(xiě)了所有方法一樣,但實(shí)際上其下只包含著__init__文件,內(nèi)容也只是from keras import xx,和1中的方?jīng)]有區(qū)別,只是個(gè)重定位而已。因此我們可以推測(cè),在2.0+的版本里使用tf.keras.xx和keras.xx實(shí)際上是等價(jià)的,而在以前的版本是否存在區(qū)別,亦或者獨(dú)立安裝的keras是否有區(qū)別,筆者尚未去證實(shí)。
3.從tensorflow.python里導(dǎo)入keras;
執(zhí)行了venvLibsite-packagestensorflowpythonkeras__init__.py,這里的keras下包含了第一二種方法里導(dǎo)入的keras下屬函數(shù),是對(duì)1、2中方法的重寫(xiě)而不是重定位。tf.python.keras是private的,提供給開(kāi)發(fā)者使用的,并不建議普通用戶(hù)來(lái)使用。
4.不導(dǎo)入keras
這一方法和2是等價(jià)的,不同點(diǎn)在于在pycharm中使用這種方式書(shū)寫(xiě)可以實(shí)現(xiàn)代碼的自動(dòng)補(bǔ)全。
總結(jié)
這篇報(bào)錯(cuò)處理花了挺長(zhǎng)時(shí)間去搜集相關(guān)資料并且實(shí)際驗(yàn)證,最終弄明白了python的import原理和keras到底是以怎樣的形式和tensorflow取得聯(lián)系,也算是個(gè)挺大的收獲,總結(jié)就是后續(xù)的代碼直接import keras即可。
綜上所述,這篇文章就給大家介紹到這里了,希望可以給大家?guī)?lái)幫助。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/128414.html
小編寫(xiě)這篇文章的主要目的,主要是給大家進(jìn)行解讀在Python這哥們語(yǔ)言中,我們完成了pip成功導(dǎo)入數(shù)據(jù)庫(kù)之后,可能會(huì)出現(xiàn)vscode報(bào)錯(cuò)問(wèn)題,下面給大家進(jìn)行詳解解答一下解決步驟。 前言 寫(xiě)在開(kāi)始前:當(dāng)出現(xiàn)這種問(wèn)題的時(shí)候,需要了解到,其核心的問(wèn)題是出現(xiàn)在哪里了,并非是要相同的編譯器才是這樣的解決辦法,要學(xué)會(huì)舉一反三。 核心問(wèn)題分析: 首先確定好了安裝成功了該庫(kù),但是就是有莫名其妙的錯(cuò)誤...
摘要:嚴(yán)格模式描述嚴(yán)格模式可以分別作用在全局作用域中和函數(shù)作用域中嚴(yán)格模式是對(duì)代碼的一種限制方式嚴(yán)格模式可以將不明確顯示的錯(cuò)誤轉(zhuǎn)變成明確顯示嚴(yán)格模式可以修正一些解釋器難以?xún)?yōu)化的錯(cuò)誤嚴(yán)格模式下的變量禁止意外創(chuàng)建變量沒(méi)有開(kāi)啟嚴(yán)格模式時(shí)在調(diào)用該變量時(shí), 嚴(yán)格模式 描述 嚴(yán)格模式可以分別作用在全局作用域中和函數(shù)作用域中 嚴(yán)格模式是對(duì)JavaScript代碼的一種限制方式 嚴(yán)格模式可以將不明確顯...
摘要:但在開(kāi)發(fā)時(shí)不要使用異常處理,否則阻止了報(bào)錯(cuò)信息的發(fā)出,影響調(diào)試。的作用主要是確定程序的運(yùn)行路徑。二分查找法是一個(gè)定位問(wèn)題的技巧。 前言 幾年來(lái)我在答疑群、論壇、公眾號(hào)、知乎回答的各種問(wèn)題,沒(méi)有一萬(wàn)也有八千。其中有三分之二以上都是在幫人看報(bào)錯(cuò),幫人 debug(調(diào)試代碼) 。 可以說(shuō), 會(huì)不會(huì) debug,有沒(méi)有 debug 的意識(shí),懂不懂 debug 的技巧,是有沒(méi)有入門(mén)編程的重要標(biāo)志...
摘要:編譯報(bào)錯(cuò)用了這個(gè)指令后報(bào)錯(cuò)嘗試重新下載了還是不行原來(lái)是被我更新了不支持原來(lái)的配置了,官方默認(rèn)對(duì)應(yīng)的版本需要一致即需要搭配最新版本兩種解決方案回退低版本更新到最高版本編譯無(wú)法識(shí)別語(yǔ)法需要安裝之后 ** webpack編譯報(bào)錯(cuò)Cannot find module @babel/core **~ npm install babel-core babel-loader --save-dev ...
閱讀 910·2023-01-14 11:38
閱讀 877·2023-01-14 11:04
閱讀 740·2023-01-14 10:48
閱讀 1981·2023-01-14 10:34
閱讀 941·2023-01-14 10:24
閱讀 818·2023-01-14 10:18
閱讀 498·2023-01-14 10:09
閱讀 572·2023-01-14 10:02