#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 каналов?