From 2c6442e421f653373ba0f07c7b773495da3cdbec Mon Sep 17 00:00:00 2001 From: Derek Holloway Date: Mon, 16 Feb 2026 23:03:06 -0800 Subject: [PATCH] Get tensorflow DNN layout --- WebServer/AIPython/main.py | 82 +++++++++++++++++++++++++++++++------- 1 file changed, 67 insertions(+), 15 deletions(-) diff --git a/WebServer/AIPython/main.py b/WebServer/AIPython/main.py index 403de0cf..7966e716 100644 --- a/WebServer/AIPython/main.py +++ b/WebServer/AIPython/main.py @@ -1,20 +1,72 @@ -import tensorflow as tf -import keras -from keras.layers import Dense, Flatten, Conv2D -from keras import Model +import pandas as pd +import numpy as np +import matplotlib.pyplot as plt +import os +from sklearn.model_selection import train_test_split +from keras import Sequential, layers, optimizers -def main(): - mnist = keras.datasets.mnist +# Get the CWD for pathing due to being called from C# now +SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) +DATA_DIR = os.path.join(SCRIPT_DIR, "data") - (x_train, y_train), (x_test, y_test) = mnist.load_data() - x_train, x_test = x_train / 255.0, x_test / 255.0 +# Load the dataset +dataset = pd.read_parquet(os.path.join(DATA_DIR, "stocks.parquet")) +X = dataset.drop('Volatility_5', axis=1) +Y = dataset['Volatility_5'] - # Add a channels dimension - x_train = x_train[..., tf.newaxis].astype("float32") - x_test = x_test[..., tf.newaxis].astype("float32") +# Show the datatypes +print(dataset.dtypes) - # batch and shuffle the dataset - train_ds = tf.data.Dataset.from_tensor_slices( - (x_train, y_train)).shuffle(10000).batch(32) +# Split out the test and train +train_features, test_features, train_labels, test_labels = train_test_split(X, Y, test_size=0.2) - test_ds = tf.data.Dataset.from_tensor_slices((x_test, y_test)).batch(32) \ No newline at end of file +# Create a normalizer to nomralize the data +normalizer = layers.Normalization(axis=-1) +normalizer.adapt(np.array(train_features)) + +# Start with a linear model +dnn_linear_model = Sequential([ + layers.Input(shape=(9,)), # Explicitly tell Keras there are 9 features + normalizer, + layers.Dense(64, activation='relu'), + layers.Dense(64, activation='relu'), + layers.Dense(1) +]) + +# Configure the model +dnn_linear_model.compile( + optimizer=optimizers.Adam(learning_rate=0.1), + loss='mean_absolute_error' +) + +dnn_linear_model.summary() + +# Train the model +Training_Data = dnn_linear_model.fit( + train_features, + train_labels, + epochs=100, + # Show progress + verbose=1, + # Calculate validation results on 20% of the training data. + validation_split = 0.2 +) + +# Predict +test_predictions = dnn_linear_model.predict(test_features).flatten() +a = plt.axes(aspect='equal') +plt.scatter(test_labels, test_predictions) +plt.xlabel('True Values') +plt.ylabel('Predictions') +lims = [0, 50] +plt.xlim(lims) +plt.ylim(lims) +_ = plt.plot(lims, lims) + + +test_results = dnn_linear_model.evaluate( + test_features, test_labels, verbose=0 +) + +# Save the model +dnn_linear_model.save(os.path.join(DATA_DIR, "model.keras")) \ No newline at end of file