【问题标题】:It's OK if run in anaconda prompt but ModuleNotFoundError: No module named 'keras' in Spyder如果在 anaconda 提示符下运行,但 ModuleNotFoundError: No module named 'keras' in Spyder
【发布时间】:2018-10-22 19:05:31
【问题描述】:

我运行一个从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') 重新加载的模块:评估器、生成器 Traceback(最近调用 最后):

文件“”,第 1 行,在 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(文件名,命名空间)

文件 "D:\ProgramData\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", 第 101 行,在 execfile 中 exec(编译(f.read(),文件名,'exec'),命名空间)

文件 "E:/MySourceCode/neural_image_captioning-master-oarriaga/src/train.py", 第 3 行,在 从 keras.callbacks 导入 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 中设置有什么问题吗?在 anconda 提示符下,pip keras 在“激活 tensorflow”之前和“激活 tensorflow”之后有什么区别吗?非常感谢。

【问题讨论】:

标签: python tensorflow keras spyder


【解决方案1】:

这可能是您的 keras 安装的问题。如果您已经尝试通过以下方式安装它:

$ conda install keras

还是不行,建议先卸载再用pip3重新安装:

$ conda uninstall keras
$ sudo pip3 install keras

您可以通过在Spyder中导入keras来检查它是否有效:

> import keras

【讨论】:

  • 感谢您回答我的帖子,但我还有 2 个问题。在 anconda 提示符下,在“激活 tensorflow”之前和“激活 tensorflow”之后 pip keras 有什么区别吗?我安装了 anaconda,anaconda 集成了 Spyder。我在 Spyder 控制台中尝试了“导入 keras”,它响应“没有名为 keras 的模块”。但是我在anaconda提示符下“激活tensorflow”之后尝试了“pip list”,我可以看到keras已经存在。顺便说一句,在“激活tensorflow”之前,我是看不到的。
  • 在 anaconda 提示符下重新安装 keras?我已经尝试卸载并重新安装它,但在 Spyder 中仍然出现同样的错误。
【解决方案2】:

如果您使用的是 conda,那么最好尽可能使用 conda 安装所有内容,而不是将其与 pip 混合使用。

conda 的目的是您可以创建多个环境,每个环境都安装了不同的包,或者同一包的不同版本,而不会引起冲突,因为一次只激活一个环境。这些包包括 Python 本身和 Spyder。因此,要将 Python 模块与 Spyder 一起使用,您需要创建一个包含模块和 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 开始菜单快捷方式执行相同的操作,但命令行版本应该始终有效。

如果您确实需要使用 pip 安装无法通过 conda 获取的包,则需要在创建并激活 conda 环境后执行此操作,以便 pip 将其安装在正确的位置。

如果您尝试将东西安装到您的根 conda 环境中(即没有先使用 conda create 创建新环境然后激活它),那么您最好卸载 Anaconda 并从头开始。如果其中任何一个令人困惑,我建议您再次阅读conda docs

【讨论】:

  • @netomatic 嗨,感谢您的帮助。我有一个名为 tensorflow 的环境,但在“激活 tensorflow”并输入“Spyder”或“spyder”后,我得到“Spyder/spyder 无法识别为内部或外部命令、可运行程序或批处理文件。我想知道是否有其他需要做的步骤,比如“conda install spyder”或者“conda install anaconda”?但是我的Win10上已经安装了anaconda,否则我不会有Anaconda Navigator、Anaconda Prompt等。谢谢。
  • 我之前在 anaconda 提示符下运行过“pip install keras”,我的项目运行良好。为什么在 Spyder 中它无法正常运行并报告“没有名为 keras 的模块”? anaconda提示是否与sypder不同步,需要分别安装包吗?
  • 这听起来好像你的tensorflow 环境中没有安装 Spyder - 要么你的安装搞砸了,你应该重新开始。查看我的编辑。
【解决方案3】:

错误可能是您使用了错误的环境。在 anaconda navigator 中,确保您在启动 spyder 之前处于正确的环境中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-05
    • 2022-12-27
    • 2022-12-27
    相关资源
    最近更新 更多