TuNNe / train.py
Niharmahesh's picture
Upload 109 files
f5f6805 verified
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)