Распространенная ошибка в тензорном потоке: «Modulenotfounderror нет модуля с именем tensorflow.keras». В этом уроке я объясню различные подходы к устранению этой ошибки.
- Что означает ошибка
- С именем «tensorflow.keras.engine»
- С именем «tensorflow.keras.layers.merge»
- С именем «tensorflow.keras.wrappers»
- Заключение
Что означает ошибка
Это означает, что Python не находит подмодуль с именем keras библиотеки TensorFlow. Причин этой ошибки может быть несколько.
Первая ошибка, которую вы можете допустить, — это неправильный импорт модуля, если вы введете что-то вроде команды ниже.
import tensorflow.Keras
Вы получаете сообщение об ошибке Modulenotfounderror, нет модуля с именем tensorflow Keras. При импорте модуля Keras вы указываете что-то вроде этого «tensorflow.Keras», но здесь, в Keras, k должно быть маленьким, как этот tensorflow.keras.
Итак, полное исправление этой ошибки приведено ниже.
import tensorflow.keras
Выполнение вышеописанного не приводит к ошибке и импортирует модуль keras из TensorFlow в вашу среду.
Второй ошибкой могут быть разные версии TensorFlow и Keras. Если вы используете старую версию TensorFlow, например 1.1 или ниже, возможно, вам также придется установить Keras.
Так, например, если вы используете TensorFlow 1, а версия Karas — 1.1, вы получите сообщение об ошибке «нет модуля с именем tensorflow Keras».
Здесь вам нужно сохранить одну и ту же версию TensorFlow и Keras. Но помните, что после Keras версия 2.0 стала частью tensorflow, начиная с версии tf=2.0.
Это означает, что вам не нужно устанавливать или получать доступ к Keras отдельно при установке TensorFlow, как показано ниже.
import keras model = keras.Sequential()
Но если вы используете последнюю версию TensorFlow, например, выше 2.0, вы можете выполнить следующую процедуру, чтобы получить доступ к Keras и определить модель.
Поэтому при импорте модуля убедитесь, что вы используете правильные опечатки и орфографию.
Давайте создадим простую модель, используя модуль keras.
import tensorflow as tf from tensorflow.keras import layers new_model = tf.keras.Sequential( [ layers.Dense(3, activation="relu", name="layer1"), layers.Dense(1, activation="relu", name="layer2"), layers.Dense(2, name="layer3"), ] ) tens_1 = tf.ones((3, 3)) tens_2 = new_model(tens_1) new_model.summary()
Посмотрите, new_model создается с помощью модуля tensorflow.keras. Особенно используя эту модель, вы можете создавать или определять нейронные сети или модели глубокого обучения в TensorFlow.
Третья ошибка — импорт модуля Keras из TensorFlow в старую версию TensorFlow, например tensorflow==1.14.0, поэтому убедитесь, что вы установили последнюю версию TensorFlow.
Существует еще одна форма этой ошибки: модульnotfounderror: нет модуля с именем «tensorflow.keras». «tensorflow» не является пакетом, поэтому примените описанный выше подход.
Чтобы убедиться, что вы установили последнюю версию Tensorflo.
С именем «tensorflow.keras.engine»
Вы получаете эту ошибку, потому что пытаетесь напрямую получить доступ к внутреннему компоненту Keras. Кроме того, нет подмодуля с именем tensorflow.keras.engine.
Так что исполняйте; вы получите эту ошибку, когда выполните приведенный ниже код.
import tensorflow.keras.engine
Вы получаете эту ошибку, потому что все подмодули в keras.engine перемещаются в разные модули, начиная с tensorflow 2.xxx.
Решение вышеуказанной ошибки приведено ниже в коде.
from tensorflow.keras.layers import Layer, InputSpec result= tf.keras.layers.InputSpec(dtype=None, shape=(2,2),ndim=None) print(result)
С именем «tensorflow.keras.layers.merge»
Во-первых, ошибка означает отсутствие модуля с именем keras.layers.merge в последней версии TensorFlow.
Целью этого keras.layers.merge является преобразование нескольких слоев в один, что означает, что многомерные тензоры преобразуются в одиночные тензоры.
При свертке 3D-слои преобразуются в 1D-слои, что сокращает объем памяти. Кроме того, модель лучше всего работает с одномерными слоями или одномерными тензорами.
Позвольте мне показать вам возможный способ получения этой ошибки при импорте, как показано ниже.
from tensorflow.keras.layers.merge import concatenate
Итак, у меня есть следующие два подхода к устранению этой ошибки.
Первый подход — импортировать объединение из tensorflow.layers вместо tensorflow.layers.merge, как показано ниже.
from tensorflow.keras.layers import concatenate print(concatenate)
Посмотрите на картинку: конкатенат был успешно импортирован из модуля tensorflow.keras.layers.
Второй подход заключается в непосредственном использовании фреймворка keras, поэтому используйте команду ниже, чтобы импортировать объединение из keras.layers.
from keras.layers import concatenate print(concatenate)
Подход зависит от вас, используя тензорный поток, используйте первый подход, в противном случае второе было бы лучше.
Теперь я покажу полный пример использования concatenate() из tensorflow.keras.layers. В этом примере вы будете использовать функцию tf.keras.layers.concatenate() для объединения двух входных слоев.
Синтаксис:
tf.keras.layers.concatenate( inputs, axis=-1, **kwargs )
- Где он состоит из нескольких параметров
- входы: этот параметр определяет список входных тензоров.
- ось: по умолчанию принимает значение -1 и определяет ось конкатенации.
- **kwargs: этот параметр указывает параметры ключевого слова стандартного слоя.
Теперь протестируйте на примере.
import tensorflow as tf import numpy as np from keras.layers import concatenate USA_based_random_num = np.arange(20).reshape(2, 2, 5) print(USA_based_random_num ) sample_num = np.arange(20, 30).reshape(2, 1, 5) print(sample_num) result= tf.keras.layers.concatenate([USA_based_random_num , sample_num],axis=1) print(result)
Здесь вышеописанное создало два входных слоя: USA_based_random_num и sample_num. Это не настоящие слои, а, например, рассматриваемые как слои.
Эти два слоя теперь передаются в функцию concatenate() с осью = 1. Затем слои выравниваются по оси 1, или, другими словами, из многомерного массива создается одно измерение массива.
С именем «tensorflow.keras.wrappers»
Ошибка Modulenotfounderror: нет модуля с именем «tensorflow.keras.wrappers» означает, что в подмодуле «tensorflow.keras» нет подпакетов, называемых обертками.
У меня есть два подхода к устранению этой ошибки, которые обсуждаются ниже.
Вы получите сообщение об ошибке, поскольку вы можете импортировать некоторые из приведенных ниже функций.
from tensorflow.keras.wrappers.scikit_learn import KerasRegressor
Здесь, в tensorflow.kera, осуществляется доступ к обертке.scikit_learn. Эта штука keras.wrappers не существует. Но если вы используете версию tensorflow, например 2.15 или выше, модуль keras.wrappers был удален, поэтому обычно вы получаете сообщение об ошибке.
Если вы все еще хотите его использовать, я предлагаю вам удалить текущую версию Tensorflow и установить версию 2.15, как показано ниже.
pip uninstall tensorflow pip install tensorflow==2.12.0
Используя приведенную выше команду, удалите установленный в данный момент тензорный поток и установите конкретную версию 2.12.0.
Как показано ниже, импортируйте KerasRegressor из tensorflow.keras.wrappers.scikit_learn.
from tensorflow.keras.wrappers.scikit_learn import KerasRegressor print(KerasRegressor)
Итак, альтернативный подход — установить пакет scikeras, а затем импортировать KerasRegressor или KerasClassifier и т. д.
Следуйте инструкциям ниже, чтобы установить пакет.
!pip install scikeras
Затем снова используйте оператор импорта, как показано ниже.
from scikeras.wrappers import KerasRegressor print(KerasRegressor)
Смотрите, я успешно импортировал KerasRegressor из scikeras. Это зависит от того, какой подход вы примете.
Заключение
В этом руководстве по тензорному потоку вы узнали о различных решениях ошибки «Modulenotfounderror нет модуля с именем tensorflow.keras».
Кроме того, вы узнали, как устранить эти ошибки. Modulenotfounderror нет модуля с именем «tensorflow.keras.engine» и Modulenotfounderror нет модуля с именем «tensorflow.keras.layers.merge».