как решить ошибку входного тензора при использовании предварительно обученных моделей keras

#python #tensorflow #keras

Вопрос:

Я пытаюсь использовать предварительно подготовленную модель keras, как показано ниже, но для этого требуется, чтобы вход был тензором. может ли кто-нибудь помочь решить эту проблему?

 from keras.applications.vgg19 import VGG19 inputs = layers.Input(shape = (32,32,4))  vgg_model = VGG19(weights='imagenet', include_top=False) vgg_model.trainable = False  x = tensorflow.keras.layers.Flatten(name='flatten')(vgg_model) x = tensorflow.keras.layers.Dense(512, activation='relu', name='fc1')(x) x = tensorflow.keras.layers.Dense(512, activation='relu', name='fc2')(x) x = tensorflow.keras.layers.Dense(1,name='predictions')(x) new_model = tensorflow.keras.models.Model(inputs=inputs, outputs=x) new_model.compile(optimizer='adam', loss='mean_squared_error',   metrics=['mae'])  

ошибка:

 TypeError: Inputs to a layer should be tensors. Got: lt;keras.engine.functional.Functional object at 0x000001F48267B588gt;  

Ответ №1:

Если вы хотите использовать его в VGG19 качестве базовой модели, вам придется использовать его выходные данные в качестве входных данных для вашей пользовательской модели:

 import tensorflow as tf from keras.applications.vgg19 import VGG19   vgg_model = VGG19(weights='imagenet', include_top=False, input_shape=(32, 32, 3)) vgg_model.trainable = False  x = vgg_model.output x = tf.keras.layers.Dense(512, activation='relu', name='fc1')(x) x = tf.keras.layers.Dense(512, activation='relu', name='fc2')(x) x = tf.keras.layers.Dense(1, name='predictions')(x) new_model = tf.keras.Model(inputs=vgg_model.input, outputs=x) new_model.compile(optimizer='adam', loss='mean_squared_error',   metrics=['mae'])  new_model(tf.random.normal((1, 32, 32, 3)))  

Обратите внимание , что я удалил ваш Flatten layer , так как вывод из vgg_model него уже имеет форму (batch_size, features) .

Комментарии:

1. Мне нужно изменить размер ввода на (32,32,4). Разве это невозможно?, есть ли какой-либо способ изменить входное измерение?

2. Обновленный ответ. У вас может быть пользовательская форма, но у вас должно быть 3 канала (последнее измерение), у вас не может быть 4. Это просто ограничение VGG19 модели.

3. можно ли ввести данные в виде: inputs = layers.Input(shape = (32,32,3))

4. Да, я уже обновил эту опцию. Проверьте VGG19(*) деталь.

5. не могли бы вы, пожалуйста, сообщить мне, какая архитектура имеет возможность считывать более 3 каналов?