当我们在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)被忽略了。
您能给我一点帮助吗?谢谢。
答案 0 :(得分:0)
VGG16
代码可能只是忘了检查两个参数。
当然,两者都没有意义。
input_shape
。 input_tensor
。 您可以在input_tensor
中使用 any 张量,这意味着可以将其他模型/图层的输出用作VGG16
的输入。当然,您可以像以前那样传递虚拟输入张量,没有理由让代码抱怨,它收到了张量,好的。
唯一的问题是,编码人员忘记了验证“如果两个参数都存在,则抛出错误”。
答案 1 :(得分:0)
实际上,当您设置input_tensor
参数时,给定的张量(假设它是Keras张量)将用于输入,因此input_shape
参数将被忽略。 Here是keras-applications
源代码中的相关部分:
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
。