我训练了一个输入形状为(224,224,3)的模型,我想把它改成(300,300,3)。例如:
resnet50 = tf.keras.models.load_model(path_to_model)
model = tf.keras.models.Model([Input(shape=(300, 300, 3))], [resnet50.output])
# or
resnet50.inputs[0].set_shape([None, 300, 300, 3])
行不通。
我看到保留的模型允许不同的输入形状,但调整了孔网络架构,例如,卷积通道的大小。我想知道我是否需要做类似的事情,或者对于一个训练好的模型来说,不可能改变输入形状。
这只适用于卷积层,因为它们不关心input_shape
,因为它们只是滑动过滤器。然而,如果你的模型是在RGB图像上训练的,那么new_input
形状也应该有3个通道。
的例子:
first_model = VGG16(weights = None, input_shape=(224,224,3), include_top=False)
first_model.summary()
>> input_6 (InputLayer) [(None, 224, 224, 3)] 0
第二个模型:
new_input = tf.keras.Input((300,300,3))
x = first_model.layers[1](new_input) # First conv. layer
for new_layer in first_model.layers[2:]:
x = new_layer(x) # loop through layers using Functional API
second_model = tf.keras.Model(inputs=new_input, outputs=x)
second_model.summary()
>>
Layer (type) Output Shape Param #
=================================================================
input_9 (InputLayer) [(None, 300, 300, 3)] 0
tf.keras.applications.ResNet50(include_top=False, input_shape=[300,300,3])
input_shape:可选的形状元组,只有当include_top为False时才指定(否则输入形状必须为(224,224,3)(具有'channels_last'数据格式)或(3,224,224)(具有'channels_first'数据格式)。它应有3个输入通道,宽度和高度应不小于32。例如(200,200,3)就是一个有效值。