Nano-AutoGrad / uilit.py
deep-matter's picture
Upload 6 files
2ec702c
raw
history blame
4.29 kB
from init import *
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import os
from PIL import Image
import matplotlib.animation as animation
from matplotlib.animation import FuncAnimation
from IPython.display import clear_output
from autograd.core.engine import Value
from sklearn.datasets import make_moons, make_blobs
import plotly.graph_objects as go
import plotly.io as pio
import imageio
clear_output()
# Iterate through the first 6 images
def extract_path_df(path_dir, index_show):
path_file = []
for filesname in os.listdir(path_dir):
path_file.append(os.path.join(path_dir,filesname))
for data_df in range(0,len(path_file)):
data_frame = pd.read_csv(path_file[data_df])
show_df = data_frame.head(index_show)
return path_file , f"dataframe: {show_df}"
def loading_df_to_numpy(path_file):
data_df = pd.read_csv(path_file)
data = np.array(data_df)
m, n = data.shape
data_train = data[1000:m].T
Y_train = data_train[0][40900:]
X_train = data_train[1:n][:, 40900:]
# Manually split the data into training and testing sets
split_index = int(X_train.shape[0] * 0.8) # 80% for training, 20% for testing
X_train_split = X_train[:, :10]
Y_train_split = Y_train[:10]
X_test_split = X_train[:,:5]
Y_test_split = Y_train[:5]
return X_train_split, X_test_split, Y_train_split, Y_test_split
def initialize_data(n_samples: int, noise: float):
input_data, Target = make_moons(n_samples=n_samples, noise=noise)
Target = Target * 2 - 1 # make y be -1 or 14
# fig.close()
return input_data, Target
def plot_sample(DATA_TRAIN,DATA_LABEL):
num_images = min(6, DATA_TRAIN.shape[1])
fig, axs = plt.subplots(2, 3, figsize=(10, 7))
for i in range(num_images):
label = DATA_LABEL
image = DATA_TRAIN[:, i]
current_image = image.reshape(28, 28) * 255
# Determine the subplot coordinates
row = i // 3
col = i % 3
# Plot the image in the corresponding subplot
axs[row, col].imshow(current_image, cmap='gray')
axs[row, col].set_title("Label: {}".format(label))
axs[row, col].axis('off')
plt.tight_layout()
plt.savefig("sample.png")
def copy(model):
model = SparseMLP(nin=2, nouts=[16, 16, 1], sparsities=[0.,0.9,0.8])
model.parameters()
return model
def Zvals(model , X_train):
global X
h = 0.25
x_min, x_max = X_train[:, 0].min() - 1, X_train[:, 0].max() + 1
y_min, y_max = X_train[:, 1].min() - 1, X_train[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
np.arange(y_min, y_max, h))
Xmesh = np.c_[xx.ravel(), yy.ravel()]
inputs = [list(map(Value, xrow)) for xrow in Xmesh]
scores = list(map(model, inputs))
Z = np.array([s.data > 0 for s in scores])
Z = Z.reshape(xx.shape)
return Z
def dboundary(model):
global X
global Y
h = 0.25
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.arange(x_min, x_max, h),
np.arange(y_min, y_max, h))
Xmesh = np.c_[xx.ravel(), yy.ravel()]
fig, ax = plt.subplots(figsize=(8,8))
Z = Zvals(model)
ln = ax.contourf(xx, yy, Z, cmap=plt.cm.Spectral, alpha=0.8)
ax.scatter(X[:, 0], X[:, 1], c=Y, s=40, cmap=plt.cm.Spectral)
ax.set_xlim(xx.min(), xx.max())
ax.set_ylim(yy.min(), yy.max())
return fig,ax,ln
def graph_trace(Path, nframes, interval):
animation_frames = []
# Load the first image to get its dimensions and color mode
first_frame_path = f"assets/{Path}_0.png"
first_image = Image.open(first_frame_path)
width, height = first_image.size
color_mode = first_image.mode
# Resize and convert all the images to the same dimensions and color mode
resized_width = 900 # Set your desired width
resized_height = 700 # Set your desired height
for i in range(nframes):
frame_path = f"assets/{Path}_{i}.png"
image = Image.open(frame_path)
resized_image = image.resize((resized_width, resized_height)).convert(color_mode)
animation_frames.append(resized_image)
animation_path = "out/Graph.mp4"
imageio.mimsave(animation_path, animation_frames, format="mp4")