<jupyter_start><jupyter_text>Deep Learning Project 3: Behavioral Cloning Report  The goals / steps of this project are the following:* Use the simulator to collect data of good driving behavior* Build, a convolution neural network in Keras that predicts steering angles from images* Train and validate the model with a training and validation set* Test that the model successfully drives around track one without leaving the road* Summarize the results with a written reportRubric points this report covers: https://review.udacity.com/!/rubrics/432/viewI found this Q&A session (collection) with <NAME> very useful to get started with this project. https://www.youtube.com/watch?v=rpxZ87YFg0M&t=504s&index=3&list=PLAwxTw4SYaPkz3HerxrHlu1Seq8ZA7-5P  Submitted filesThis project submission includes following files: - model_track1.h5 - My NVIDIA EndToEnd model trained on Track 1 achieving good results up to 30mph (please use this model for evaluation!)- model_track2.h5 - My NVIDIA EndToEnd model retrained to Track 2 achieving good results upt to 11mph - drive.py - No changes to original drive.py, max speed at 11mph - cloninig.py - Contains my script to create and train the model - retrain.py - Contains my script to load an already trained model and retrain it (whole model) on a new dataset. This code leverages parts of drive.py to load parameters from the command line - Behavioral_Cloning_report.md - This is the report to my work you are reading at the moment- video.mp4 - Video of the autonomous pass of track1 at 20mph for the archive as requested by udacity- all other videos are uploaded to youtube and linked in order to not use unneccessary space on githup Video of passing Track 1 in CCW direction at 20mph:https://youtu.be/w2GZK_rQggAVideo of passing Track 1 in CW direction at 20mph: https://youtu.be/GQk5JTCidPEVideo of passing Track 1 in CCW direction at 30mph: https://youtu.be/yny59EfSpY8Video of passing Track 2 in CCW direction at 11mph: https://youtu.be/QrJ0A7D2xpoVideo of passing Track 2 in CW direction at 11mph: https://youtu.be/GFA9rM-rOVs Model Architecture and Training Strategy In the following I am documenting how I tackled the problem of choosing and building an architecture and collecting the right data so that the resulting model is able to steer the car in the simulation around the track without getting stuck or crash into something. The structure of this report is kind of a logbook documenting each experiment I performed to improve the networks abilities by adapting the architecture or collecting specific data.  Model architecture As suggested I implemented the NVIDIA Dave-2 End-To-End model architecture used in the project DAVE-2. This project is very similar to our attempt to “learn” the car to drive safely on the middle of the road/lane by using three camera images and a steering angle, although the NVIDIA project is of course of a much larger scale and complexity in data. They claim that their architecture design is chosen empirically through a series of experiments with varying layer configurations and had the best success with this presented architecture, so I am going along with it because they had much more data, computational power and time to test many configurations than I have. I started out with the layer architecture according to the blog post by NVIDA (https://devblogs.nvidia.com/parallelforall/deep-learning-self-driving-cars/) consisting of:- 5 Convolutional Layer- 3 Fully Connected Layer- RELU Activations- MSE Loss Function and - AdamOptimizer (no manual learning rate set)First without using any dropout layer or regularizations and then added drop out to the connected layers with 20% dropout chance. I divided my collected data set into 80% training data and 20% validation data.<jupyter_code>print("Using NvidiaEndToEnd")
	# Cropping cropping=((top,bottom),(left,right))
	model.add(Cropping2D(cropping=((70,25), (0,0)))) 
	# subsample == strides 
	model.add(Convolution2D(24, 5, 5, subsample=(2,2), activation = 'relu'))
	model.add(Convolution2D(36, 5, 5, subsample=(2,2), activation = 'relu'))
	model.add(Convolution2D(48, 5, 5, subsample=(2,2), activation = 'relu'))
	
	model.add(Convolution2D(64, 3, 3, activation = 'relu'))
	model.add(Convolution2D(64, 3, 3, activation = 'relu'))

	model.add(Flatten())
	model.add(Dense(100))
	model.add(Dropout(0.2))
	model.add(Dense(50))
	model.add(Dropout(0.2))
	model.add(Dense(10))
	model.add(Dropout(0.2))
	model.add(Dense(1))<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.06729055258467023, 'fraction_numerical': 0.026515151515151516, 'mean_word_length': 5.033602150537634, 'pattern_counts': {'":': 0, '<': 6, '<?xml version=': 0, '>': 6, 'https://': 8, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '616356', 'license': 'MIT', 'n_tokens_mistral': 1339, 'n_tokens_neox': 1222, 'n_words': 591, 'path': 'Behavioral_Cloning_report.ipynb', 'repo_name': 'einrob/BC_CNN', 'size': '4494'}