繁体   English   中英

如何使用预训练的权重在 tensorflow 中训练卷积神经网络?

[英]How to use pre-trained weight for training convolutional NN in tensorflow?

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

我目前的尝试

在此要点中查看我的整个实现

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 model 的正确方法是什么? 任何人都可以在 tensorflow 中分享可能的想法或有效的方法吗? 任何想法? 谢谢!

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

查看文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM