от
Когда мы делаем передачи обучения в Keras2., Аргументы требуют "input_shape" и "input_tensor". Но я использую только input_tensor и еще никогда не использовал input_shape. Я думаю, что только input_tensor достаточно, и я не знаю, когда использовать input_shape. Как я должен использовать их по отдельности? Я использовал input_tensor и input_shape одновременно с отдельной стоимостью, и была принята только стоимость input_tensor и input_shape был проигнорирован.
vgg16_model = VGG16(include_top=False, weights='imagenet', 
                    input_tensor = Input(shape=(150, 150, 3)), 
                    input_shape=(224,224,3))

top_model = Sequential()
top_model.add(Flatten(input_shape=vgg16_model.output_shape[1:]))
top_model.add(Dense(256, activation='relu'))
top_model.add(Dense(1, activation='sigmoid'))
model = Model(input=vgg16_model.input, output=top_model(vgg16_model.output))

model.summary()
Layer (type)                 Output Shape              Param #   
================================================================
input_6 (InputLayer)         (None, 150, 150, 3)       0         
_________________________________________________________________
block1_conv1 (Conv2D)        (None, 150, 150, 64)      1792      
_________________________________________________________________
block1_conv2 (Conv2D)        (None, 150, 150, 64)      36928     
_________________________________________________________________
block1_pool (MaxPooling2D)   (None, 75, 75, 64)        0         
_________________________________________________________________
block2_conv......
Я ожидал, что я получаю некоторые ошибки в этом коде, но ошибки не было, и эта модель может принимать форму (150, 150, 3). Input_shape=(224,224,3) была проигнорирована. Можете ли вы дать мне немного помочь ? Спасибо.

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.

2 Ответы

0 голосов
от
Код
VGG16
, наверное, просто забыл проверить за два аргумента. Это не имеет смысла иметь обе, конечно. Вы используете
input_shape
, когда вы хотите, чтобы модель автоматически создавать свой собственный входной слой с размером. Вы используете
input_tensor
, когда у вас есть тензор, который вы хотите быть на входе. Вы можете использовать любой тензор в
input_tensor
, это предназначается, чтобы использовать результаты других моделей/слои в качестве вклада
VGG16
. Конечно, вы можете пройти манекен тензора входного, как ты, нет никаких оснований для код, чтобы жаловаться, он получил тензор, ОК. Единственное, что есть, что программист забыл проверить ", если оба аргумента существует, выбрасывается ошибка".
0 голосов
от
На самом деле, когда вы установите
input_tensor
аргумент, приведенный тензор (если это Керрас тензора) будет использоваться для ввода и поэтому аргумент
input_shape
будет игнорироваться. Здесь есть соответствующий раздел в исходном коде
keras:

if input_tensor is None:
    img_input = layers.Input(shape=input_shape)
else:
    if not backend.is_keras_tensor(input_tensor):
        img_input = layers.Input(tensor=input_tensor, shape=input_shape)
    else:
        img_input = input_tensor
Как видите, в последней строке данной
input_tensor
будет использоваться для тензора входного сигнала без учета
input_shape
.
...