|
# Gender Classification Quantized Model
|
|
|
|
This repository hosts a quantized version of a feedforward neural network model, fine-tuned for gender classification tasks. The model has been optimized for efficient deployment while maintaining high accuracy, making it suitable for resource-constrained environments.
|
|
|
|
---
|
|
|
|
## Model Details
|
|
|
|
- **Model Name:** Gender Classifier
|
|
- **Model Architecture:** 2-layer MLP (Multi-Layer Perceptron)
|
|
- **Task:** Gender Classification
|
|
- **Dataset:** Gender Classification Dataset v7
|
|
- **Quantization:** QInt8 (Dynamic Quantization)
|
|
- **Framework:** PyTorch
|
|
|
|
---
|
|
|
|
## Usage
|
|
|
|
### Installation
|
|
|
|
```bash
|
|
pip install torch pandas scikit-learn numpy
|
|
```
|
|
|
|
### Loading the Quantized Model
|
|
|
|
```python
|
|
import torch
|
|
import torch.nn as nn
|
|
import pandas as pd
|
|
import numpy as np
|
|
from sklearn.preprocessing import StandardScaler, LabelEncoder
|
|
import json
|
|
|
|
# Define the model architecture
|
|
class GenderClassifier(nn.Module):
|
|
def __init__(self):
|
|
super().__init__()
|
|
self.fc = nn.Sequential(
|
|
nn.Linear(7, 32),
|
|
nn.ReLU(),
|
|
nn.Linear(32, 2)
|
|
)
|
|
|
|
def forward(self, x):
|
|
return self.fc(x)
|
|
|
|
# Load the quantized model
|
|
model = GenderClassifier()
|
|
quantized_model = torch.quantization.quantize_dynamic(model, {nn.Linear}, dtype=torch.qint8)
|
|
quantized_model.load_state_dict(torch.load("quantized_model/pytorch_model.bin"))
|
|
|
|
# Load configuration
|
|
with open("quantized_model/config.json", "r") as f:
|
|
config = json.load(f)
|
|
|
|
# Example usage
|
|
# Prepare your input data (7 features)
|
|
input_data = np.array([[feature1, feature2, feature3, feature4, feature5, feature6, feature7]])
|
|
|
|
# Normalize using StandardScaler (you'll need to fit this on your training data)
|
|
scaler = StandardScaler()
|
|
# scaler.fit(your_training_data) # Fit on your training data
|
|
input_normalized = scaler.transform(input_data)
|
|
|
|
# Convert to tensor
|
|
input_tensor = torch.tensor(input_normalized, dtype=torch.float32)
|
|
|
|
# Inference
|
|
with torch.no_grad():
|
|
outputs = quantized_model(input_tensor)
|
|
|
|
# Get predicted label
|
|
predicted_class = outputs.argmax(dim=1).item()
|
|
|
|
# Map label using label encoder classes
|
|
label_mapping = {0: config["label_classes"][0], 1: config["label_classes"][1]}
|
|
print(f"Predicted Gender: {label_mapping[predicted_class]}")
|
|
```
|
|
|
|
---
|
|
|
|
## Performance Metrics
|
|
|
|
- **Model Size:** Reduced through QInt8 quantization
|
|
- **Input Features:** 7 numerical features
|
|
- **Output Classes:** 2 (Binary gender classification)
|
|
- **Training Split:** 80% train, 20% validation
|
|
|
|
---
|
|
|
|
## Training Details
|
|
|
|
### Dataset
|
|
|
|
The model was trained on the Gender Classification Dataset v7, featuring:
|
|
- 7 numerical input features
|
|
- Binary gender classification labels
|
|
- Preprocessed and normalized data
|
|
|
|
### Training Configuration
|
|
|
|
- **Epochs:** 10
|
|
- **Batch Size:** 32
|
|
- **Learning Rate:** 0.001
|
|
- **Optimizer:** Adam
|
|
- **Loss Function:** CrossEntropyLoss
|
|
- **Normalization:** StandardScaler
|
|
|
|
### Model Architecture
|
|
|
|
- **Input Layer:** 7 features
|
|
- **Hidden Layer:** 32 neurons with ReLU activation
|
|
- **Output Layer:** 2 neurons (binary classification)
|
|
- **Total Parameters:** Approximately 288 parameters
|
|
|
|
### Quantization
|
|
|
|
Post-training dynamic quantization was applied using PyTorch's built-in quantization framework to reduce the model size and improve inference efficiency with QInt8 precision.
|
|
|
|
---
|
|
|
|
## Repository Structure
|
|
|
|
```
|
|
.
|
|
βββ quantized_model/
|
|
β βββ config.json # Model configuration
|
|
β βββ pytorch_model.bin # Quantized model weights
|
|
β βββ model.safetensors # Alternative model format
|
|
β βββ vocab.txt # Feature names
|
|
β βββ tokenizer_config.json # Scaler configuration
|
|
β βββ special_tokens_map.json # Label encoder metadata
|
|
βββ gender-classification.ipynb # Training notebook
|
|
βββ README.md # Model documentation
|
|
```
|
|
|
|
---
|
|
|
|
## Input Features
|
|
|
|
The model expects 7 numerical features as input. The exact feature names and preprocessing requirements are stored in the configuration files.
|
|
|
|
---
|
|
|
|
## Limitations
|
|
|
|
- The model is designed for binary gender classification only
|
|
- Performance depends on the similarity between inference data and training data distribution
|
|
- Quantization may result in minor accuracy changes compared to full-precision models
|
|
- Requires proper feature scaling using StandardScaler fitted on training data
|
|
|
|
---
|
|
|
|
## Contributing
|
|
|
|
Contributions are welcome! Feel free to open an issue or PR for improvements, fixes, or feature extensions.
|
|
|
|
--- |