--- license: mit tags: - reinforcement-learning - behavioral-cloning - racing-game - tensorflow - neural-network language: - en datasets: - synthetic metrics: - accuracy - f1 library_name: tensorflow pipeline_tag: other --- # AI Racing Game Model This is a neural network trained to play a racing game using behavioral cloning. The model learns from expert demonstrations to make driving decisions (left, stay, right) based on the current game state. ## Model Details - **Model Type**: Feed-forward Neural Network - **Framework**: TensorFlow/Keras - **Training Method**: Behavioral Cloning (Supervised Learning) - **Input**: 9-dimensional state vector - **Output**: 3-dimensional action probabilities ## Training Data - **Total Samples**: 75,000 - **Data Source**: Synthetic expert demonstrations - **Difficulty Levels**: Progressive (0.5x to 1.5x) - **Training Method**: Supervised learning on expert actions ## Model Architecture ``` Input Layer: 9 features Hidden Layer 1: 64 neurons (ReLU + BatchNorm + Dropout 0.3) Hidden Layer 2: 32 neurons (ReLU + BatchNorm + Dropout 0.2) Hidden Layer 3: 16 neurons (ReLU + Dropout 0.1) Output Layer: 3 neurons (Softmax) ``` ## Performance - **Test Accuracy**: 0.9879 - **Test Loss**: 0.0471 - **Weighted F1-Score**: 0.9861 ### Per-Class Metrics - **Left Action**: Precision: 0.901, Recall: 0.471, F1: 0.618 - **Stay Action**: Precision: 0.989, Recall: 1.000, F1: 0.994 - **Right Action**: Precision: 0.973, Recall: 0.545, F1: 0.699 ## Usage ### TensorFlow.js (Web) ```javascript // Load the model const model = await tf.loadLayersModel('model.json'); // Prepare input (9-dimensional array) const gameState = tf.tensor2d([[ lane0_near, lane0_far, // Lane 0 sensors lane1_near, lane1_far, // Lane 1 sensors lane2_near, lane2_far, // Lane 2 sensors current_lane_norm, // Current lane (0-1) progress_norm, // Game progress (0-1) speed_factor // Speed factor ]], [1, 9]); // Get prediction const prediction = model.predict(gameState); const actionProbs = await prediction.data(); // Choose action (0=Left, 1=Stay, 2=Right) const action = actionProbs.indexOf(Math.max(...actionProbs)); ``` ### Python (TensorFlow) ```python import tensorflow as tf import numpy as np # Load the model model = tf.keras.models.load_model('racing_model.keras') # Prepare input game_state = np.array([[ lane0_near, lane0_far, lane1_near, lane1_far, lane2_near, lane2_far, current_lane_norm, progress_norm, speed_factor ]]) # Get prediction action_probs = model.predict(game_state)[0] action = np.argmax(action_probs) # 0=Left, 1=Stay, 2=Right ``` ## Input Format The model expects a 9-dimensional input vector: 1. **lane0_near** (0-1): Near obstacle sensor for left lane 2. **lane0_far** (0-1): Far obstacle sensor for left lane 3. **lane1_near** (0-1): Near obstacle sensor for middle lane 4. **lane1_far** (0-1): Far obstacle sensor for middle lane 5. **lane2_near** (0-1): Near obstacle sensor for right lane 6. **lane2_far** (0-1): Far obstacle sensor for right lane 7. **current_lane_norm** (0-1): Current lane position normalized 8. **progress_norm** (0-1): Game progress/score normalized 9. **speed_factor** (0-1): Current game speed factor ## Output Format The model outputs 3 probability values: - **Index 0**: Probability of moving left - **Index 1**: Probability of staying in current lane - **Index 2**: Probability of moving right ## Files Included - `model.json` + `*.bin`: TensorFlow.js model files - `racing_model.keras`: Native Keras model - `metadata.json`: Model metadata and training info - `training_history.png`: Training progress visualization ## Training Details - **Epochs**: 30 - **Batch Size**: 64 - **Optimizer**: Adam (lr=0.001) - **Loss Function**: Categorical Crossentropy - **Early Stopping**: Patience 8 ## Citation If you use this model, please cite: ```bibtex @misc{ai_racing_model, title={AI Racing Game Neural Network}, author={Your Name}, year={2025}, publisher={Hugging Face}, url={https://huggingface.co/Relacosm/theline-v1} } ```