你能在Tensorflow中改变训练模型的输入形状吗?



我训练了一个输入形状为(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)就是一个有效值。

相关内容

  • 没有找到相关文章

最新更新