使用ImageDataGenerator时,数据以directoryiterator格式加载。可以将其作为批次或整体进行提取
train_generator = train_datagen.flow_from_directory(
train_parent_dir,
target_size=(300, 300),
batch_size=32,
class_mode='categorical'
)
其输出结果为
Found 3875 images belonging to 3 classes.
要将整个numpy数组作为一整块提取(而不是批量提取),可以使用以下代码
x=np.concatenate([train_generator.next()[0] for i in range(train_generator.__len__())])
y=np.concatenate([train_generator.next()[1] for i in range(train_generator.__len__())])
print(x.shape)
print(y.shape)
注意:在执行此代码之前,建议使用 train_generator.reset()
上述代码的输出结果为:
(3875, 300, 300, 3)
(3875, 3)
即使使用了ImageDataGenerator以32个为一批次加载,输出结果仍会作为一个numpy数组一起获得。
若要按批次获取输出结果,请使用以下代码:
x=[]
y=[]
train_generator.reset()
for i in range(train_generator.__len__()):
a,b=train_generator.next()
x.append(a)
y.append(b)
x=np.array(x)
y=np.array(y)
print(x.shape)
print(y.shape)
代码的输出为:
(122,)
(122,)
希望这个能作为解决方案。
itr.next()
后面添加[0]
部分地解决了我的问题。但是这只给了我x数据,我还需要使用[1]
再次进行相同的操作以获取y数据。然后我无法将两个给定的(A,B,C,D)
和(A,E)
合并成形状为(A,B,C,D,E)
的数据。 - pietz