繁体   English   中英

如何使用 Scikit-Learn 的 RandomizedSearchCV 和 Tensorflow 的 ImageDataGenerator

[英]How to use RandomizedSearchCV of Scikit-Learn with ImageDataGenerator of Tensorflow

我正在尝试使用 ImageDataGenerators 实现 RandomizedSearchCV。

下面是用于训练集的生成器示例:

train_datagen = ImageDataGenerator(rotation_range=20,
                                        rescale=1./255,
                                        shear_range=0.2,
                                        zoom_range=0.25,
                                        horizontal_flip=True,
                                        width_shift_range=0.2,
                                        height_shift_range=0.2)

train_generator = train_datagen.flow_from_directory(paths["train_path"],
                                                batch_size=train_batch_size,
                                                class_mode='binary',
                                                target_size=(image_shape[0], image_shape[1]))

我对validation_generator做了同样的事情,最后模型被拟合为:

model_history = model.fit(train_generator, 
                        epochs=200, 
                        steps_per_epoch=train_steps_per_epoch,
                        validation_data=validation_generator, 
                        validation_steps=valdation_steps_per_epoch,
                        callbacks=[callbacks.EarlyStopping(patience=20)])

我想应用网格搜索(使用 sklearn RandomizedSearchCV)来优化我的模型,因此我使用了 SciKeras:

rnd_search_cv = RandomizedSearchCV(keras_reg, param_distribs, n_iter=10, cv=3)

其中keras_reg是包装KerasClassifier模型的 KerasClassifier, param_distribs是具有超参数值的字典。

最后我安装了 RandomizedSearchCV 对象,如下所示:

rnd_search_cv.fit(train_generator, 
                epochs=200, 
                steps_per_epoch=train_steps_per_epoch,
                validation_data=validation_generator, 
                validation_steps=valdation_steps_per_epoch,
                callbacks=[callbacks.EarlyStopping(patience=20)])

我有以下错误:

Traceback (most recent call last):
File "/home/docker_user/.local/lib/python3.8/site-packages/sklearn/model_selection/_validation.py", line 684, in _fit_and_score
    estimator.fit(X_train, **fit_params)
TypeError: fit() missing 1 required positional argument: 'y'

你知道如何整合 RandomizedSearchCV 和 ImageDataGenerator 对象吗?

我不推荐以下解决方案和方法。 我强烈建议使用KerasTuner ,但如果你想像keras.preprocessing.image.DirectoryIterator一样将train_generator输入到RandomizedSearchCV ,你需要从DirectoryIterator中提取XY ,然后将它们输入到 RandomizedSearchCV,如下所示:

import numpy  as np

len_dataset = 100
batch_size = 32
image_size = (150,150)
channel_images = 3
num_clases = 5
x_train = np.empty((len_dataset*batch_size, 
              image_size[0], 
              image_size[1], 
              channel_images))
y_train = np.empty((len_dataset*batch_size, num_clases))

for idx in range(len_dataset):
    x_batch, y_batch = train_generator.__getitem__(idx)
    for i in range(x_batch.shape[0]):
        x_train[idx*batch_size+i] = x_batch[i]
        y_train[idx*batch_size+i] = y_batch[i]

rnd_search_cv.fit(x_train, y_train)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM