猿问

我可以使用哪些不同维度的图像集作为预训练模型的输入?

我正在研究手写数字识别问题,使用 OpenCV 进行预处理,使用 Keras/Tensorflow 进行推理。我在 MNIST 手写数字数据集上训练了一个模型,其中每张图像都是 28x28 像素。现在我正在使用一组新的数字,我计划使用原始模型架构进行进一步的训练,并通过权重初始化进行迁移学习。

所以这是我的问题:当我缩小到 28x28 像素时,我遇到了丢失某些功能的问题。这是一个例子

这意味着是一个 2,顶部循环中的微小间隙对于帮助将其与 9 或 8 区分开来很重要。但是我的预处理版本失去了间隙,所以循环看起来是封闭的。


我已经发布了另一个关于如何在不丢失功能的情况下缩小尺寸的问题。另一方面,也许我想缩小到更大的尺寸,比如 56x56 像素,这样我就不太可能失去这些功能。我如何进行设置以使这个新尺寸与模型融为一体,而不会使预先训练的权重变得无用?


这是预训练模型的定义:


def define_model(learning_rate, momentum):

    model = Sequential()

    model.add(Conv2D(32, (3,3), activation = 'relu', kernel_initializer = 'he_uniform', input_shape=(28,28,1)))

    model.add(MaxPooling2D((2,2)))

    model.add(Conv2D(64, (3,3), activation = 'relu', kernel_initializer = 'he_uniform'))

    model.add(Conv2D(64, (3,3), activation = 'relu', kernel_initializer = 'he_uniform'))

    model.add(MaxPooling2D((2,2)))

    model.add(Flatten())

    model.add(Dense(100, activation='relu', kernel_initializer='he_uniform'))

    model.add(Dense(10, activation='softmax'))

    opt = SGD(lr=learning_rate, momentum=momentum)

    model.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['accuracy'])

    return model

这是我的一个想法:在第一层之后增加最大池内核的大小,以使该层的输出具有与我使用 28x28 像素图像相同的形状。(但这不会导致我失去该功能吗?)


慕村9548890
浏览 176回答 2
2回答

温温酱

为什么不升级 MNST 进行培训?您的问题是关于图像的分辨率,MNST 数据集是很久以前创建的,当时 GPU 内存还非常小。最近的模型都具有大于 的图像尺寸200 * 200,例如 resnet224*224用作输入形状。由于您的图像从一开始就已经是低分辨率的,并且您缩小了尺寸,您将使模型难以相互区分。由于您的模型相当简单,我建议升级训练数据集。是的,如果你使用你提到的池,你可能也会丢失信息。希望这可以帮助。

鸿蒙传说

一种选择是如上所建议的 -例如,从28x28到的高档初始数据集。56x56第二个选项是在训练模型的开头添加一个附加层MaxPooling或AveragePooling层,例如:new_input = Input(shape=(56, 56, 1), name='new_input')x = AveragePooling2D((2,2), name='avg_pool')(new_input)new_output = trained_model(x)new_model = Model(new_input, new_output)以下是新模型的摘要:_________________________________________________________________Layer (type)                 Output Shape              Param #   =================================================================new_input (InputLayer)       (None, 56, 56, 1)         0         _________________________________________________________________avg_pool (AveragePooling2D)  (None, 28, 28, 1)         0         _________________________________________________________________trained_model (Sequential)   (None, 10)                159254    =================================================================Total params: 159,254Trainable params: 159,254Non-trainable params: 0_________________________________________________________________
随时随地看视频慕课网APP

相关分类

Python
我要回答