已解决:根据这个github问题(https://github.com/keras-team/keras/issues/3946),使用flow_images_from_directory时,图像必须位于指定目录内的文件夹中(文件夹内的文件夹)。尝试在Python中运行此代码时,根据(“找到属于0类的0个图像”)消息发现了此消息。在R中,不会出现任何错误消息,并且predict_generator会永远运行。将图像放入test_dir中的文件夹(标题为“文件夹”)后,predict_generator迅速工作(20毫秒/步),并在猫和狗的图像上给出了有意义的结果。
原始帖子:
我们正在尝试使用微调的模型对未标记的图像进行预测。在此示例中,我们使用的模型取自Allaire和Chollet的Deep Learning With R(可从其github站点获得,下面的代码链接)。我们遇到的问题是,即使仅对一张图像进行预测,并在具有GPU的计算机上工作,该代码的predict_generator部分仍要运行18个小时才能完成。我们打算对约200K张图像进行预测,因此我们需要每个图像较短的运行时间。
(注意:我们认为我们的GPU参与了,基于它花费了几个小时来微调VGG来完成具有数百张训练图像的二进制分类任务。)
我们的代码改编自这篇文章:
How to evaluate() and predict() from generator like data in R keras
我们尝试使用类似的不确定运行时结果来遵循类似的示例:
https://www.kaggle.com/dkoops/keras-r-vgg16-base
我们需要对代码进行哪些更改以生成预测?每个图像的合理预期运行时间是多少(秒?)?
这是我们的代码:
library(keras)
####load cats and dogs model (taken from: https://github.com/jjallaire/deep-learning-with-r-notebooks)
model <- load_model_hdf5("cats_and_dogs_small_2.h5")
train_datagen = image_data_generator(
rescale = 1/255,
rotation_range = 40,
width_shift_range = 0.2,
height_shift_range = 0.2,
shear_range = 0.2,
zoom_range = 0.2,
horizontal_flip = TRUE,
fill_mode = "nearest"
)
#get data from https://www.kaggle.com/c/dogs-vs-cats/data. Put one image into folder test1image
test_dir<-"test1image"
test_generator <- flow_images_from_directory(
test_dir, # Target directory
train_datagen, # Data generator
target_size = c(150, 150), # Resizes all images to 150 × 150
batch_size = 1,
class_mode = "binary",
shuffle = FALSE# binary_crossentropy loss for binary labels
)
num_test_images = 1
y <- predict_generator(model, test_generator, steps=num_test_images,
verbose =1)