如何确定Keras ImageDataGenerator中测试数据集的最佳“步数”和“批量大小”?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何确定Keras ImageDataGenerator中测试数据集的最佳“步数”和“批量大小”?相关的知识,希望对你有一定的参考价值。
我已经训练了图像相似度网络。该网络旨在区分相似/不相似的图像对。
其中一对包含摄像机图像及其对应的草图图像。
测试数据集包含4个图像目录(camera_positive,sketch_positive,camera_negative,sketch_negative)。
我在测试数据集上评估网络性能时遇到问题。
由于测试数据集非常适合内存,所以我决定使用Keras ImageDataGenerator。
我实现了以下代码。每个目录包含20个图像(用于小型演示)。
因此,总共有80张图像和40个预测。
由于ImageDataGenerator为我们提供了保存我使用的图像“ save_to_dir”参数的选项,如以下代码所示,以验证其工作正确。
每个目录包含20张图像,因此,我希望在运行预测后它将相同的图像保存到指定的目录中。
运行代码后,它在每个文件夹中生成31张图像,而不是20张!
我使用不同的步长,但没有人给出准确的结果。
此代码有什么问题。请提出建议!
import os
import numpy as np
from keras.models import load_model
from keras.preprocessing.image import ImageDataGenerator
batch_size = 1
image_size = 224
class_mode = None
"""
c_pos/neg: camera positive/neg image
s_pos/neg: sketch positive/neg image
"""
c_pos = r"testing\c_pos"
c_neg = r"testing\c_neg"
s_pos = r"testing\s_pos"
s_neg = r"testing\s_neg"
datagen_constructor = ImageDataGenerator()
def initialize_generator(generator, c_pos, s_pos, c_neg, s_neg):
camera_pos=generator.flow_from_directory(
c_pos,
target_size=(image_size, image_size),
color_mode="rgb",
batch_size=batch_size,
class_mode=class_mode,
shuffle = False,
seed=7,
save_to_dir='results/c_pos',
save_format='jpeg',
save_prefix='CPOS'
)
sketch_pos=generator.flow_from_directory(
s_pos,
target_size=(image_size, image_size),
color_mode="rgb",
batch_size=batch_size,
class_mode=class_mode,
shuffle = False,
seed=7,
save_to_dir='results/s_pos',
save_format='jpeg',
save_prefix='SPOS'
)
camera_neg=generator.flow_from_directory(
c_neg,
target_size=(image_size, image_size),
color_mode="rgb",
batch_size=batch_size,
class_mode=class_mode,
shuffle = False,
seed=7,
save_to_dir='results/c_neg',
save_format='jpeg',
save_prefix='CNEG'
)
sketch_neg=generator.flow_from_directory(
s_neg,
target_size=(image_size, image_size),
color_mode="rgb",
batch_size=batch_size,
class_mode=class_mode,
shuffle = False,
seed=7,
save_to_dir='results/s_neg',
save_format='jpeg',
save_prefix='SNEG'
)
while True:
camerapos = np.expand_dims(camera_pos.next(), axis=0)
sketchpos = np.expand_dims(sketch_pos.next(), axis=0)
cameraneg = np.expand_dims(camera_neg.next(), axis=0)
sketchneg = np.expand_dims(sketch_neg.next(), axis=0)
camera = np.concatenate((camerapos[0], cameraneg[0]))
sketch = np.concatenate((sketchpos[0], sketchneg[0]))
camera = np.asarray(list(camera), dtype=np.float32)
sketch = np.asarray(list(sketch), dtype=np.float32)
yield [camera, sketch]
test_datagen = initialize_generator(datagen_constructor, c_pos, s_pos, c_neg, s_neg)
# Load pre-trained model
model = load_model("model.h")
# Evaluating network performance on test dataset
predict = model.predict_generator(test_datagen, steps = 20)
答案
您可以手动遍历每个文件夹并进行如下预测:
model = load_model("model.h")
image_paths = [image.path for image in os.scandir(path_to_my_folder)]
for image_path in image_paths:
image = cv2.imread(image_path)
image_to_predict = np.expand_dims(image,axis=0) # this is important to add the batch index, keras only predicts on batches and here we have batch of size 1
prediction = model.predict(image_to_predict)
然后,您可以将每个预测与您知道属于的地面真相标签进行比较。
以上是关于如何确定Keras ImageDataGenerator中测试数据集的最佳“步数”和“批量大小”?的主要内容,如果未能解决你的问题,请参考以下文章