от
Когда мы делаем передачи обучения в 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
.
Добро пожаловать на сайт ByNets, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...