自定义ImageDataGenerator行为不正常

2024-10-01 09:18:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个定制的Keras ImageDataGenerator:从磁盘加载图像。逻辑是:在一个无限循环中,用文件名数组中的随机值初始化批处理,加载这些文件,就这样。你知道吗

问题似乎出在“初始化”部分。我使用file转储生成的文件名,发现它们总是相同的,就好像randint每次都返回相同的数组一样。你知道我错过了什么吗?你知道吗

首先我引用代码,然后引用它生成的文件。你知道吗

datagen = ImageDataGenerator(
rotation_range=30,
width_shift_range=0.2,
height_shift_range=0.2,
zoom_range=0.2)

def image_generator(image_file_names, labels):
    i = 0
    while True:
        arr_idx = np.random.randint(len(image_file_names), size = BATCH_SIZE)
        batch_file_names = image_file_names[arr_idx]
        batch_labels = labels[arr_idx]

        text_file = open("log1.txt", "a")
        text_file.write("\n".join(batch_file_names))
        text_file.write("\n%s===================\n" % i)
        i = i + 1
        text_file.close()

        batch_images = []

        for input_path in batch_file_names:
            img = load_img("../input/train/" + input_path,
                target_size=(IMAGE_SIZE, IMAGE_SIZE), grayscale=True)
             img = img_to_array(img)
             img = datagen.random_transform(img, seed=42)
             img = img / 255.
             batch_images += [img]

        batch_images = np.array(batch_images)

        yield(batch_images, batch_labels)


d5896c9a0.jpg
d0c025463.jpg
a94abfec3.jpg
93d091bc1.jpg
0706d4216.jpg
2949b6643.jpg
545874c14.jpg
c04b414b2.jpg
ccfd02948.jpg
7be9c59f8.jpg
c74822baf.jpg
74e611f3c.jpg
c7a2fd5e2.jpg
a9269fb58.jpg
b81462e5b.jpg
88285e65a.jpg
0
===================
d5896c9a0.jpg
d0c025463.jpg
a94abfec3.jpg
93d091bc1.jpg
0706d4216.jpg
2949b6643.jpg
545874c14.jpg
c04b414b2.jpg
ccfd02948.jpg
7be9c59f8.jpg
c74822baf.jpg
74e611f3c.jpg
c7a2fd5e2.jpg
a9269fb58.jpg
b81462e5b.jpg
88285e65a.jpg
0
===================
d5896c9a0.jpg
d0c025463.jpg
a94abfec3.jpg
93d091bc1.jpg
0706d4216.jpg
2949b6643.jpg
545874c14.jpg
c04b414b2.jpg
ccfd02948.jpg
7be9c59f8.jpg
c74822baf.jpg
74e611f3c.jpg
c7a2fd5e2.jpg
a9269fb58.jpg
b81462e5b.jpg
88285e65a.jpg
0
===================
d5896c9a0.jpg
d0c025463.jpg
a94abfec3.jpg
93d091bc1.jpg
0706d4216.jpg
2949b6643.jpg
545874c14.jpg
c04b414b2.jpg
ccfd02948.jpg
7be9c59f8.jpg
c74822baf.jpg
74e611f3c.jpg
c7a2fd5e2.jpg
a9269fb58.jpg
b81462e5b.jpg
88285e65a.jpg
0
===================
d5896c9a0.jpg
d0c025463.jpg
a94abfec3.jpg
93d091bc1.jpg
0706d4216.jpg
2949b6643.jpg
545874c14.jpg
c04b414b2.jpg
ccfd02948.jpg
7be9c59f8.jpg
c74822baf.jpg
74e611f3c.jpg
c7a2fd5e2.jpg
a9269fb58.jpg
b81462e5b.jpg
88285e65a.jpg
0
===================
d5896c9a0.jpg
d0c025463.jpg
a94abfec3.jpg
93d091bc1.jpg
0706d4216.jpg
2949b6643.jpg
545874c14.jpg
c04b414b2.jpg
ccfd02948.jpg
7be9c59f8.jpg
c74822baf.jpg
74e611f3c.jpg
c7a2fd5e2.jpg
a9269fb58.jpg
b81462e5b.jpg
88285e65a.jpg
0
===================
d5896c9a0.jpg
d0c025463.jpg
a94abfec3.jpg
93d091bc1.jpg
0706d4216.jpg
2949b6643.jpg
545874c14.jpg
c04b414b2.jpg
ccfd02948.jpg
7be9c59f8.jpg
c74822baf.jpg
74e611f3c.jpg
c7a2fd5e2.jpg
a9269fb58.jpg
b81462e5b.jpg
88285e65a.jpg
0
===================
d5896c9a0.jpg
d0c025463.jpg
a94abfec3.jpg
93d091bc1.jpg
0706d4216.jpg
2949b6643.jpg
545874c14.jpg
c04b414b2.jpg
ccfd02948.jpg
7be9c59f8.jpg
c74822baf.jpg
74e611f3c.jpg
c7a2fd5e2.jpg
a9269fb58.jpg
b81462e5b.jpg
88285e65a.jpg
0
===================
b6f0ef08f.jpg
6132f858d.jpg
15db53751.jpg
f66a7c2a3.jpg
e12a65860.jpg
afc456dd3.jpg
439320f0c.jpg
82aab5924.jpg
a3fab7973.jpg
99ce90134.jpg
5fe14e4d0.jpg
e05e1a2e0.jpg
515d6eb11.jpg
b54652474.jpg
ee07a850c.jpg
b63842413.jpg
1
===================
b6f0ef08f.jpg
6132f858d.jpg
15db53751.jpg
f66a7c2a3.jpg
e12a65860.jpg
afc456dd3.jpg
439320f0c.jpg
82aab5924.jpg
a3fab7973.jpg
99ce90134.jpg
5fe14e4d0.jpg
e05e1a2e0.jpg
515d6eb11.jpg
b54652474.jpg
ee07a850c.jpg
b63842413.jpg
1
===================
b6f0ef08f.jpg
6132f858d.jpg
15db53751.jpg
f66a7c2a3.jpg
e12a65860.jpg
afc456dd3.jpg
439320f0c.jpg
82aab5924.jpg
a3fab7973.jpg
99ce90134.jpg
5fe14e4d0.jpg
e05e1a2e0.jpg
515d6eb11.jpg
b54652474.jpg
ee07a850c.jpg
b63842413.jpg
1
===================
b6f0ef08f.jpg
6132f858d.jpg
15db53751.jpg
f66a7c2a3.jpg
e12a65860.jpg
afc456dd3.jpg
439320f0c.jpg
82aab5924.jpg
a3fab7973.jpg
99ce90134.jpg
5fe14e4d0.jpg
e05e1a2e0.jpg
515d6eb11.jpg
b54652474.jpg
ee07a850c.jpg
b63842413.jpg
1
===================
b6f0ef08f.jpg
6132f858d.jpg
15db53751.jpg
f66a7c2a3.jpg
e12a65860.jpg
afc456dd3.jpg
439320f0c.jpg
82aab5924.jpg
a3fab7973.jpg
99ce90134.jpg
5fe14e4d0.jpg
e05e1a2e0.jpg
515d6eb11.jpg
b54652474.jpg
ee07a850c.jpg
b63842413.jpg
2
===================
b6f0ef08f.jpg
6132f858d.jpg
15db53751.jpg
f66a7c2a3.jpg
e12a65860.jpg
afc456dd3.jpg
439320f0c.jpg
82aab5924.jpg
a3fab7973.jpg
99ce90134.jpg
5fe14e4d0.jpg
e05e1a2e0.jpg
515d6eb11.jpg
b54652474.jpg
ee07a850c.jpg
b63842413.jpg
2
===================
b6f0ef08f.jpg
6132f858d.jpg
15db53751.jpg
f66a7c2a3.jpg
e12a65860.jpg
afc456dd3.jpg
439320f0c.jpg
82aab5924.jpg
a3fab7973.jpg
99ce90134.jpg
5fe14e4d0.jpg
e05e1a2e0.jpg
515d6eb11.jpg
b54652474.jpg
ee07a850c.jpg
b63842413.jpg
2
===================
b6f0ef08f.jpg
6132f858d.jpg
15db53751.jpg
f66a7c2a3.jpg
e12a65860.jpg
afc456dd3.jpg
439320f0c.jpg
82aab5924.jpg
a3fab7973.jpg
99ce90134.jpg
5fe14e4d0.jpg
e05e1a2e0.jpg
515d6eb11.jpg
b54652474.jpg
ee07a850c.jpg
b63842413.jpg
2
===================
b6f0ef08f.jpg
6132f858d.jpg
15db53751.jpg
f66a7c2a3.jpg
e12a65860.jpg
afc456dd3.jpg
439320f0c.jpg
82aab5924.jpg
a3fab7973.jpg
99ce90134.jpg
5fe14e4d0.jpg
e05e1a2e0.jpg
515d6eb11.jpg
b54652474.jpg
ee07a850c.jpg
b63842413.jpg
3
===================
b6f0ef08f.jpg
6132f858d.jpg
15db53751.jpg

下面是调用它的代码:

history = model.fit_generator(image_generator(np_train[:, 0], train_labels), 
steps_per_epoch=len(np_train) / BATCH_SIZE, epochs=1,
validation_data=([x_valid[:,:,:, :1]], [valid_labels]), #class_weight=class_weights,
callbacks=[saveBestModel], use_multiprocessing=True, workers=4)

==============================

编辑:我提供给它的数据。 标签(打印两个不同的样本):

print(train_labels[0], "\n", train_labels[CLASSES])

结果:

[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0.
 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
 0. 0. 0. 0. 0. 0. 0. 0.] 
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
 0. 0. 0. 0. 0. 0. 0. 0.]

图像文件名:

np_train

结果:

array([['3d5c45078.jpg', 'w_23a388d'],
['3e53c9584.jpg', 'w_23a388d'],
['3e8b8d8d9.jpg', 'w_23a388d'],
...,
['dada37134.jpg', 'w_b938e96'],
['054bb95c0.jpg', 'w_b938e96'],
['19a81076c.jpg', 'w_b938e96']], dtype='<U13')

我只在“图像”栏中输入:

model.fit_generator(image_generator(np_train[:, 0], train_labels)

标签是重复的,因此

1.jpg    label_1
2.jpg    label_1
...

现在,看看

text_file.write("\n%s===================\n" % i)

循环的一部分。它将批处理的计数器写入文件。现在,如果您查看文件内容(上面),您将看到批号更改。。。每五批一次。 问题的一部分是,我不明白它应该如何工作,特别是“虽然真实”的部分。从“正常”编程的角度看,它是一个无限循环,那么来者不拒怎么不挂程序呢?你知道吗


Tags: imglabelsbatchtrainfilejpgb63842413e12a65860