Преодоление несовместимости между tensorflow 1.x и 2.x при попытке просмотреть активность слоя с помощью серверной части

#python #tensorflow #keras #libraries

#python #tensorflow #keras #библиотеки

Вопрос:

Я хотел бы запустить новые процедуры tensorflow, такие как:

     from tensorflow.keras.preprocessing import image_dataset_from_directory
 

для чего я получаю ошибку в 1.x:

Ошибка импорта: не удается импортировать имя image_dataset_from_directory

при сохранении более старой функциональности 1.x, например, запуск процедуры для просмотра активаций в различных слоях, таких как:

     K=tf.keras.backend
    func = K.function([base_model.input, K.learning_phase()],[layer.output for layer in base_model.layers if layer.output is not base_model.input]) 
 

для чего я получаю следующую ошибку в tf 2.x:

Ошибка значения: входные тензоры для функционала должны поступать из tf.keras.Input . Получено: 0 (отсутствуют метаданные предыдущего уровня).

Код:

     import tensorflow as tf
    from tensorflow.keras.preprocessing import image_dataset_from_directory

    IMG_SHAPE = (160, 160)   (3,)
    base_model = tf.keras.applications.MobileNetV2(input_shape=IMG_SHAPE,
                                                   include_top=False,
                                                   weights='imagenet')

    K=tf.keras.backend
    func = K.function([base_model.input, K.learning_phase()],[layer.output for layer in base_model.layers if layer.output is not base_model.input])
 

Документация, на которую я смотрел, предполагает, что проблема может иметь какое-то отношение к режиму активных вычислений, например https://github.com/tensorflow/tensorflow/issues/34201

Но я не могу понять, как это решить. Спасибо за предложения!

Ответ №1:

Как было предложено #34201, просто отключите быстрое выполнение и запустите остальную часть вашего кода

 import tensorflow as tf
tf.compat.v1.disable_eager_execution()
from tensorflow.keras.preprocessing import image_dataset_from_directory

IMG_SHAPE = (160, 160)   (3,)
base_model = tf.keras.applications.MobileNetV2(input_shape=IMG_SHAPE,
                                                   include_top=False,
                                                   weights='imagenet')

K=tf.keras.backend
func = K.function([base_model.input, K.learning_phase()],[layer.output for layer in base_model.layers if layer.output is not base_model.input])