iris_keras / README.md
studentscolab's picture
Dodanie modelu Keras
ad12eed verified
---
language: en
library_name: tensorflow
tags:
- keras
- tensorflow
- tabular
- iris
- multiclass-classification
pipeline_tag: tabular-classification
license: mit
---
# Iris MLP Classifier (Keras / TensorFlow)
This repository contains a simple **multiclass classifier** for the classic **Iris** dataset, implemented as a small **MLP (Multi-Layer Perceptron)** in **TensorFlow / Keras**.
The model predicts one of three classes based on four numerical features.
## Task
**Tabular multiclass classification**
Given the 4 iris measurements, predict the class:
- `0` → setosa
- `1` → versicolor
- `2` → virginica
## Dataset
**Iris dataset** (from `sklearn.datasets.load_iris`)
### Input features (4)
The model expects **4 float features** in this exact order:
1. `sepal length (cm)`
2. `sepal width (cm)`
3. `petal length (cm)`
4. `petal width (cm)`
### Target (3 classes)
- integer labels `y ∈ {0,1,2}`
- no one-hot encoding required (training uses `sparse_categorical_crossentropy`)
---
## Model architecture
A small feed-forward network with built-in feature normalization:
### Why `Normalization` layer?
The `tf.keras.layers.Normalization` layer learns feature-wise mean and variance from the training set via `adapt(...)`.
This makes inference easier and safer: **the same scaling used during training is embedded inside the saved model**.
---
## Training configuration
- **Optimizer:** Adam (`learning_rate=1e-3`)
- **Loss:** `sparse_categorical_crossentropy`
- **Metric:** accuracy
- **Train/test split:** 80/20 (`stratify=y`, `random_state=42`)
- **Validation split (from train):** 20% (`validation_split=0.2`)
- **Epochs:** 100
- **Batch size:** 16
- **Reproducibility:**
- `tf.random.set_seed(42)`
- `np.random.seed(42)`
> Note: Exact accuracy may vary slightly across environments due to numerical differences and nondeterminism in some TF ops.
---
## Example: training script (reference)
The model was trained using the following core logic (simplified):
```python
normalizer = tf.keras.layers.Normalization(axis=-1)
normalizer.adapt(X_train.to_numpy())
model = tf.keras.Sequential([
tf.keras.Input(shape=(4,)),
normalizer,
tf.keras.layers.Dense(16, activation="relu"),
tf.keras.layers.Dense(16, activation="relu"),
tf.keras.layers.Dense(3, activation="softmax"),
])
model.compile(
optimizer=tf.keras.optimizers.Adam(learning_rate=1e-3),
loss="sparse_categorical_crossentropy",
metrics=["accuracy"]
)
model.fit(
X_train.to_numpy(), y_train.to_numpy(),
validation_split=0.2,
epochs=100,
batch_size=16,
verbose=0
)
```
## Example
```python
import numpy as np
import pandas as pd
import tensorflow as tf
from huggingface_hub import hf_hub_download
filename = "iris_mlp.keras"
repo_id = "studentscolab/iris_keras"
model_path = hf_hub_download(repo_id=repo_id, filename=filename)
model = tf.keras.models.load_model(model_path)
x_new = pd.DataFrame([{
"sepal length (cm)": 5.1,
"sepal width (cm)": 3.5,
"petal length (cm)": 1.4,
"petal width (cm)": 0.2,
}])
proba = model.predict(x_new.to_numpy(), verbose=0)[0] # shape: (3,)
pred = int(np.argmax(proba))
print("Probabilities:", proba)
print("Predicted class:", pred)
```