【问题标题】:How to use pre-trained weight for training convolutional NN in tensorflow?如何使用预训练的权重在 tensorflow 中训练卷积神经网络?
【发布时间】:2020-12-07 05:13:32
【问题描述】:

在我的实验中,我想在 imagenet 上用 cifar10 训练卷积神经网络 (CNN),我使用了ResNet50。由于 cifar10 是 32x32x3 的图像集,而 ResNet50 使用 224x224x3。为此,我需要调整输入图像的大小以便在 imagenet 上训练 CNN。但是,我尝试在 imagenet 上训练简单的CNN

我目前的尝试

请看my whole implementation in this gist:

base_model = ResNet50(weights='imagenet', include_top=False, input_shape=(224, 224, 3))
x = Conv2D(32, (3, 3))(base_model.output)
x = Activation('relu')(x)
x = MaxPooling2D(pool_size=(2,2))(x)
x = Flatten()(x)
x = Dense(256)(x)
x = Dense(10)(x)
x = Activation('softmax')(x)
outputs = x
model = models.Model(base_model.input, outputs)
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X_train, y_train, batch_size=50, epochs=3, verbose=1, validation_data=(X_test, y_test))

但是这次尝试给了我ResourceExhaustedError;我之前发生过这个错误,更改batch_size 删除了错误。但是现在即使我将batch_size 更改得尽可能小,但仍然会出现错误。我想知道上面在 imagenet 上训练 CNN 的方式在我的尝试中可能不正确或有问题。

更新

我想了解如何使用预训练的权重(即 imagenet 上的 ResNet50)来训练卷积神经网络;我不确定如何在 tensorflow 中完成这项工作。任何人都可以提供可能的可行方法来解决这个问题吗?谢谢

谁能指出我的尝试出了什么问题?在 imagenet 上使用 cifar10 训练最先进的 CNN 模型的正确方法是什么?任何人都可以在张量流中分享可能的想法或有效的方法吗?任何想法?谢谢!

【问题讨论】:

  • 为 CIFAR10 训练的 ResNet 不使用 224x224 的大小,而只是 32x32,为此您需要从头开始训练网络,而不使用预训练的权重。
  • @Dr.Snoopy 我想在使用Conv2D 之前使用预训练的权重。你能分享一下可能的想法吗?谢谢

标签: python tensorflow conv-neural-network


【解决方案1】:

您可能会收到此错误,因为您试图一次将内存 (RAM) 分配给整个数据。对于初学者,您可能使用numpy arrat 来存储图像,然后将这些图像转换为tensors。因此,即使在创建任何内容之前,您就已经拥有 2 倍的内存。最重要的是,resnet 是非常重的模型,因此您试图一次传递整个数据。这就是模型使用batches 的原因。尝试使用tf.data.Dataset documentation 或使用非常简单的keras.preprocessing.Image.ImageDataGenerator 类来创建生成器。这是非常容易使用。您可以将图像文件的地址保存在Datarame 列中,另一列代表类并使用.flow_from_directory。或者你可以使用flow_from_directory,如果你有你的图片保存在目录中。

Checkout the documentation

【讨论】:

  • 我已经用了 4 T4 GPU,还是不行。此外,我没有尝试将 RAM 分配给整个数据。请在回答之前查看my attempt in this gist。谢谢
  • 这与 T4GPU 无关。尝试使用 ImageData Generator 或创建自己的批处理。你会做得很好。
  • 我不关注。您可以根据我上面的要点尝试一下要点吗?谢谢
  • 只需导入ImageDataGenerator 关注this official tutorial
  • 我知道它是用于数据增强的,但您如何确定这会解决问题。你调查过我的尝试了吗?
最近更新 更多