如何在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))

但这次尝试给了我CCD_ 5;我以前发生过这个错误,更改batch_size消除了这个错误。但现在,即使我把batch_size改得尽可能小,但最终还是会出错。我想知道在上面的图像网上训练CNN的方式可能不正确,或者在我的尝试中出现了错误。

更新

我想了解如何使用预先训练的权重(即imagenet上的ResNet50(来训练卷积神经网络;我不知道如何在tensorflow中完成这项工作。有人能提供可行的方法来实现这一目标吗?感谢

有人能指出我的尝试出了什么问题吗?在imagenet上用cifar10训练最先进的CNN模型的正确方法是什么?有人能在tensorflow中分享可能的想法或有效的方法吗?知道吗?谢谢

您可能会收到此错误,因为您试图同时将内存(RAM(分配给整个数据。首先,您可能使用numpy数组来存储图像,然后将这些图像转换为tensors。因此,即使在创建任何东西之前,您就已经拥有了2倍的内存。最重要的是,resnet是一个非常重的模型,所以您试图同时传递整个数据。这就是模型与batches一起工作的原因。尝试使用tf.data.Dataset文档创建生成器,或者使用非常简单的keras.preprocessing.Image.ImageDataGenerator类。它很容易使用。您可以将图像文件的地址保存在Datarame列中,另一列代表类并使用.flow_from_directory。如果您的图像保存在目录中,也可以使用flow_from_directory

检查文档

相关内容

最新更新