Это нормально, если запустить в приглашении anaconda, но ModuleNotFoundError: В Spyder нет модуля с именем «keras» - PullRequest
0 голосов
/ 12 мая 2018

Я запускаю проект, скачанный с GitHub . Странно, если я запускаю его в приглашении anaconda, все в порядке, но если я запускаю его в Spyder, он появляется (я установил anaconda и Sypder в win10, а также keras):

runfile ( 'E: /MySourceCode/neural_image_captioning-master-oarriaga/src/train.py', wdir = 'Е: / MySourceCode / neural_image_captioning-мастер-oarriaga / SRC') Перезагруженные модули: оценщик, генератор Traceback (самый последний вызов последний):

Файл "", строка 1, в runfile ( 'E: /MySourceCode/neural_image_captioning-master-oarriaga/src/train.py', wdir = 'Е: / MySourceCode / neural_image_captioning-мастер-oarriaga / SRC')

Файл "D: \ ProgramData \ Anaconda3 \ Lib \ сайт-пакеты \ Spyder \ Utils \ сайт \ sitecustomize.py", строка 710, в runfile execfile (имя файла, пространство имен)

Файл "D: \ ProgramData \ Anaconda3 \ Lib \ сайт-пакеты \ Spyder \ Utils \ сайт \ sitecustomize.py", строка 101, в execfile exec (compile (f.read (), filename, 'exec'), пространство имен)

Файл "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, есть ли какая-то разница, пока pip keras перед "активировать tenorflow" и после "активировать tenorflow"? Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Если вы используете conda, то лучше установить все вместе с conda, чем смешивать с pip.

Цель conda состоит в том, чтобы вы могли создавать несколько сред, в каждой из которых установлены разные пакеты, или разные версии одного и того же пакета, не вызывая конфликтов, поскольку одновременно активируется только одна среда. Эти пакеты включают в себя сам Python и Spyder. Поэтому для использования модуля Python с Spyder вам необходимо создать среду conda, содержащую как модуль, так и Spyder:

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 docs .

0 голосов
/ 13 мая 2018

Это может быть проблема с вашей установкой keras.Если вы уже пытались установить его с:

$ conda install keras

, и он не работал, я предлагаю удалить его, а затем переустановить с помощью pip3:

$ conda uninstall keras
$ sudo pip3 install keras

Вы можете проверить, работает ли онимпортируя керасы в Spyder:

> import keras
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...