Self-driving AI model starts overfitting

I'm trying to make a self-driving AI that can drive around in GTA-San Andreas by following sentdex's videos on making a self-driving AI for GTA-V but my model always starts to overfit after 4 epochs or so.

Even after doubling the dataset that I originally had, the model is still overfitting.

The dataset made up of grayscale images (270x360) and is distributed into 250 .npy files with 1000 frames each totaling 250,000 frames.

I'm using Xception architecture without any pre-trained weights as the model. The code is given below:

def create_model():
    xception_model = Xception(include_top=False, weights=None, input_shape=dimensions)
    x = xception_model.output
    x = (GlobalAveragePooling2D()) (x)
    x = (Dense(1024, activation='relu')) (x)
    predictions = Dense(9, activation='softmax') (x)

    model = Model(inputs=xception_model.input, outputs=predictions)

    opt = adam(lr=1e-3, decay=1e-5)
    model.compile(loss='categorical_crossentropy',
                  optimizer=opt,
                  metrics=['accuracy'])

    return model


model = create_model()
epochs = 30

allhistory = {'val_loss':[], 'val_acc':[], 'loss':[], 'acc':[]}


for e in range(1,epochs+1):
    data_order = [i for i in range(1,total_files+1)]
    shuffle(data_order)

    for count,i in enumerate(data_order):
        try:
            filename = f'/content/drive/My Drive/Dataset/processed_data-{i}.npy'
            data_set = np.load(filename,allow_pickle=True)

            print(f"\n{e+1}:{count+1}:Data-{i}.npy Loaded!")
            X = np.array([np.repeat(data[0]/255.0,3,-1) for data in data_set]).reshape(-1,HEIGHT,WIDTH,3)
            y = np.array([data[1] for data in data_set])
            X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state = 5)

            history = model.fit(X_train, y_train, validation_data = (X_test,y_test), epochs=1)

            allhistory['val_loss'].extend(history.history['val_loss'])
            allhistory['val_acc'].extend(history.history['val_acc'])
            allhistory['loss'].extend(history.history['loss'])
            allhistory['acc'].extend(history.history['acc'])

            if (count+1)%10==0:
                print('\nSAVING MODEL!')
                model.save(f'/content/drive/My Drive/models/xceptionmodel-epoch-{e+1}.h5')
                np.save('/content/drive/My Drive/models/allhistory.npy',np.array(allhistory))

        except Exception as ex:
            print(str(ex))

Here is a graph showing how the accuracy and validation accuracy starts diverging after 4 epochs: Accuracy Graph

Can anyone please help me and point out what mistakes I'm making.

Topic self-driving overfitting keras tensorflow neural-network

Category Data Science

About

Geeks Mental is a community that publishes articles and tutorials about Web, Android, Data Science, new techniques and Linux security.