您要做的就是将数组提供给model.fit。最好的方法是构建一个生成器,它将批量提供数据数组样本和标签数组样本。
我将假设 X_array 包含您的训练样本,而 y_array 包含您的标签样本。
我尚未对其进行测试,但这里是创建生成器的一个尝试。
class data_gen():
def __init__(self, X_array, y_array, batch_size):
self.batch_index=0
self.X_array=X_array
self.y_array=y_array
self.batch_size=batch_size
self.data_array=np.zeros((self.X_array.shape))
self.label_array=np.zeros(self.y_array.shape)
def gen(self):
length=self.X_array.shape[0] # number of samples
start=self.batch_index * self.batch_size # set start value of iteration
end=start + self.batch_size # set end value of iteration yield 1 batch of data
for i in range(start, end):
j=i % length
self.data_array[j]=(self.X_array[j])
self.label_array[j]=(self.y_array[j])
self.batch_index=self.batch_index +1
yield (self.data_array,self.label_array )
要测试一下,试试下面的代码
batch_size = 3 # set what ever batch size you wish
my_gen=data_gen(X_array, y_array, batch_size)
data, labels=next(my_gen.gen())
print (data.shape, labels.shape)
您可以像使用 ImageDataGenerator 一样使用 my_gen.gen()。
如果您使用 sklearn train_test_split 将数据集分为训练、测试和有效数据集,那么您可以实例化三个生成器的形式
train_gen=data_gen(X_train, y_train, train_batch_size)
test_gen=data_gen(X_test, y_test, test_baych_size)
valid_gen=data_gen(X_valid, y_valid, valid_batch_size)
修改生成器以批量读取目录中的数据并不需要太多,因此您不必将所有内容加载到内存中并冒着 OOM(内存不足)错误的风险。将 init 函数更改为具有参数、数组路径和 batch_size。然后在 gen 函数的循环中从目录中读取 batch_size 个数组来创建 X_array 和 y_array。正如他们在学校里常说的那样,留给学生作为练习!祝你好运