我正在使用ImageDataGenerator来增强我的图像。我需要从生成器中获取y标签。
示例:我有10个训练图像,7个是标签0,3个是标签1.我想将训练集大小增加到100个。
total_training_images = 100 total_val_images = 50
var OrientDB = require('orientjs');
var db = OrientDB({
host: 'localhost',
port: 2424,
});
var db = db.use({
name: '<db name>',
username: '<username>',
password: '<pwd>'
});
db.query('select address, name, out("postedby").imagename as imagename, out("postedby").date as date from User where name = "<insert a name>" unwind imagename,date')
.then(function (response) {
console.log(response);
});
db.close();
根据我的理解,这为每个时期的100个训练图像训练模型,每个图像根据我的数据生成器以某种方式或另一个增强,然后在50个图像上进行验证。
如果我model.fit_generator(
train_generator,
steps_per_epoch= total_training_images // batch_size,
epochs=epochs,
validation_data=validation_generator,
validation_steps= total_val_images // batch_size)
,我得到一个输出[0,0,0,0,0,0,0,1,1,1]。这对应于标签0的7张图像和标签1的3张图像。
对于这些新的100张图片,我如何获得y标签?
这是否意味着当我将此增加到100张图片时,我的新train_generator.classes
标签是相同的,但重复了10次?基本上train_generator
10次?
我正在关注本教程,如果有帮助的话: https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html
答案 0 :(得分:4)
标签与图像生成一个热编码。希望这有帮助!
training_set.class_indices
from keras.preprocessing import image
import matplotlib.pyplot as plt
x,y = train_generator.next()
for i in range(0,3):
image = x[i]
label = y[i]
print (label)
plt.imshow(image)
plt.show()
答案 1 :(得分:1)
基于你对发电机的看法,是的。
它将为每个增强图像复制相同的标签。 (否则模型不能正常训练)。
检查生成器输出内容的一种简单方法是获得它产生的结果:
X,Y = train_generator.next() #or next(train_generator)
请记住,这会将发电机置于产生第二个元素的位置,而不是第一个元素。 (这将使fit方法从第二个元素开始)。