簡體   English   中英

如果在 anaconda 提示符下運行沒有問題,但是 ModuleNotFoundError: No module named 'keras' in Spyder

[英]It's OK if run in anaconda prompt but ModuleNotFoundError: No module named 'keras' in Spyder

我運行了一個從GitHub下載的項目。 奇怪的是,如果我在anaconda提示符下運行它,它是可以的,但是如果我在Spyder中運行它,它就會出現(我在win10中安裝了anaconda和Sypder,並且也安裝了keras):

runfile('E:/MySourceCode/neural_image_captioning-master-oarriaga/src/train.py', wdir='E:/MySourceCode/neural_image_captioning-master-oarriaga/src') 重載模塊:評估器、生成器回溯(最近一次調用):

File "", line 1, in runfile('E:/MySourceCode/neural_image_captioning-master-oarriaga/src/train.py', wdir='E:/MySourceCode/neural_image_captioning-master-oarriaga/src')

文件“D:\\ProgramData\\Anaconda3\\lib\\site-packages\\spyder\\utils\\site\\sitecustomize.py”,第 710 行,在運行文件 execfile(filename, namespace) 中

文件“D:\\ProgramData\\Anaconda3\\lib\\site-packages\\spyder\\utils\\site\\sitecustomize.py”,第 101 行,在 execfile exec(compile(f.read(), filename, 'exec'), namespace)

文件“E:/MySourceCode/neural_image_captioning-master-oarriaga/src/train.py”,第 3 行,來自 keras.callbacks import CSVLogger

ModuleNotFoundError:沒有名為“keras”的模塊

train.py 如下:

from evaluator import Evaluator
from generator import Generator
from keras.callbacks import CSVLogger
from keras.callbacks import ModelCheckpoint
from keras.callbacks import ReduceLROnPlateau
from models import NIC
from data_manager import DataManager

num_epochs = 50  
batch_size = 64 
root_path = '../datasets/IAPR_2012/'
captions_filename = root_path + 'IAPR_2012_captions.txt'
data_manager = DataManager(data_filename=captions_filename,
                            max_caption_length=30,
                            word_frequency_threshold=2,
                            extract_image_features=False,
                            cnn_extractor='inception',
                            image_directory=root_path + 'iaprtc12/',
                            split_data=True,
                            dump_path=root_path + 'preprocessed_data/')

data_manager.preprocess()
print(data_manager.captions[0])
print(data_manager.word_frequencies[0:20])

preprocessed_data_path = root_path + 'preprocessed_data/'
generator = Generator(data_path=preprocessed_data_path,
                      batch_size=batch_size)

num_training_samples =  generator.training_dataset.shape[0]
num_validation_samples = generator.validation_dataset.shape[0]
print('Number of training samples:', num_training_samples)
print('Number of validation samples:', num_validation_samples)

model = NIC(max_token_length=generator.MAX_TOKEN_LENGTH,
            vocabulary_size=generator.VOCABULARY_SIZE,
            rnn='gru',
            num_image_features=generator.IMG_FEATS,
            hidden_size=128,
            embedding_size=128)

model.compile(loss='categorical_crossentropy',
              optimizer = 'adam',
              metrics=['accuracy'])

print(model.summary())
print('Number of parameters:', model.count_params())

training_history_filename = preprocessed_data_path + 'training_history.log'
csv_logger = CSVLogger(training_history_filename, append=False) 
model_names = ('../trained_models/IAPR_2012/' +
               'iapr_weights.{epoch:02d}-{val_loss:.2f}.hdf5')
model_checkpoint = ModelCheckpoint(model_names,                 #Callback
                                   monitor='val_loss',
                                   verbose=1,
                                   save_best_only=False,
                                   save_weights_only=False)

reduce_learning_rate = ReduceLROnPlateau(monitor='val_loss', factor=0.1,  #Callback
                                         patience=5, verbose=1)

callbacks = [csv_logger, model_checkpoint, reduce_learning_rate]

model.fit_generator(generator=generator.flow(mode='train'), 
                    steps_per_epoch=int(num_training_samples / batch_size),
                    epochs=num_epochs,
                    verbose=1,
                    callbacks=callbacks,
                    validation_data=generator.flow(mode='validation'),
                    validation_steps=int(num_validation_samples / batch_size))

evaluator = Evaluator(model, data_path=preprocessed_data_path,
                      images_path=root_path + 'iaprtc12/')

evaluator.display_caption()

在 Spyder 中設置有什么問題嗎? 在 anoconda 提示中,“激活 tensorflow”之前和“激活 tensorflow”之后的 pip keras 有什么區別嗎?非常感謝。

這可能是您的 keras 安裝問題。 如果您已經嘗試安裝它:

$ conda install keras

它沒有用,我建議卸載它,然后用 pip3 重新安裝它:

$ conda uninstall keras
$ sudo pip3 install keras

您可以通過在 Spyder 中導入 keras 來檢查它是否有效:

> import keras

錯誤可能是您使用了錯誤的環境。 在 anaconda navigator 中,在啟動 spyder 之前確保您處於正確的環境中

如果您使用的是 conda,那么最好盡可能使用 conda 安裝所有內容,而不是將其與 pip 混用。

conda 的目的是你可以創建多個環境,每個環境都安裝了不同的包,或者同一個包的不同版本,而不會引起沖突,因為一次只激活一個環境。 這些包包括 Python 本身和 Spyder。 因此,要在 Spyder 中使用 Python 模塊,您需要創建一個包含模塊和 Spyder 的 conda 環境:

conda create -n mykerasenv keras spyder

然后要使用該環境,您需要在啟動 Spyder 之前激活它:

activate mykerasenv # (or 'source activate mykerasenv' if that doesn't work)
spyder

根據您的 conda/Anaconda 安裝,您可以通過 Anaconda Navigator 和/或 Anaconda Start 菜單快捷方式執行相同的操作,但命令行版本應始終有效。

如果確實需要使用 pip 安裝無法通過 conda 獲取的包,則需要在創建並激活 conda 環境后執行此操作,以便 pip 將其安裝在正確的位置。

如果您已經嘗試將東西安裝到您的根 conda 環境中(即沒有先使用conda create創建一個新環境然后激活它),那么您最好卸載 Anaconda 並從頭開始。 如果其中任何一個令人困惑,我建議再次閱讀conda 文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM