from keras.models import Sequential
from keras.layers import Lambda, Conv2D, MaxPooling2D, Dropout, Dense, Flatten, Cropping2D
from keras.optimizers import Adam
from keras.layers.advanced_activations import ELU

dropout = 0.5

model = Sequential()

# normalize & cropping
model.add(Lambda(lambda x: x / 255.0 - 0.5, input_shape=(160, 320, 3)))
model.add(Cropping2D(cropping=((65, 25), (0, 0))))

# add 6 convolutional layers
model.add(Conv2D(3, kernel_size=(1, 1), strides=(1, 1), activation='linear'))
model.add(Conv2D(24, kernel_size=(5, 5), activation='elu', strides=(2,2)))
model.add(Conv2D(36, kernel_size=(5, 5), activation='elu', strides=(2,2)))
model.add(Conv2D(48, kernel_size=(5, 5), activation='elu', strides=(2,2)))
model.add(Conv2D(64, kernel_size=(3, 3), activation='elu'))
model.add(Conv2D(64, kernel_size=(3, 3), activation='elu'))

# add a flatten layer
model.add(Flatten())

# add 4 fully connected layers
model.add(Dense(1164, activation='elu'))
model.add(Dropout(dropout))
model.add(Dense(100, activation='elu'))
model.add(Dropout(dropout))
model.add(Dense(50, activation='elu'))
model.add(Dropout(dropout))
model.add(Dense(10, activation='elu'))
model.add(Dropout(dropout))

# add a fully connected output layers
model.add(Dense(1, activation='linear'))

# compile and train the model
optimizer = Adam(lr=0.0001,beta_1=0.9, beta_2=0.999, epsilon=1e-03, decay=0.0)
model.compile(loss='mse', optimizer=optimizer)
model.fit(X_train, y_train, validation_split=0.2, shuffle=True, epochs=5)

# print model summary
print(model.summary())

# save model
model.save('model.h5')

Model Architecture

results matching ""

    No results matching ""