def test02_sgd_sanity_with_epochs(self): C, W0, X, _, _ = create_C_W_X_d() optimizer = SGD(batch_size=256, m=X.shape[1]) W = W0.copy() for epoch in range(15): W = optimizer.optimize(W, X, C, objective_soft_max, objective_soft_max_gradient_W, lr=1) self.assertTrue(True)
def train(C_train, C_val, X_train, X_val, batch_size, epochs, lr, momentum=0): # ----------------- hyper params init ----------------- W0 = randn(X_train.shape[0], C_train.shape[0]) m, n = W0.shape W = W0.copy() optimizer = SGD(batch_size=batch_size, m=X_train.shape[1]) # ---------------------------------------------------- # ----------------- stats lists init ----------------- W_history = zeros((W.shape[0] * W.shape[1], epochs)) val_score = [] train_score = [] train_acc = [] val_acc = [] # ---------------------------------------------------- for epoch in range(epochs): W = optimizer.optimize(W, X_train, C_train, objective_soft_max, objective_soft_max_gradient_W, lr=lr, momentum=momentum) W_history[:, epoch] = W.reshape(W.shape[0] * W.shape[1]) train_score.append(objective_soft_max(X_train, W, C_train)) val_score.append(objective_soft_max(X_val, W, C_val)) train_acc.append(accuracy(X_train, W, C_train)) val_acc.append(accuracy(X_val, W, C_val)) W_res = average(W_history, axis=1).reshape(m, n) train_score.append(objective_soft_max(X_train, W_res, C_train)) val_score.append(objective_soft_max(X_val, W_res, C_val)) # todo add plot epoch \ accuracy (wrote in train) plot(range(len(train_score)), train_score) return train_score, train_acc, val_score, val_acc
def test01_sgd_sanity(self): C, W0, X, _, _ = create_C_W_X_d() optimizer = SGD(batch_size=256, m=X.shape[1]) W = optimizer.optimize(W0, X, C, objective_soft_max, objective_soft_max_gradient_W) self.assertTrue(True)