Boorla's picture
Update app.py
25a8114 verified
Raw History Blame Contribute Delete
4.36 kB
import streamlit as st
import tensorflow
from tensorflow import keras
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.datasets import make_circles
from sklearn.datasets import make_moons
from keras.activations import relu,sigmoid,tanh
from tensorflow.keras.optimizers import Adam, SGD, RMSprop, Adagrad, Nadam
st.title("Implementation of Tensorflow Playground")
dataset=st.selectbox('Choose a dataset type',
options=['make_blobs', 'make_circles', 'make_moons'])
if dataset=='make_blobs':
X, y = make_blobs(n_samples=1000,random_state=42,centers=2, cluster_std=1.5)
elif dataset =='make_circles':
X, y = make_circles(n_samples=1000,random_state=42,noise=0.2,factor=0.5)
else:
X, y = make_moons(n_samples=1000, random_state=42,noise=0.2)
training_Split_Ratio=st.number_input('Enter Train-Test Split Ratio',min_value=0.1,step=0.1)
batch=st.number_input('Enter Batch Size',min_value=8,step=8)
no_hidden_layer=st.number_input('Enter no.of hidden layers',min_value=1)
layers=[]
with st.expander("🔧 Configure Hidden Layers"):
for i in range(1, no_hidden_layer + 1):
st.markdown(f"**Hidden Layer {i}**")
cols = st.columns(2)
with cols[0]:
neurons = st.number_input(f'Neurons in Layer {i}', min_value=5, step=1, key=f"neurons_{i}")
with cols[1]:
activation_fun = st.selectbox(f'Activation of Layer {i}', ['relu', 'sigmoid', 'tanh'], key=f"activation_{i}")
layers.append((neurons, activation_fun))
optimizers = st.selectbox("Select Optimizer", ['adam', 'sgd', 'rmsprop', 'adagrad'])
learning_rate = st.number_input('Enter Learning Rate', min_value=0.001, max_value=1.0, step=0.001, format="%.4f")
epoch=st.number_input('Enter no.of epochs',min_value=15,step=1)
if optimizers == 'adam':
optimizer = Adam(learning_rate=learning_rate)
elif optimizers == 'sgd':
optimizer = SGD(learning_rate=learning_rate)
elif optimizers == 'rmsprop':
optimizer = RMSprop(learning_rate=learning_rate)
elif optimizers == 'adagrad':
optimizer = Adagrad(learning_rate=learning_rate)
if st.button('Train Model'):
model=keras.Sequential()
model.add(keras.layers.Input(shape=(X.shape[1],)))
for neurons, activation in layers:
model.add(keras.layers.Dense(neurons, activation=activation))
if dataset=='make_blobs':
model.add(keras.layers.Dense(3,activation="softmax"))
model.compile(loss="sparse_categorical_crossentropy",optimizer=optimizer,metrics=['accuracy'])
else:
model.add(keras.layers.Dense(1,activation="sigmoid"))
model.compile(loss="binary_crossentropy", optimizer=optimizer, metrics=['accuracy'])
history=model.fit(X,y,validation_split=training_Split_Ratio,epochs=epoch,batch_size = batch,verbose=0)
st.success("Model training complete!")
st.subheader("Decision Boundary")
def plot_decision_boundary(model, X, y):
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.linspace(x_min, x_max, 300),
np.linspace(y_min, y_max, 300))
grid = np.c_[xx.ravel(), yy.ravel()]
probs = model.predict(grid)
if probs.ndim > 1 and probs.shape[1] > 1:
Z = np.argmax(probs, axis=1).reshape(xx.shape)
else:
Z = (probs > 0.5).astype(int).reshape(xx.shape)
plt.figure(figsize=(6, 5))
plt.contourf(xx, yy, Z, alpha=0.5, cmap="coolwarm")
plt.scatter(X[:, 0], X[:, 1], c=y, cmap="coolwarm", edgecolors='k')
plt.xticks([]), plt.yticks([])
st.pyplot(plt)
plt.close()
plot_decision_boundary(model, X, y)
st.subheader("Training vs Validation Loss")
fig2, ax2 = plt.subplots()
ax2.plot(history.history['loss'], label='Train Loss')
ax2.plot(history.history['val_loss'], label='Validation Loss')
ax2.set_title('Training vs Testing Loss')
ax2.set_xlabel('Epoch')
ax2.set_ylabel('Loss')
ax2.legend()
ax2.grid(True)
st.pyplot(fig2)
st.subheader('Metrics')
st.write("✅ Training Accuracy :", f"{history.history['accuracy'][-1]:.4f}")
st.write("🤖 Testing Accuracy :", f"{history.history['val_accuracy'][-1]:.4f}")