我預留了一個驗證拆分,如下所示:
val_samples = 60
train_imgs = coco_imgs[:-val_samples]
train_masks = coco_masks[:-val_samples]
val_imgs = coco_imgs[-val_samples:]
val_masks = coco_masks[-val_samples:]
我train_imgs和val_imgs顯示不同的圖片:
fig, ax = plt.subplots(ncols =2, figsize = (10,3), sharex = True, sharey = True)
ax[0].imshow(train_imgs[14])
ax[1].imshow(val_imgs[14])
然后我撰寫資料生成器函式:
class DataGenerator(keras.utils.Sequence):
def __init__(self, input_img, input_mask, image_size,
augmentation, batch_size):
self.image_size = img_size
self.augmentation = augmentation
self.batch_size = batch_size
self.input_img = train_imgs
self.input_mask = train_masks
def __len__(self):
return len(self.input_img) // self.batch_size
def __getitem__(self, index):
data_index_min = int(index*self.batch_size)
data_index_max = int(min((index 1)*self.batch_size, len(self.input_img)))
indexes = self.input_img[data_index_min:data_index_max]
this_batch_size = len(indexes)
X = np.empty((this_batch_size, self.image_size , self.image_size , 3), dtype=np.float32)
y = np.empty((this_batch_size, self.image_size , self.image_size , self.nb_y_features), dtype=np.uint8)
for i, sample_index in enumerate(indexes):
X_sample = self.input_img[index * self.batch_size i]
y_sample = self.input_mask[index * self.batch_size i]
if self.augmentation is True:
aug = transform(image = X_sample, mask = y_sample)
img_aug = aug['image']
mask_aug = aug['mask']
X[i, ...] = img_aug/255
y[i, ...] = mask_aug.reshape(self.image_size , self.image_size , self.nb_y_features).astype(np.uint8)
else:
pass
return X, y
這是我的train_generator和val_generator。
train_generator = DataGenerator(input_img = train_imgs, input_mask = train_masks, image_size = img_size,
augmentation=True, batch_size = 5)
val_generator = DataGenerator(input_img = val_imgs, input_mask = val_masks, image_size = img_size,
augmentation=True, batch_size = 5)
它們與 顯示相同的圖片train_imgs。
for i in range(3):
X_sample_temp, y_sample_temp = train_generator[2]
fig, ax = plt.subplots(ncols=2)
ax[0].imshow(X_sample_temp[4])
ax[1].imshow(y_sample_temp[4,:,:,0])
plt.show()
和
for i in range(3):
X_sample_temp, y_sample_temp = val_generator[2]
fig, ax = plt.subplots(ncols=2)
ax[0].imshow(X_sample_temp[4])
ax[1].imshow(y_sample_temp[4,:,:,0])
plt.show()
我想val_generator用 生成相同的圖片val_imgs,但我不知道如何修復它。我很感激任何投入。
uj5u.com熱心網友回復:
在__init__你已經硬編碼
self.input_img = train_imgs
self.input_mask = train_masks
所以所有的生成器都使用相同的train_imgs train_masks
,但你應該使用引數input_img和input_mask
self.input_img = input_img
self.input_mask = input_mask
我不確定它是否不是拼寫錯誤,self.image_size = img_size
因為它應該是self.image_size = image_size
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/438165.html
上一篇:使用任意型別類生成隨機二叉搜索樹
