MarcosRodrigo commited on
Commit
1fbfe32
·
verified ·
1 Parent(s): b882b37

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +78 -0
app.py ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+ import matplotlib.pyplot as plt
3
+ import tensorflow as tf
4
+ from tensorflow.keras.models import Sequential
5
+ from tensorflow.keras.layers import Dense
6
+ import streamlit as st
7
+
8
+ # Function to generate synthetic data
9
+ def generate_data(dataset_type, noise, n_samples=500):
10
+ np.random.seed(0)
11
+ if dataset_type == 'moons':
12
+ from sklearn.datasets import make_moons
13
+ X, y = make_moons(n_samples=n_samples, noise=noise)
14
+ elif dataset_type == 'circles':
15
+ from sklearn.datasets import make_circles
16
+ 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, y
24
+
25
+ # Function to create model
26
+ def 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 model
38
+
39
+ # Streamlit UI
40
+ st.title('Interactive Neural Network Visualization')
41
+ st.sidebar.header('Model Parameters')
42
+
43
+ # Dataset selection
44
+ dataset_type = st.sidebar.selectbox('Select dataset', ['moons', 'circles', 'linear'])
45
+ noise = st.sidebar.slider('Noise level', 0.0, 1.0, 0.2)
46
+ X, y = generate_data(dataset_type, noise)
47
+ split = st.sidebar.slider('Train/Test split ratio', 0.1, 0.9, 0.5)
48
+ split_idx = int(split * len(X))
49
+ X_train, X_test = X[:split_idx], X[split_idx:]
50
+ y_train, y_test = y[:split_idx], y[split_idx:]
51
+
52
+ # Model parameters
53
+ learning_rate = st.sidebar.slider('Learning rate', 0.001, 0.1, 0.01)
54
+ activation = st.sidebar.selectbox('Activation function', ['relu', 'tanh', 'sigmoid'])
55
+ regularization_rate = st.sidebar.slider('Regularization rate', 0.0, 0.1, 0.01)
56
+ hidden_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 model
60
+ model = create_model((2,), hidden_layers, activation, learning_rate, regularization_rate)
61
+ history = model.fit(X_train, y_train, epochs=100, verbose=0, validation_split=0.1)
62
+
63
+ # Evaluation
64
+ train_loss, train_acc = model.evaluate(X_train, y_train, verbose=0)
65
+ test_loss, test_acc = model.evaluate(X_test, y_test, verbose=0)
66
+ st.write(f'Training loss: {train_loss:.4f}, Training accuracy: {train_acc:.4f}')
67
+ st.write(f'Test loss: {test_loss:.4f}, Test accuracy: {test_acc:.4f}')
68
+
69
+ # Plot data and decision boundary
70
+ fig, ax = plt.subplots()
71
+ ax.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap='viridis', marker='o', edgecolor='k', s=50)
72
+ xx, 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))
74
+ Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
75
+ Z = Z.reshape(xx.shape)
76
+ ax.contourf(xx, yy, Z, alpha=0.5, cmap='viridis')
77
+ ax.set_title('Data and Model Decision Boundary')
78
+ st.pyplot(fig)