当我使用我的数据集打开Keras中的Resnet-50时(后端是张量流), 我觉得很奇怪,在每个时代之后,val比火车慢。 我不知道为什么,是因为我的GPU没有足够的内存?我的GPU是K2200,有4 GB内存。 我是否误解了这段话的意思?
我有35946火车图片所以我使用:
samples_per_epoch=35946,
我有8986 val pic所以我使用:
nb_val_samples=8986,
以下是我的代码的一部分:
train_datagen = ImageDataGenerator(
rescale=1./255,
featurewise_center=False, # set input mean to 0 over the dataset
samplewise_center=False, # set each sample mean to 0
featurewise_std_normalization=False, # divide inputs by std of the dataset
samplewise_std_normalization=False, # divide each input by its std
zca_whitening=False, # apply ZCA whitening
rotation_range=20, # randomly rotate images in the range (degrees, 0 to 180)
width_shift_range=0.1, # randomly shift images horizontally (fraction of total width)
height_shift_range=0.1, # randomly shift images vertically (fraction of total height)
horizontal_flip=True, # randomly flip images
vertical_flip=False,
zoom_range=0.1,
channel_shift_range=0.,
fill_mode='nearest',
cval=0.,
)
test_datagen = ImageDataGenerator(rescale=1. / 255)
train_generator = train_datagen.flow_from_directory(
'data/train',
batch_size=batch_size,
class_mode='categorical')
validation_generator = test_datagen.flow_from_directory(
'data/val',
batch_size=batch_size,
class_mode='categorical')
model.fit_generator(train_generator,
# steps_per_epoch=X_train.shape[0] // batch_size,
samples_per_epoch=35946,
epochs=epochs,
validation_data=validation_generator,
verbose=1,
nb_val_samples=8986,
callbacks=[earlyStopping,saveBestModel,tensorboard])
答案 0 :(得分:1)
@Yanning正如您在评论中提到的那样,第一个时期很慢,因为ImageDataGenerator正在从磁盘读取数据到RAM。这部分很慢。将数据读入RAM后,只需读取数据并将数据从RAM传输到GPU即可。
因此,如果您的数据集不是很大并且可以放入RAM中,您可以尝试从所有数据集中生成一个numpy文件,并在开头读取此数据。这将节省大量的磁盘寻道时间。
请查看此帖子,以便对不同操作所花费的时间进行比较:
Latency Numbers Every Programmer Should Know
Main memory reference 100 ns Read 1 MB sequentially from memory 250,000 ns Read 1 MB sequentially from SSD 1,000,000 ns Read 1 MB sequentially from disk 20,000,000 ns
答案 1 :(得分:0)
我认为答案在于“ fit_generator”函数的各种参数选择。 我遇到了同样的问题,并通过在“ fit_generator”函数中使用以下参数解决了该问题。
steps_per_epoch=training_samples_count // batch_size,
validation_steps=validation_samples_count // batch_size,
请注意,我已经指定了验证和培训的步骤,这使验证变得非常快捷。