Upload VitaMind AI model
Browse files- .gitattributes +1 -0
- README.md +168 -0
- encoders.joblib +3 -0
- inference_example.py +143 -0
- metadata.json +46 -0
- model.keras +3 -0
- requirements.txt +5 -0
- scaler.joblib +3 -0
.gitattributes
CHANGED
|
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
model.keras filter=lfs diff=lfs merge=lfs -text
|
README.md
ADDED
|
@@ -0,0 +1,168 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
license: mit
|
| 3 |
+
tags:
|
| 4 |
+
- health
|
| 5 |
+
- fitness
|
| 6 |
+
- calorie-prediction
|
| 7 |
+
- tensorflow
|
| 8 |
+
- wellness
|
| 9 |
+
datasets:
|
| 10 |
+
- synthetic
|
| 11 |
+
metrics:
|
| 12 |
+
- mae
|
| 13 |
+
- rmse
|
| 14 |
+
library_name: tensorflow
|
| 15 |
+
pipeline_tag: tabular-regression
|
| 16 |
+
---
|
| 17 |
+
|
| 18 |
+
# 🏃♂️ VitaMind AI - Calorie Goal Predictor
|
| 19 |
+
|
| 20 |
+
**Personalized daily calorie recommendations using AI**
|
| 21 |
+
|
| 22 |
+
## Model Description
|
| 23 |
+
|
| 24 |
+
VitaMind AI predicts optimal daily calorie intake based on:
|
| 25 |
+
- Demographics (age, gender, height, weight)
|
| 26 |
+
- Activity metrics (steps, heart rate)
|
| 27 |
+
- Lifestyle factors (sleep, stress, mood)
|
| 28 |
+
- Activity level (sedentary to athlete)
|
| 29 |
+
|
| 30 |
+
## Performance
|
| 31 |
+
|
| 32 |
+
- **MAE**: 75 kcal
|
| 33 |
+
- **RMSE**: 95 kcal
|
| 34 |
+
- **MAPE**: 3.2%
|
| 35 |
+
- **R² Score**: 0.89
|
| 36 |
+
|
| 37 |
+
## Quick Start
|
| 38 |
+
|
| 39 |
+
```python
|
| 40 |
+
from huggingface_hub import hf_hub_download
|
| 41 |
+
import tensorflow as tf
|
| 42 |
+
import joblib
|
| 43 |
+
import numpy as np
|
| 44 |
+
|
| 45 |
+
# Download model
|
| 46 |
+
model = tf.keras.models.load_model(
|
| 47 |
+
hf_hub_download(repo_id="developerPratik/vitamind-calorie-predictor", filename="model.keras")
|
| 48 |
+
)
|
| 49 |
+
scaler = joblib.load(
|
| 50 |
+
hf_hub_download(repo_id="developerPratik/vitamind-calorie-predictor", filename="scaler.joblib")
|
| 51 |
+
)
|
| 52 |
+
encoders = joblib.load(
|
| 53 |
+
hf_hub_download(repo_id="developerPratik/vitamind-calorie-predictor", filename="encoders.joblib")
|
| 54 |
+
)
|
| 55 |
+
|
| 56 |
+
# Example prediction
|
| 57 |
+
user_data = {
|
| 58 |
+
'age': 30, 'weight': 75, 'height': 175, 'steps': 8000,
|
| 59 |
+
'heart_rate': 72, 'sleep_hours': 7.5, 'stress_level': 4,
|
| 60 |
+
'activity_level': 'Active', 'gender': 'M', 'mood': 'happy'
|
| 61 |
+
}
|
| 62 |
+
|
| 63 |
+
# Feature engineering
|
| 64 |
+
bmi = user_data['weight'] / ((user_data['height'] / 100) ** 2)
|
| 65 |
+
good_sleep = 1 if user_data['sleep_hours'] >= 7 else 0
|
| 66 |
+
high_stress = 1 if user_data['stress_level'] >= 7 else 0
|
| 67 |
+
activity_scores = {'Sedentary': 1, 'Lightly Active': 2, 'Active': 3, 'Very Active': 4, 'Athlete': 5}
|
| 68 |
+
|
| 69 |
+
# Encode
|
| 70 |
+
activity_encoded = encoders['activity_level'].transform([user_data['activity_level']])[0]
|
| 71 |
+
gender_encoded = encoders['gender'].transform([user_data['gender']])[0]
|
| 72 |
+
mood_encoded = encoders['mood'].transform([user_data['mood']])[0]
|
| 73 |
+
|
| 74 |
+
# Create feature vector (14 features)
|
| 75 |
+
features = np.array([[
|
| 76 |
+
user_data['age'], user_data['weight'], user_data['height'],
|
| 77 |
+
user_data['steps'], user_data['heart_rate'], user_data['sleep_hours'],
|
| 78 |
+
user_data['stress_level'], bmi, activity_encoded, gender_encoded,
|
| 79 |
+
mood_encoded, good_sleep, high_stress, activity_scores[user_data['activity_level']]
|
| 80 |
+
]])
|
| 81 |
+
|
| 82 |
+
# Predict
|
| 83 |
+
features_scaled = scaler.transform(features)
|
| 84 |
+
calories = model.predict(features_scaled, verbose=0)[0][0]
|
| 85 |
+
print(f"Recommended daily calories: {calories:.0f} kcal")
|
| 86 |
+
```
|
| 87 |
+
|
| 88 |
+
## Model Architecture
|
| 89 |
+
|
| 90 |
+
```
|
| 91 |
+
Input (14 features)
|
| 92 |
+
↓
|
| 93 |
+
Dense(256) + BatchNorm + Dropout(0.3)
|
| 94 |
+
↓
|
| 95 |
+
Dense(128) + BatchNorm + Dropout(0.3) [Residual Connection]
|
| 96 |
+
↓
|
| 97 |
+
Dense(128) + BatchNorm + Dropout(0.3)
|
| 98 |
+
↓
|
| 99 |
+
Dense(64) + BatchNorm + Dropout(0.2)
|
| 100 |
+
↓
|
| 101 |
+
Output (1 - calories)
|
| 102 |
+
```
|
| 103 |
+
|
| 104 |
+
**Total Parameters**: ~85,000
|
| 105 |
+
|
| 106 |
+
## Features
|
| 107 |
+
|
| 108 |
+
| Feature | Type | Description |
|
| 109 |
+
|---------|------|-------------|
|
| 110 |
+
| age | int | Age in years (18-100) |
|
| 111 |
+
| weight | float | Weight in kg (40-150) |
|
| 112 |
+
| height | float | Height in cm (140-220) |
|
| 113 |
+
| steps | int | Daily steps (0-30000) |
|
| 114 |
+
| heart_rate | int | Resting heart rate (50-120) |
|
| 115 |
+
| sleep_hours | float | Hours of sleep (3-12) |
|
| 116 |
+
| stress_level | int | Stress rating (1-10) |
|
| 117 |
+
| bmi | float | Calculated BMI |
|
| 118 |
+
| activity_level | str | Sedentary/Lightly Active/Active/Very Active/Athlete |
|
| 119 |
+
| gender | str | M/F |
|
| 120 |
+
| mood | str | happy/neutral/sad/anxious |
|
| 121 |
+
| good_sleep | binary | 1 if sleep >= 7 hours |
|
| 122 |
+
| high_stress | binary | 1 if stress >= 7 |
|
| 123 |
+
| activity_score | int | 1-5 based on activity level |
|
| 124 |
+
|
| 125 |
+
## Limitations
|
| 126 |
+
|
| 127 |
+
⚠️ **Important Disclaimers**:
|
| 128 |
+
- For educational/wellness purposes only
|
| 129 |
+
- NOT a substitute for professional medical advice
|
| 130 |
+
- Individual metabolism varies significantly
|
| 131 |
+
- Does not account for medical conditions
|
| 132 |
+
- Consult healthcare providers for medical decisions
|
| 133 |
+
|
| 134 |
+
## Training Details
|
| 135 |
+
|
| 136 |
+
- **Framework**: TensorFlow 2.15
|
| 137 |
+
- **Training samples**: 5,000 synthetic
|
| 138 |
+
- **Validation split**: 15%
|
| 139 |
+
- **Test split**: 15%
|
| 140 |
+
- **Optimizer**: Adam (lr=0.001 with ReduceLROnPlateau)
|
| 141 |
+
- **Loss**: MSE
|
| 142 |
+
- **Regularization**: L2 (0.001) + Dropout + BatchNorm
|
| 143 |
+
- **Early stopping**: Patience=30
|
| 144 |
+
|
| 145 |
+
## License
|
| 146 |
+
|
| 147 |
+
MIT License - Free for commercial and personal use
|
| 148 |
+
|
| 149 |
+
## Citation
|
| 150 |
+
|
| 151 |
+
```bibtex
|
| 152 |
+
@software{vitamind_ai_2025,
|
| 153 |
+
author = {{Your Name}},
|
| 154 |
+
title = {{VitaMind AI Calorie Predictor}},
|
| 155 |
+
year = {2025},
|
| 156 |
+
publisher = {Hugging Face},
|
| 157 |
+
url = {{https://huggingface.co/developerPratik/vitamind-calorie-predictor}}
|
| 158 |
+
}
|
| 159 |
+
```
|
| 160 |
+
|
| 161 |
+
## Contact
|
| 162 |
+
|
| 163 |
+
- **Issues**: Open an issue on this model's discussion page
|
| 164 |
+
- **Email**: your.email@example.com
|
| 165 |
+
|
| 166 |
+
---
|
| 167 |
+
|
| 168 |
+
Built with ❤️ using TensorFlow and scikit-learn
|
encoders.joblib
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:45d014eeeb5b37cd93be0ea8c5a71b48e0f2b79ca2c7efa4c2b1e9765bd9c817
|
| 3 |
+
size 1551
|
inference_example.py
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
"""
|
| 3 |
+
VitaMind AI Inference Example
|
| 4 |
+
"""
|
| 5 |
+
|
| 6 |
+
import tensorflow as tf
|
| 7 |
+
import joblib
|
| 8 |
+
import numpy as np
|
| 9 |
+
from huggingface_hub import hf_hub_download
|
| 10 |
+
|
| 11 |
+
class VitaMindPredictor:
|
| 12 |
+
def __init__(self, repo_id="YOUR_USERNAME/vitamind-calorie-predictor"):
|
| 13 |
+
print("Loading model from Hugging Face...")
|
| 14 |
+
|
| 15 |
+
# Download artifacts
|
| 16 |
+
self.model = tf.keras.models.load_model(
|
| 17 |
+
hf_hub_download(repo_id=repo_id, filename="model.keras")
|
| 18 |
+
)
|
| 19 |
+
self.scaler = joblib.load(
|
| 20 |
+
hf_hub_download(repo_id=repo_id, filename="scaler.joblib")
|
| 21 |
+
)
|
| 22 |
+
self.encoders = joblib.load(
|
| 23 |
+
hf_hub_download(repo_id=repo_id, filename="encoders.joblib")
|
| 24 |
+
)
|
| 25 |
+
|
| 26 |
+
self.activity_scores = {
|
| 27 |
+
'Sedentary': 1, 'Lightly Active': 2, 'Active': 3,
|
| 28 |
+
'Very Active': 4, 'Athlete': 5
|
| 29 |
+
}
|
| 30 |
+
|
| 31 |
+
print("✓ Model loaded successfully!")
|
| 32 |
+
|
| 33 |
+
def predict(self, user_data):
|
| 34 |
+
"""
|
| 35 |
+
Predict daily calorie goal
|
| 36 |
+
|
| 37 |
+
Args:
|
| 38 |
+
user_data (dict): User information with keys:
|
| 39 |
+
age, weight, height, steps, heart_rate, sleep_hours,
|
| 40 |
+
stress_level, activity_level, gender, mood
|
| 41 |
+
|
| 42 |
+
Returns:
|
| 43 |
+
dict: Prediction results
|
| 44 |
+
"""
|
| 45 |
+
# Validate inputs
|
| 46 |
+
required_keys = ['age', 'weight', 'height', 'steps', 'heart_rate',
|
| 47 |
+
'sleep_hours', 'stress_level', 'activity_level',
|
| 48 |
+
'gender', 'mood']
|
| 49 |
+
|
| 50 |
+
for key in required_keys:
|
| 51 |
+
if key not in user_data:
|
| 52 |
+
raise ValueError(f"Missing required key: {key}")
|
| 53 |
+
|
| 54 |
+
# Feature engineering
|
| 55 |
+
bmi = user_data['weight'] / ((user_data['height'] / 100) ** 2)
|
| 56 |
+
good_sleep = 1 if user_data['sleep_hours'] >= 7 else 0
|
| 57 |
+
high_stress = 1 if user_data['stress_level'] >= 7 else 0
|
| 58 |
+
activity_score = self.activity_scores[user_data['activity_level']]
|
| 59 |
+
|
| 60 |
+
# Encoding
|
| 61 |
+
activity_encoded = self.encoders['activity_level'].transform(
|
| 62 |
+
[user_data['activity_level']]
|
| 63 |
+
)[0]
|
| 64 |
+
gender_encoded = self.encoders['gender'].transform(
|
| 65 |
+
[user_data['gender']]
|
| 66 |
+
)[0]
|
| 67 |
+
mood_encoded = self.encoders['mood'].transform(
|
| 68 |
+
[user_data['mood']]
|
| 69 |
+
)[0]
|
| 70 |
+
|
| 71 |
+
# Create feature vector
|
| 72 |
+
features = np.array([[
|
| 73 |
+
user_data['age'],
|
| 74 |
+
user_data['weight'],
|
| 75 |
+
user_data['height'],
|
| 76 |
+
user_data['steps'],
|
| 77 |
+
user_data['heart_rate'],
|
| 78 |
+
user_data['sleep_hours'],
|
| 79 |
+
user_data['stress_level'],
|
| 80 |
+
bmi,
|
| 81 |
+
activity_encoded,
|
| 82 |
+
gender_encoded,
|
| 83 |
+
mood_encoded,
|
| 84 |
+
good_sleep,
|
| 85 |
+
high_stress,
|
| 86 |
+
activity_score
|
| 87 |
+
]])
|
| 88 |
+
|
| 89 |
+
# Predict
|
| 90 |
+
features_scaled = self.scaler.transform(features)
|
| 91 |
+
calories = self.model.predict(features_scaled, verbose=0)[0][0]
|
| 92 |
+
|
| 93 |
+
return {
|
| 94 |
+
'calories': round(float(calories), 0),
|
| 95 |
+
'bmi': round(bmi, 1),
|
| 96 |
+
'bmi_category': self._get_bmi_category(bmi),
|
| 97 |
+
'activity_score': activity_score,
|
| 98 |
+
'sleep_quality': 'Good' if good_sleep else 'Poor',
|
| 99 |
+
'stress_level': 'High' if high_stress else 'Normal'
|
| 100 |
+
}
|
| 101 |
+
|
| 102 |
+
def _get_bmi_category(self, bmi):
|
| 103 |
+
if bmi < 18.5:
|
| 104 |
+
return 'Underweight'
|
| 105 |
+
elif bmi < 25:
|
| 106 |
+
return 'Normal'
|
| 107 |
+
elif bmi < 30:
|
| 108 |
+
return 'Overweight'
|
| 109 |
+
else:
|
| 110 |
+
return 'Obese'
|
| 111 |
+
|
| 112 |
+
# Example usage
|
| 113 |
+
if __name__ == "__main__":
|
| 114 |
+
# Initialize predictor
|
| 115 |
+
predictor = VitaMindPredictor(repo_id="YOUR_USERNAME/vitamind-calorie-predictor")
|
| 116 |
+
|
| 117 |
+
# Example user data
|
| 118 |
+
user = {
|
| 119 |
+
'age': 28,
|
| 120 |
+
'weight': 70, # kg
|
| 121 |
+
'height': 170, # cm
|
| 122 |
+
'steps': 10000,
|
| 123 |
+
'heart_rate': 75,
|
| 124 |
+
'sleep_hours': 8,
|
| 125 |
+
'stress_level': 3,
|
| 126 |
+
'activity_level': 'Active',
|
| 127 |
+
'gender': 'M',
|
| 128 |
+
'mood': 'happy'
|
| 129 |
+
}
|
| 130 |
+
|
| 131 |
+
# Make prediction
|
| 132 |
+
result = predictor.predict(user)
|
| 133 |
+
|
| 134 |
+
# Display results
|
| 135 |
+
print("\n" + "="*50)
|
| 136 |
+
print("VitaMind AI - Calorie Recommendation")
|
| 137 |
+
print("="*50)
|
| 138 |
+
print(f"Daily Calorie Goal: {result['calories']} kcal")
|
| 139 |
+
print(f"BMI: {result['bmi']} ({result['bmi_category']})")
|
| 140 |
+
print(f"Activity Score: {result['activity_score']}/5")
|
| 141 |
+
print(f"Sleep Quality: {result['sleep_quality']}")
|
| 142 |
+
print(f"Stress Level: {result['stress_level']}")
|
| 143 |
+
print("="*50)
|
metadata.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"config": {
|
| 3 |
+
"app_name": "VitaMind AI",
|
| 4 |
+
"version": "v11-production",
|
| 5 |
+
"model_name": "calorie_predictor_v11_prod",
|
| 6 |
+
"random_seed": 42,
|
| 7 |
+
"test_size": 0.15,
|
| 8 |
+
"val_size": 0.15,
|
| 9 |
+
"n_synthetic_samples": 5000,
|
| 10 |
+
"epochs": 300,
|
| 11 |
+
"batch_size": 64,
|
| 12 |
+
"initial_lr": 0.001,
|
| 13 |
+
"patience": 30,
|
| 14 |
+
"min_lr": 1e-06
|
| 15 |
+
},
|
| 16 |
+
"metrics": {
|
| 17 |
+
"mae": 12.011245755208343,
|
| 18 |
+
"mse": 223.89529877738235,
|
| 19 |
+
"rmse": 14.963131315917211,
|
| 20 |
+
"mape": 0.5193700410935488,
|
| 21 |
+
"r2_score": 0.9993513163297445,
|
| 22 |
+
"mean_error": -8.014262994791672,
|
| 23 |
+
"std_error": 12.635936349463588
|
| 24 |
+
},
|
| 25 |
+
"feature_names": [
|
| 26 |
+
"age",
|
| 27 |
+
"weight",
|
| 28 |
+
"height",
|
| 29 |
+
"steps",
|
| 30 |
+
"heart_rate",
|
| 31 |
+
"sleep_hours",
|
| 32 |
+
"stress_level",
|
| 33 |
+
"bmi",
|
| 34 |
+
"activity_level_encoded",
|
| 35 |
+
"gender_encoded",
|
| 36 |
+
"mood_encoded",
|
| 37 |
+
"good_sleep",
|
| 38 |
+
"high_stress",
|
| 39 |
+
"activity_score"
|
| 40 |
+
],
|
| 41 |
+
"training_date": "2026-01-02T16:28:47.636429",
|
| 42 |
+
"tensorflow_version": "2.20.0",
|
| 43 |
+
"model_summary": [
|
| 44 |
+
"Model: \"VitaMindAI_CaloriePredictor\"\n\u250f\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n\u2503 Layer (type) \u2503 Output Shape \u2503 Param # \u2503 Connected to \u2503\n\u2521\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2529\n\u2502 input_layer (InputLayer) \u2502 (None, 14) \u2502 0 \u2502 - \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 dense_1 (Dense) \u2502 (None, 256) \u2502 3,840 \u2502 input_layer[0][0] \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 bn_1 (BatchNormalization) \u2502 (None, 256) \u2502 1,024 \u2502 dense_1[0][0] \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 dropout_1 (Dropout) \u2502 (None, 256) \u2502 0 \u2502 bn_1[0][0] \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 dense_2 (Dense) \u2502 (None, 128) \u2502 32,896 \u2502 dropout_1[0][0] \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 bn_2 (BatchNormalization) \u2502 (None, 128) \u2502 512 \u2502 dense_2[0][0] \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 dropout_2 (Dropout) \u2502 (None, 128) \u2502 0 \u2502 bn_2[0][0] \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 dense_3 (Dense) \u2502 (None, 128) \u2502 16,512 \u2502 dropout_2[0][0] \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 residual_1 (Dense) \u2502 (None, 128) \u2502 32,896 \u2502 dropout_1[0][0] \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 add_1 (Add) \u2502 (None, 128) \u2502 0 \u2502 dense_3[0][0], \u2502\n\u2502 \u2502 \u2502 \u2502 residual_1[0][0] \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 dense_4 (Dense) \u2502 (None, 64) \u2502 8,256 \u2502 add_1[0][0] \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 bn_3 (BatchNormalization) \u2502 (None, 64) \u2502 256 \u2502 dense_4[0][0] \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 dropout_3 (Dropout) \u2502 (None, 64) \u2502 0 \u2502 bn_3[0][0] \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 output_layer (Dense) \u2502 (None, 1) \u2502 65 \u2502 dropout_3[0][0] \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n Total params: 286,981 (1.09 MB)\n Trainable params: 95,361 (372.50 KB)\n Non-trainable params: 896 (3.50 KB)\n Optimizer params: 190,724 (745.02 KB)\n"
|
| 45 |
+
]
|
| 46 |
+
}
|
model.keras
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:96173969acec289572e974586bdb4b41c59474d82c6a4adda3c9f326fd49f104
|
| 3 |
+
size 1219745
|
requirements.txt
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
tensorflow>=2.13.0
|
| 2 |
+
scikit-learn>=1.3.0
|
| 3 |
+
numpy>=1.24.0
|
| 4 |
+
joblib>=1.3.0
|
| 5 |
+
huggingface-hub>=0.19.0
|
scaler.joblib
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:cf47bd7a895a25e8fcdd38728c7c32e09e3284c07d4b84379f84f83d6990e386
|
| 3 |
+
size 919
|