def update_step(x_batch, y_batch, model, learning_rate): """Performs on single update step, (i.e. forward then backward). Args: x_batch(numpy.ndarray): input data of dimension (N, ndims). y_batch(numpy.ndarray): label data of dimension (N, 1). model(LinearModel): Initialized linear model. """ f = LinearRegression.forward(model, x_batch) grad = learning_rate * LinearRegression.backward(model, f, y_batch) model.w = model.w - learning_rate * grad
def main(_): """High level pipeline. This script performs the trainsing, evaling and testing state of the model. """ # learning_rate = FLAGS.learning_rate # feature_type = FLAGS.feature_type # model_type = FLAGS.model_type # num_steps = FLAGS.num_steps feature_type = 'default' model_type = 'svm' # Load dataset. data = read_dataset('data/train_lab.txt', 'data/image_data') # Data Processing. data = preprocess_data(data, 'default') print("Finish preprocessing...") # Initialize model. ndim = data['image'].shape[1] if model_type == 'linear': model = LinearRegression(ndim, 'uniform') elif model_type == 'logistic': model = LogisticRegression(ndim, 'uniform') elif model_type == 'svm': model = SupportVectorMachine(ndim, 'uniform') # Train Model. print("Start to train the model...") model = train_model(data, model) # Eval Model. print("Start to evaluate the model...") data_val = read_dataset('data/val_lab.txt', 'data/image_data') data_val = preprocess_data(data_val, feature_type) loss, acc = eval_model(data_val, model) print(loss, acc) # Test Model. print("Start doing the test") data_test = read_dataset('data/test_lab.txt', 'data/image_data') print("Start preprocess testing data") data_test = preprocess_data(data_test, feature_type) print("Making predictions") data_test['label'] = model.predict(model.forward(data_test['image'])) print("Output the results to csv file") write_dataset('data/test_lab.txt', data_test) # Generate Kaggle output. print("Finished!")
def test_input_output(self): model = LinearRegression(10) x = np.zeros([4, 10]) y = np.zeros([4, ]) # Check forward shape. f = model.forward(x) self.assertEqual(f.shape, (4,)) # Check backward shape. gradient = model.backward(f, y) self.assertEqual(gradient.shape, (11,)) # Check loss shape. loss = model.loss(f, y) self.assertEqual(loss.shape, ())