def image_generator(x_train, y_train, batch_size=64):
curr_index = 0
while True:
X = x_train[curr_index: curr_index + batch_size]
Y = y_train[curr_index: curr_index + batch_size]
curr_index += batch_size
if curr_index > len(x_train):
curr_index = 0
batch_x = []
batch_y = []
for (x, y) in zip(X, Y):
batch_y.append(y)
x_large = cv2.resize(x, (224, 224), interpolation=cv2.INTER_AREA)
batch_x.append(x_large)
yield (
np.array(batch_x),
np.array(batch_y)
)
new_model.fit_generator(
image_generator(x_train, y_train),
steps_per_epoch=50000 / 64, epochs=5
)
-
Create a method (e.g.
image_generator
) that takes the entire set of training data as a parameter. The parameters could also be the location of where the images are stored. -
The method is a generator function that keeps returning a batch of X and Y values. That's why everything is in an infinite loop.
-
Inside the loop, select which images from the training set should be a part of the batch, perform any pre-processing required, and yield a tuple of two numpy arrays - the batches of X and Y data to be fed to the network.