Pan*_*mar 4 artificial-intelligence machine-learning supervised-learning deep-learning conv-neural-network
我正在使用CNN
输入图像的大小在哪里进行分类问题,64X64
并且我想使用预训练模型,例如VGG16,COCO或任何其他模型。但是问题是预训练模型的输入图像大小是224X224
。如何解决此问题。输入的图像大小是否有任何数据扩充方法。
如果我将输入图像的大小调整为,224X224
则图像出现模糊的可能性很大,这可能会影响训练。如果我错了,请纠正我。
另一个问题与预训练模型有关。如果我正在使用,transfer learning
那么通常我必须如何冻结预训练模型中的图层。考虑到我的分类与预训练的模型类非常不同。但是我想我们可以冻结它的前几层以获得图像的边缘,曲线等,这在所有图像中都很常见。
但是问题是预训练模型的输入图像大小是224X224。
我假设您使用Keras
/ Tensorflow
(其他DL框架相同)。根据Keras应用程序中的文档:
input_shape:可选的形状元组,仅当include_top为False时才指定(否则,输入形状必须为(224,224,3)(使用“ channels_last”数据格式)或(3,224,224)(使用“ channels_first”数据格式)。它应该有3个输入通道,宽度和高度应不小于48。例如(200,200,3)将是一个
因此,有两种方法可以解决您的问题:
1)244*244
通过现有库将输入图像的大小调整为,并使用VGG分类器[ include=true
]。
2)在VGG模型的顶部训练自己的分类器。如上述文档中所述,Keras
如果您的图像不同于244 * 244,则应训练自己的分类器[include=false]
。您可以使用以下方法轻松地执行此类操作:
inp = keras.layers.Input(shape=(64, 64, 3), name='image_input')
vgg_model = VGG19(weights='imagenet', include_top=False)
vgg_model.trainable = False
x = keras.layers.Flatten(name='flatten')(vgg_model)
x = keras.layers.Dense(512, activation='relu', name='fc1')(x)
x = keras.layers.Dense(512, activation='relu', name='fc2')(x)
x = keras.layers.Dense(10, activation='softmax', name='predictions')(x)
new_model = keras.models.Model(inputs=inp, outputs=x)
new_model.compile(optimizer='adam', loss='categorical_crossentropy',
metrics=['accuracy'])
Run Code Online (Sandbox Code Playgroud)
如果我使用转移学习,那么通常来说我必须如何冻结预训练模型中的图层
这实际上取决于您的新任务,您拥有多少培训示例,您的预训练模型是什么以及许多其他事情。如果我是您,那么我首先会丢弃预训练的模型分类器。然后,如果不起作用,请删除其他一些卷积层,并逐步进行操作,直到获得良好的性能为止。
归档时间: |
|
查看次数: |
2652 次 |
最近记录: |