python依据数据生成函数曲线_python – 使用keras函数ImageDataGenerator()生成...

我正在尝试训练resnet50模型用于图像分类问题.我已经在我拥有的图像数据集上训练模型之前加载了’imagenet’预训练权重.我正在使用keras函数flow_from_directory()从目录加载图像.

train_datagen = ImageDataGenerator()

train_generator = train_datagen.flow_from_directory(

'./train_qcut_2_classes',

batch_size=batch_size,

shuffle=True,

target_size=input_size[1:],

class_mode='categorical')

test_datagen = ImageDataGenerator()

validation_generator = test_datagen.flow_from_directory(

'./validate_qcut_2_classes',

batch_size=batch_size,

target_size=input_size[1:],

shuffle=True,

class_mode='categorical')

我将生成器作为fit_generator函数中的参数传递.

hist2=model.fit_generator(train_generator,

samples_per_epoch=102204,

validation_data=validation_generator,

nb_val_samples=25547,

nb_epoch=80, callbacks=callbacks,

verbose=1)

题:

使用此设置,如何在将输入图像传递给模型之前使用preprocess_input()函数对其进行预处理?

from keras.applications.resnet50 import preprocess_input

我尝试使用preprocessing_function参数,如下所示

train_datagen=ImageDataGenerator(preprocessing_function=preprocess_input)

train_generator = train_datagen.flow_from_directory(

'./train_qcut_2_classes',

batch_size=batch_size,

shuffle=True,

target_size=input_size[1:],

class_mode='categorical')

test_datagen = ImageDataGenerator(preprocessing_function=preprocess_input)

validation_generator = test_datagen.flow_from_directory(

'./validate_qcut_2_classes',

batch_size=batch_size,

target_size=input_size[1:],

shuffle=True,

class_mode='categorical')

当我试图提取预处理的输出时,我得到了以下结果.

train_generator.next()[0][0]

array([[[ 91.06099701, 80.06099701, 96.06099701, ..., 86.06099701,

52.06099701, 12.06099701],

[ 101.06099701, 104.06099701, 118.06099701, ..., 101.06099701,

63.06099701, 19.06099701],

[ 117.06099701, 103.06099701, 88.06099701, ..., 88.06099701,

74.06099701, 18.06099701],

...,

[-103.93900299, -103.93900299, -103.93900299, ..., -24.93900299,

-38.93900299, -24.93900299],

[-103.93900299, -103.93900299, -103.93900299, ..., -52.93900299,

-27.93900299, -39.93900299],

[-103.93900299, -103.93900299, -103.93900299, ..., -45.93900299,

-29.93900299, -28.93900299]],

[[ 81.22100067, 70.22100067, 86.22100067, ..., 69.22100067,

37.22100067, -0.77899933],

[ 91.22100067, 94.22100067, 108.22100067, ..., 86.22100067,

50.22100067, 6.22100067],

[ 107.22100067, 93.22100067, 78.22100067, ..., 73.22100067,

62.22100067, 6.22100067],

...,

[-116.77899933, -116.77899933, -116.77899933, ..., -36.77899933,

-50.77899933, -36.77899933],

[-116.77899933, -116.77899933, -116.77899933, ..., -64.77899933,

-39.77899933, -51.77899933],

[-116.77899933, -116.77899933, -116.77899933, ..., -57.77899933,

-41.77899933, -40.77899933]],

[[ 78.31999969, 67.31999969, 83.31999969, ..., 61.31999969,

29.31999969, -7.68000031],

[ 88.31999969, 91.31999969, 105.31999969, ..., 79.31999969,

43.31999969, -0.68000031],

[ 104.31999969, 90.31999969, 75.31999969, ..., 66.31999969,

53.31999969, -2.68000031],

...,

[-123.68000031, -123.68000031, -123.68000031, ..., -39.68000031,

-53.68000031, -39.68000031],

[-123.68000031, -123.68000031, -123.68000031, ..., -67.68000031,

-42.68000031, -54.68000031],

[-123.68000031, -123.68000031, -123.68000031, ..., -60.68000031,

-44.68000031, -43.68000031]]], dtype=float32)

为了确认这一点,我直接在特定图像上使用了预处理功能,

import cv2

img = cv2.imread('./images.jpg')

img = img_to_array(img)

x = np.expand_dims(img, axis=0)

x = x.astype(np.float64)

x = preprocess_input(x)

给出以下输出,

array([[[[ 118.061, 125.061, 134.061, ..., 97.061, 99.061, 102.061],

[ 118.061, 125.061, 133.061, ..., 98.061, 100.061, 102.061],

[ 113.061, 119.061, 126.061, ..., 100.061, 101.061, 102.061],

...,

[ 65.061, 64.061, 64.061, ..., 60.061, 61.061, 57.061],

[ 64.061, 64.061, 63.061, ..., 66.061, 67.061, 59.061],

[ 56.061, 59.061, 62.061, ..., 61.061, 60.061, 59.061]],

[[ 113.221, 120.221, 129.221, ..., 112.221, 114.221, 113.221],

[ 116.221, 123.221, 131.221, ..., 113.221, 115.221, 113.221],

[ 118.221, 124.221, 131.221, ..., 115.221, 116.221, 113.221],

...,

[ 56.221, 55.221, 55.221, ..., 51.221, 52.221, 51.221],

[ 55.221, 55.221, 54.221, ..., 57.221, 58.221, 53.221],

[ 47.221, 50.221, 53.221, ..., 52.221, 51.221, 50.221]],

[[ 109.32 , 116.32 , 125.32 , ..., 106.32 , 108.32 , 108.32 ],

[ 111.32 , 118.32 , 126.32 , ..., 107.32 , 109.32 , 108.32 ],

[ 111.32 , 117.32 , 124.32 , ..., 109.32 , 110.32 , 108.32 ],

...,

[ 34.32 , 33.32 , 33.32 , ..., 30.32 , 31.32 , 26.32 ],

[ 33.32 , 33.32 , 32.32 , ..., 36.32 , 37.32 , 28.32 ],

[ 25.32 , 28.32 , 31.32 , ..., 30.32 , 29.32 , 28.32 ]]]])

关于为什么会这样的想法?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值