在我的实验中,我想在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
。
检查文档