Team Ai
Apppublic

MarcosRodrigo/tensorflow-test

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
app.py79 linesDownload Raw Back to root
1import numpy as np2import matplotlib.pyplot as plt3import tensorflow as tf4from tensorflow.keras.models import Sequential5from tensorflow.keras.layers import Dense6import streamlit as st7 8# Function to generate synthetic data9def generate_data(dataset_type, noise, n_samples=500):10    np.random.seed(0)11    if dataset_type == 'moons':12        from sklearn.datasets import make_moons13        X, y = make_moons(n_samples=n_samples, noise=noise)14    elif dataset_type == 'circles':15        from sklearn.datasets import make_circles16        X, y = make_circles(n_samples=n_samples, noise=noise, factor=0.5)17    elif dataset_type == 'linear':18        X = np.random.randn(n_samples, 2)19        y = (X[:, 0] > X[:, 1]).astype(int)20    else:21        X = np.random.randn(n_samples, 2)22        y = np.random.randint(0, 2, n_samples)23    return X, y24 25# Function to create model26def create_model(input_shape, hidden_layers, activation, learning_rate, regularization_rate):27    model = Sequential()28    model.add(Dense(hidden_layers[0], input_shape=input_shape, activation=activation,29                    kernel_regularizer=tf.keras.regularizers.l2(regularization_rate)))30    for units in hidden_layers[1:]:31        model.add(Dense(units, activation=activation,32                        kernel_regularizer=tf.keras.regularizers.l2(regularization_rate)))33    model.add(Dense(1, activation='sigmoid'))34    model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate),35                  loss='binary_crossentropy',36                  metrics=['accuracy'])37    return model38 39# Streamlit UI40st.title('Interactive Neural Network Visualization')41st.sidebar.header('Model Parameters')42 43# Dataset selection44dataset_type = st.sidebar.selectbox('Select dataset', ['moons', 'circles', 'linear'])45noise = st.sidebar.slider('Noise level', 0.0, 1.0, 0.2)46X, y = generate_data(dataset_type, noise)47split = st.sidebar.slider('Train/Test split ratio', 0.1, 0.9, 0.5)48split_idx = int(split * len(X))49X_train, X_test = X[:split_idx], X[split_idx:]50y_train, y_test = y[:split_idx], y[split_idx:]51 52# Model parameters53learning_rate = st.sidebar.slider('Learning rate', 0.001, 0.1, 0.01)54activation = st.sidebar.selectbox('Activation function', ['relu', 'tanh', 'sigmoid'])55regularization_rate = st.sidebar.slider('Regularization rate', 0.0, 0.1, 0.01)56hidden_layers = [st.sidebar.slider('Layer 1 units', 1, 10, 4),57                 st.sidebar.slider('Layer 2 units', 1, 10, 2)]58 59# Create and train model60model = create_model((2,), hidden_layers, activation, learning_rate, regularization_rate)61history = model.fit(X_train, y_train, epochs=100, verbose=0, validation_split=0.1)62 63# Evaluation64train_loss, train_acc = model.evaluate(X_train, y_train, verbose=0)65test_loss, test_acc = model.evaluate(X_test, y_test, verbose=0)66st.write(f'Training loss: {train_loss:.4f}, Training accuracy: {train_acc:.4f}')67st.write(f'Test loss: {test_loss:.4f}, Test accuracy: {test_acc:.4f}')68 69# Plot data and decision boundary70fig, ax = plt.subplots()71ax.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap='viridis', marker='o', edgecolor='k', s=50)72xx, yy = np.meshgrid(np.linspace(X_test[:, 0].min(), X_test[:, 0].max(), 100),73                     np.linspace(X_test[:, 1].min(), X_test[:, 1].max(), 100))74Z = model.predict(np.c_[xx.ravel(), yy.ravel()])75Z = Z.reshape(xx.shape)76ax.contourf(xx, yy, Z, alpha=0.5, cmap='viridis')77ax.set_title('Data and Model Decision Boundary')78st.pyplot(fig)79