Распространенная ошибка в тензорном потоке: «Modulenotfounderror нет модуля с именем tensorflow.keras». В этом уроке я объясню различные подходы к устранению этой ошибки.

Содержание

Что означает ошибка

Это означает, что Python не находит подмодуль с именем keras библиотеки TensorFlow. Причин этой ошибки может быть несколько.

Первая ошибка, которую вы можете допустить, — это неправильный импорт модуля, если вы введете что-то вроде команды ниже.

import tensorflow.Keras

Ошибка с именем 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

Посмотрите, 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

С именем «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.keras.layers.merge»

Итак, у меня есть следующие два подхода к устранению этой ошибки.

Первый подход — импортировать объединение из tensorflow.layers вместо tensorflow.layers.merge, как показано ниже.

from tensorflow.keras.layers import concatenate

print(concatenate)

Конкатенат был успешно импортирован из модуля tensorflow.keras.layers

Посмотрите на картинку: конкатенат был успешно импортирован из модуля tensorflow.keras.layers.

Второй подход заключается в непосредственном использовании фреймворка keras, поэтому используйте команду ниже, чтобы импортировать объединение из keras.layers.

from keras.layers import concatenate

print(concatenate)

Решение с использованием второго подхода. Modulenotfounderror нет модуля с именем «tensorflow.keras.layers.merge».

Подход зависит от вас, используя тензорный поток, используйте первый подход, в противном случае второе было бы лучше.

Теперь я покажу полный пример использования 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)

С именем «tensorflow.keras.layers.merge»

Здесь вышеописанное создало два входных слоя: 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.keras.wrappers

Здесь, в tensorflow.kera, осуществляется доступ к обертке.scikit_learn. Эта штука keras.wrappers не существует. Но если вы используете версию tensorflow, например 2.15 или выше, модуль keras.wrappers был удален, поэтому обычно вы получаете сообщение об ошибке.

Если вы все еще хотите его использовать, я предлагаю вам удалить текущую версию Tensorflow и установить версию 2.15, как показано ниже.

pip uninstall tensorflow
pip install tensorflow==2.12.0

Как установить старую версию Tensorflow

Используя приведенную выше команду, удалите установленный в данный момент тензорный поток и установите конкретную версию 2.12.0.

Как показано ниже, импортируйте KerasRegressor из tensorflow.keras.wrappers.scikit_learn.

from tensorflow.keras.wrappers.scikit_learn import KerasRegressor
print(KerasRegressor)

Установка пакета scikeras

Итак, альтернативный подход — установить пакет scikeras, а затем импортировать KerasRegressor или KerasClassifier и т. д.

Следуйте инструкциям ниже, чтобы установить пакет.

!pip install scikeras

Затем снова используйте оператор импорта, как показано ниже.

from scikeras.wrappers import KerasRegressor
print(KerasRegressor)

Импортирт KerasRegressor из scikeras

Смотрите, я успешно импортировал KerasRegressor из scikeras. Это зависит от того, какой подход вы примете.

Заключение

В этом руководстве по тензорному потоку вы узнали о различных решениях ошибки «Modulenotfounderror нет модуля с именем tensorflow.keras».

Кроме того, вы узнали, как устранить эти ошибки. Modulenotfounderror нет модуля с именем «tensorflow.keras.engine» и Modulenotfounderror нет модуля с именем «tensorflow.keras.layers.merge».

Добавить комментарий