def nvidia_model():
model = Sequential()
model.add(Cropping2D(cropping=((50, 20), (0, 0)), input_shape=(160, 320, 3)))
model.add(BatchNormalization(epsilon=0.001, axis=3, input_shape=(90, 320, 3)))
model.add(Conv2D(24, (5, 5), padding='valid', activation='relu', strides=(2, 2)))
model.add(Conv2D(36, (5, 5), padding='valid', activation='relu', strides=(2, 2)))
model.add(Conv2D(48, (5, 5), padding='valid', activation='relu', strides=(2, 2)))
model.add(Conv2D(64, (3, 3), padding='valid', activation='relu', strides=(1, 1)))
model.add(Conv2D(64, (3, 3), padding='valid', activation='relu', strides=(1, 1)))
model.add(Flatten())
model.add(Dense(1164, activation='relu'))
model.add(Dense(100, activation='relu'))
model.add(Dense(50, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(1, activation='tanh'))
return model