import os import random import tensorflow as tf from tensorflow.keras.datasets import mnist from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Flatten from tensorflow.keras.optimizers import Adam import json from tqdm import tqdm # Set random seed for reproducibility random.seed(47) tf.random.set_seed(47) # Directory to save models model_dir = "/Users/nihar/Desktop/Desktop - nihar’s MacBook Air/cc/code files/auto-ML/NNbasics/modelllls" if not os.path.exists(model_dir): os.makedirs(model_dir) # Clear the directory for f in os.listdir(model_dir): os.remove(os.path.join(model_dir, f)) # Load 50% of MNIST data (x_train_full, y_train_full), (x_test_full, y_test_full) = mnist.load_data() x_train_full, x_test_full = x_train_full / 255.0, x_test_full / 255.0 # Use 50% of the data x_train_full, y_train_full = x_train_full[:30000], y_train_full[:30000] x_test_full, y_test_full = x_test_full[:5000], y_test_full[:5000] # Split into training, validation, and test sets train_size = int(0.7 * len(x_train_full)) val_size = int(0.2 * len(x_train_full)) test_size = len(x_train_full) - train_size - val_size x_train, y_train = x_train_full[:train_size], y_train_full[:train_size] x_val, y_val = x_train_full[train_size:train_size + val_size], y_train_full[train_size:train_size + val_size] x_test, y_test = x_train_full[train_size + val_size:], y_train_full[train_size + val_size:] # Generate more values for learning rates, batch sizes, and epochs learning_rates = [round(0.00001 * (1.2 ** i), 8) for i in range(20)] batch_sizes = [8, 16, 32, 64, 128, 256, 512] epochs_list = [10, 15, 20, 25, 30, 35, 40, 45, 50] # Generate 999 random combinations combinations = set() while len(combinations) < 999: lr = random.choice(learning_rates) bs = random.choice(batch_sizes) epochs = random.choice(epochs_list) combinations.add((lr, bs, epochs)) # Train and save models with progress bar for i, (lr, bs, epochs) in enumerate(tqdm(combinations, desc="Training models")): model = Sequential([ Flatten(input_shape=(28, 28)), Dense(128, activation='relu'), Dense(10, activation='softmax') ]) model.compile(optimizer=Adam(learning_rate=lr), loss='sparse_categorical_crossentropy', metrics=['accuracy']) history = model.fit(x_train, y_train, epochs=epochs, batch_size=bs, validation_data=(x_val, y_val), verbose=0) model_filename = f"mnist_model_lr{lr}_bs{bs}_epochs{epochs}.keras" model.save(os.path.join(model_dir, model_filename)) history_filename = model_filename.replace('.keras', '.json') with open(os.path.join(model_dir, history_filename), 'w') as f: json.dump(history.history, f)