UNPKG

@galihru/tvmai

Version:

Training and Evaluation AI Model Recommendation Engine for WebNN

241 lines (179 loc) 5.9 kB
# WebNN Model Advisor - Intelligent Neural Network Architecture Recommendation The **TVM AI WebNN Model Advisor** is an advanced AI-powered module that provides intelligent neural network architecture recommendations based on dataset characteristics. Leveraging mathematical formulations from cutting-edge research, this module analyzes your dataset (CSV, images, or PDFs) and recommends optimal model architectures, hyperparameters, and training configurations. ## Features - **Intelligent Model Recommendation**: Automatically suggests suitable neural network architectures - **Dataset Analysis**: Supports CSV, image datasets (ZIP), and PDF documents (ZIP) - **Hyperparameter Optimization**: Calculates optimal epochs, learning rate, and batch size - **Research-Backed**: Based on formulations from top-tier publications (Q1 journals) - **WebNN Compatible**: Generates architectures compatible with WebNN API - **Easy Integration**: Simple API for browser and Node.js environments ## Installation ```bash npm install @galihru/tvmai ``` Or for GitHub Package: ```bash npm install @galihru/tvmai ``` ## Mathematical Foundations ### 1. Dataset Complexity Metric The complexity metric (C) is calculated differently for each data type: **Image Data**: $$C_{image}$$ = $$N_{classes}$$ × $$R_{avg}$$ × D Where: - $$N_{classes}$$ = Number of classes - $$R_{avg}$$ = Average resolution (width × height) - D = Number of channels **Tabular Data**: $$C_{tabular}$$ = H × F Where: - H = Shannon entropy of class distribution - F = Number of features **Text Data**: $$C_{text}$$ = $$L_{avg}$$ × V Where: - $$L_{avg}$$ = Average text length - V = Vocabulary size ### 2. Epoch Calculation Based on Prechelt's Early Stopping Principle: $$epochs = \min(500, \max(20, 50 + 150 × \ln{(C)} / \ln{(N)}))$$ Where: - C = Dataset complexity - N = Number of samples ### 3. Learning Rate Optimization Adaptive learning rate using entropy-based decay (Smith, 2017): $$\alpha = 0.1 \times \exp{(-1.5 \times H)}$$ Where H is the Shannon entropy of class distribution. ## API Reference ### `loadDataset(file: File): Promise<DatasetMetadata>` Loads and analyzes dataset metadata. **Parameters**: - `file`: Input file (CSV, ZIP of images, or ZIP of PDFs) **Returns**: ```typescript { type: 'image' | 'tabular' | 'text'; size: number; classes?: number; features?: number; classDistribution?: Record<string, number>; avgResolution?: number; channels?: number; avgTextLength?: number; avgPages?: number; vocabSize?: number; } ``` ### `analyzeDataset(metadata: DatasetMetadata): AnalysisResult` Computes dataset complexity metrics. **Returns**: ```typescript { complexity: number; entropy?: number; dataType: string; recommendationKey: string; } ``` ### `recommendModel(analysis: AnalysisResult): ModelRecommendation` Generates model recommendation with hyperparameters. **Returns**: ```typescript { model: string; layers: Layer[]; paper: string; hyperparameters: { epochs: number; learningRate: number; batchSize: number; validationSplit: number; earlyStopping: boolean; }; explanation: string; } ``` ## Usage Example ```javascript import { loadDataset, analyzeDataset, recommendModel } from 'tvmai'; async function processDataset(file) { try { // Load and analyze dataset const metadata = await loadDataset(file); const analysis = analyzeDataset(metadata); // Get model recommendation const recommendation = recommendModel(analysis); console.log('Recommended Model:', recommendation.model); console.log('Hyperparameters:', recommendation.hyperparameters); console.log('Architecture:'); recommendation.layers.forEach(layer => { console.log(`- ${layer.type}: ${JSON.stringify(layer)}`); }); return recommendation; } catch (error) { console.error('Dataset processing error:', error); } } // Browser file input handling document.getElementById('datasetInput').addEventListener('change', async (e) => { const recommendation = await processDataset(e.target.files[0]); // Visualize recommendation in UI }); ``` ## Real-World Application ```html <!-- index.html --> <!DOCTYPE html> <html> <head> <title>WebNN Model Advisor</title> <script type="module"> import { loadDataset, analyzeDataset, recommendModel } from './node_modules/tvmai/dist/index.js'; window.processDataset = async (file) => { const metadata = await loadDataset(file); const analysis = analyzeDataset(metadata); return recommendModel(analysis); }; </script> </head> <body> <input type="file" onchange="processDataset(this.files[0]).then(console.log)"> </body> </html> ``` ## Research References 1. **MobileNetV2: Inverted Residuals and Linear Bottlenecks** Sandler, M., Howard, A., Zhu, M., Zhmoginov, A., & Chen, L. C. (2018). CVPR. [DOI: 10.1109/CVPR.2018.00474](https://doi.org/10.1109/CVPR.2018.00474) 2. **Early Stopping - But When?** Prechelt, L. (1998). Neural Networks: Tricks of the Trade. [DOI: 10.1007/3-540-49430-8_3](https://doi.org/10.1007/3-540-49430-8_3) 3. **A Bayesian Perspective on Generalization and Stochastic Gradient Descent** Smith, L. N., & Topin, N. (2017). ICLR. [arXiv:1710.06451](https://arxiv.org/abs/1710.06451) ## Development Workflow 1. Install dependencies: ```bash npm ci ``` 2. Build project: ```bash npm run build ``` 3. Run tests: ```bash npm test ``` 4. Start development server: ```bash npm run dev ``` ## Contribution Guidelines Contributions are welcome! Please follow these steps: 1. Fork the repository 2. Create a feature branch (`git checkout -b feature/your-feature`) 3. Commit your changes (`git commit -am 'Add some feature'`) 4. Push to the branch (`git push origin feature/your-feature`) 5. Open a pull request ## License [MIT License](LICENSE)