不调整大小的 DataGenerator(Sequence)
DataGenerator(Sequence) without resize
我创建了一个 class DataGenerator(Sequence)
,它定义了 batch_size
、batch_x
和 batch_y
。 batch_x
是由 imread
读取的图像批次(来自 x_set
,图像的文件路径列表),按 resize
调整大小并除以 255为了获得 0 和 1 之间的值。batch_y
是这些图像的标签,来自 y_set
,一个包含所有标签的列表。
class DataGenerator(Sequence):
def __init__(self, x_set, y_set, batch_size):
self.x, self.y = x_set, y_set
self.batch_size = batch_size
def __len__(self):
return math.ceil(len(self.x) / self.batch_size)
def __getitem__(self, idx):
batch_x = self.x[idx*self.batch_size : (idx + 1)*self.batch_size]
batch_x = np.array([resize(imread(file_name), (64, 128)) for file_name in batch_x])
batch_x = batch_x * 1./255
batch_y = self.y[idx*self.batch_size : (idx + 1)*self.batch_size]
batch_y = np.array(batch_y)
return batch_x, batch_y
因为这个生成器可以工作但在 Colab 上需要很长时间,所以我之前调整了图像的大小。因此,这不再是必需的,我现在想修改 DataGenerator
并保留 resize
函数。这是我的 DataGenerator_withoutresize(Sequence)
:
代码
class DataGenerator_withoutresize(Sequence):
def __init__(self, x_set, y_set, batch_size):
self.x, self.y = x_set, y_set
self.batch_size = batch_size
def __len__(self):
return math.ceil(len(self.x) / self.batch_size)
def __getitem__(self, idx):
batch_x = self.x[idx*self.batch_size : (idx + 1)*self.batch_size]
batch_x = np.array([(imread(file_name) for file_name in batch_x])
batch_x = batch_x * 1./255
batch_y = self.y[idx*self.batch_size : (idx + 1)*self.batch_size]
batch_y = np.array(batch_y)
return batch_x, batch_y
这个代码正确吗?
谢谢!
最后,我使用了这段代码,它对我有用:
class DataGenerator(Sequence):
def __init__(self, x_set, y_set, batch_size):
self.x, self.y = x_set, y_set
self.batch_size = batch_size
def __len__(self):
return math.ceil(len(self.x) / self.batch_size)
def __getitem__(self, idx):
batch_x = self.x[idx*self.batch_size : (idx + 1)*self.batch_size]
batch_x = [imread(file_name) for file_name in batch_x]
batch_x = np.array(batch_x)
batch_x = batch_x * 1./255
batch_y = self.y[idx*self.batch_size : (idx + 1)*self.batch_size]
batch_y = np.array(batch_y)
return batch_x, batch_y
我创建了一个 class DataGenerator(Sequence)
,它定义了 batch_size
、batch_x
和 batch_y
。 batch_x
是由 imread
读取的图像批次(来自 x_set
,图像的文件路径列表),按 resize
调整大小并除以 255为了获得 0 和 1 之间的值。batch_y
是这些图像的标签,来自 y_set
,一个包含所有标签的列表。
class DataGenerator(Sequence):
def __init__(self, x_set, y_set, batch_size):
self.x, self.y = x_set, y_set
self.batch_size = batch_size
def __len__(self):
return math.ceil(len(self.x) / self.batch_size)
def __getitem__(self, idx):
batch_x = self.x[idx*self.batch_size : (idx + 1)*self.batch_size]
batch_x = np.array([resize(imread(file_name), (64, 128)) for file_name in batch_x])
batch_x = batch_x * 1./255
batch_y = self.y[idx*self.batch_size : (idx + 1)*self.batch_size]
batch_y = np.array(batch_y)
return batch_x, batch_y
因为这个生成器可以工作但在 Colab 上需要很长时间,所以我之前调整了图像的大小。因此,这不再是必需的,我现在想修改 DataGenerator
并保留 resize
函数。这是我的 DataGenerator_withoutresize(Sequence)
:
class DataGenerator_withoutresize(Sequence):
def __init__(self, x_set, y_set, batch_size):
self.x, self.y = x_set, y_set
self.batch_size = batch_size
def __len__(self):
return math.ceil(len(self.x) / self.batch_size)
def __getitem__(self, idx):
batch_x = self.x[idx*self.batch_size : (idx + 1)*self.batch_size]
batch_x = np.array([(imread(file_name) for file_name in batch_x])
batch_x = batch_x * 1./255
batch_y = self.y[idx*self.batch_size : (idx + 1)*self.batch_size]
batch_y = np.array(batch_y)
return batch_x, batch_y
这个代码正确吗?
谢谢!
最后,我使用了这段代码,它对我有用:
class DataGenerator(Sequence):
def __init__(self, x_set, y_set, batch_size):
self.x, self.y = x_set, y_set
self.batch_size = batch_size
def __len__(self):
return math.ceil(len(self.x) / self.batch_size)
def __getitem__(self, idx):
batch_x = self.x[idx*self.batch_size : (idx + 1)*self.batch_size]
batch_x = [imread(file_name) for file_name in batch_x]
batch_x = np.array(batch_x)
batch_x = batch_x * 1./255
batch_y = self.y[idx*self.batch_size : (idx + 1)*self.batch_size]
batch_y = np.array(batch_y)
return batch_x, batch_y