为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕村9548890 2022-07-05 18:41:35
我正在研究手写数字识别问题,使用 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 像素图像相同的形状。(但这不会导致我失去该功能吗?)
查看完整描述

2 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

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

是的,如果你使用你提到的池,你可能也会丢失信息。

希望这可以帮助。


查看完整回答
反对 回复 2022-07-05
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

一种选择是如上所建议的 -例如,从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,254

Trainable params: 159,254

Non-trainable params: 0

_________________________________________________________________


查看完整回答
反对 回复 2022-07-05
  • 2 回答
  • 0 关注
  • 175 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信