jacobian

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit 99e8e1dfc3da45d728e0bec83fc6212b3708d47c
parent 5717e83ca41194bab5491c13e6399cc9e2eb67da
Author: David Freifeld <freifeld.david@gmail.com>
Date:   Mon, 28 Dec 2020 19:28:22 -0800

Trimming unnecessary files in repo

Diffstat:
Mscripts/example.py | 8--------
Mscripts/sweep.yaml | 8--------
Dsrc/archive/mr_bpnn.cpp | 102-------------------------------------------------------------------------------
Dsrc/archive/mr_bpnn_1.cpp | 120-------------------------------------------------------------------------------
Dsrc/archive/mr_bpnn_2.cpp | 63---------------------------------------------------------------
Dsrc/capsnet.cpp | 23-----------------------
Dsrc/experimental/activations.cpp | 32--------------------------------
Dsrc/experimental/simd.cpp | 48------------------------------------------------
Dsrc/experimental/simd_simple.cpp | 38--------------------------------------
Dsrc/rnn.cpp | 108-------------------------------------------------------------------------------
10 files changed, 0 insertions(+), 550 deletions(-)

diff --git a/scripts/example.py b/scripts/example.py @@ -1,11 +1,3 @@ -# -# example.py -# Jacobian -# -# Created by David Freifeld -# Copyright © 2020 David Freifeld. All rights reserved. -# - import importlib.util spec = importlib.util.spec_from_file_location("mrbpnn", "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/mrbpnn/mrbpnn.cpython-37m-darwin.so") mrbpnn = importlib.util.module_from_spec(spec) diff --git a/scripts/sweep.yaml b/scripts/sweep.yaml @@ -1,11 +1,3 @@ -# -# sweep.yaml -# Jacobian -# -# Created by David Freifeld -# Copyright © 2020 David Freifeld. All rights reserved. -# - program: example.py method: bayes metric: diff --git a/src/archive/mr_bpnn.cpp b/src/archive/mr_bpnn.cpp @@ -1,102 +0,0 @@ -// -// mr_bpnn.cpp -// Jacobian -// -// Created by David Freifeld -// Copyright © 2020 David Freifeld. All rights reserved. -// - -#include "bpnn.hpp" -#include "utils.hpp" - -class NetworkArray -{ -public: - std::function<struct pair*(struct pair*)> map; - std::function<struct pair*(struct pair*)> reduce; - std::function<void(char*)> translate; - - NetworkArray(char* configuration, std::function<Network*(void)> setup, int epochs); - void start_array(char* data, int m, int length, char* ip, int r); -}; - -NetworkArray::NetworkArray(char* configuration, std::function<Network*(void)> setup, int epochs) -{ - map = [setup, epochs](struct pair* input_pair) -> struct pair* - { - //printf("Hello? %s\n", test.key); - printf("Recieved %p %p in form of %p (at %p)\n", input_pair->key, input_pair->value, input_pair, &input_pair); - printf("%s %p\n", (char*)input_pair->key, input_pair->value); - char* path = new char[100]; - strcpy(path, (char*)input_pair->key); - //strcat(path, "_shuf"); - //int linecount = prep_file((char*)input_pair.key, path); - // Network* net = setup(); - // net->train(epochs); - struct pair* output = new struct pair; - //char* key = new char[100]; - //strcpy(key, path); - output[0].key = 0x0; - output[0].value = 0x0; - return output; - }; - reduce = [](struct pair* input_pairs) -> struct pair* - { - struct pair* output = new struct pair[6]; - for (int i = 0; input_pairs[i].key != 0x0; i++) { - float* acc = new float; - *acc = ((Network*)input_pairs[i].value)->test("./test.txt"); - output[i].key = input_pairs[i].key; - output[i].value = acc; - } - return output; - }; - translate = [](char* path) -> void - { - FILE* rptr = fopen(path, "r"); - FILE* wptr = fopen("./translated", "w"); - char* line = new char[MAXLINE]; - char* newline = new char[MAXLINE]; - while (fgets(line, MAXLINE, rptr) != NULL) { - void* addr1; - void* addr2; - sscanf(line, "%p %p", &addr1, &addr2); - sprintf(newline, "%s %f", (char*)addr1, *(float*)addr2); - int batch_num = strtol((char*)addr1, NULL, 10); - fprintf(wptr, "%s %f\n",(char*)addr1, *(float*)addr2); - } - fclose(rptr); - fclose(wptr); - free(newline); - free(line); - }; -} - -void NetworkArray::start_array(char* data, int m, int length, char* ip, int r) -{ - begin(data, map, reduce, translate, m, length, ip, r); -} - -Network* setup() -{ - Network* net = new Network ("./data_banknote_authentication.txt", 10, 0.01, 0.001, 0.9); - net->add_layer(4, "linear"); - net->add_layer(5, "sigmoid"); - net->set_activation(1, lecun_tanh, lecun_tanh_deriv); - net->add_layer(1, "resig"); - net->initialize(); - return net; -} - -int main() -{ - NetworkArray netarray ("Train", setup, 1); - // char* path = "./extra.txt"; - // char* msg = "junk"; - //struct pair testing = {(void*)path, (void*)msg}; - // printf("SENDING %p %p (part of %p)\n", testing.key, testing.value, &testing); - //netarray.map(testing); - netarray.start_array("./extra.txt", 1, 1, "98.33.105.140", 1); - return 0; -} - diff --git a/src/archive/mr_bpnn_1.cpp b/src/archive/mr_bpnn_1.cpp @@ -1,120 +0,0 @@ -// -// mr_bpnn_1.cpp -// Jacobian -// -// Created by David Freifeld -// Copyright © 2020 David Freifeld. All rights reserved. -// - -#include "bpnn.hpp" - -struct pair* map (struct pair input_pair) -{ - pair* output_pairs = new pair[1024]; - int linecount = prep_file("./data_banknote_authentication.txt"); - Network net ("./shuffled.txt", 4, 2, 1, 5, 1, 1); - float epoch_cost = 1000; - int epochs = 0; - net.batches= 1; - - while (epochs < 1) { - int linecount = prep_file("./data_banknote_authentication.txt"); - float cost_sum = 0; - for (int i = 0; i < linecount-net.batch_size; i+=net.batch_size) { - net.feedforward(); - net.backpropagate(); - cost_sum += net.cost(); - net.batches++; - int exit = net.next_batch(net.fpath); - if (exit == -1) { - break; - } - } - epoch_cost = 1.0/((float) linecount) * cost_sum; - printf("EPOCH %i: Cost is %f for %i instances.\n", epochs, epoch_cost, linecount); - epochs++; - } - int rounds = 1; - int exit = 0; - float totalcost = -1; - linecount = prep_file((char*)input_pair.key); - FILE* fptr = fopen((char*)input_pair.key, "r"); - while (exit == 0) { - char line[1024] = {' '}; - int inputs = net.layers[0].contents->cols(); - int datalen = net.batch_size * inputs; - float batch[datalen]; - for (int i = 0; i < + 1; i+= net.batch_size) { - if (fgets(line, 1024, fptr)==NULL) { - exit = -1; - } - if (i >= rounds) { - for (int j = 0; j < net.batch_size; j++) { - fgets(line, 1024, fptr); - sscanf(line, "%f,%f,%f,%f,%lf", &batch[0 + (j * inputs)], &batch[1 + (j * inputs)], &batch[2 + (j * inputs)], &batch[3 + (j * inputs)], &(*net.labels)(j)); - } - } - } - float *batchptr = batch; - net.update_layer(batchptr, datalen, 0); - net.feedforward(); - char* key = new char[1024]; - sprintf(key, "%i", net.batch_size); - output_pairs[rounds-1].key = (void*) key; - float* cost = new float; - *cost = net.cost(); - // std::cout << *cost << " for " << i << "\n"; - output_pairs[rounds-1].value = cost; - totalcost += net.cost(); - net.next_batch("./test.txt"); - rounds++; - } - return output_pairs; -} - -pair* reduce (pair* input_pairs) -{ - pair* output_pairs = new pair[2]; - int keysum = 0; - float* valsum = new float; - for (int i = 0; i < 5; i++) { - printf("%s %f\n", (char*)input_pairs[i].key, *(float*)input_pairs[i].value); - keysum += strtol((char*)input_pairs[i].key, NULL, 10); - *valsum += *(float*)input_pairs[i].value; - } - char* key = new char[1024]; - // std::cout << keysum << " and " << *valsum << " are SUMS\n"; - sprintf(key, "%d", keysum); - output_pairs[0].key = (void*) key; - output_pairs[0].value = valsum; - output_pairs[1].key = (void*) '\0'; - int nullval = -1; - output_pairs[1].value = &nullval; - return output_pairs; -} - -void translate(char* path) -{ - FILE* rptr = fopen(path, "r"); - FILE* wptr = fopen("./translated", "w"); - char* line = new char[MAXLINE]; - char* newline = new char[MAXLINE]; - while (fgets(line, MAXLINE, rptr) != NULL) { - void* addr1; - void* addr2; - sscanf(line, "%p %p", &addr1, &addr2); - sprintf(newline, "%s %f", (char*)addr1, *(float*)addr2); - int batch_num = strtol((char*)addr1, NULL, 10); - fprintf(wptr, "%s %f (avg %f)\n",(char*)addr1, *(float*)addr2, ((*(float*)addr2/(float)batch_num))); - } - fclose(rptr); - fclose(wptr); - free(newline); - free(line); -} - -int main(int argc, char** argv) -{ - // begin(argv[2], map, reduce, translate, strtol(argv[1], NULL, 10), 6, argv[3], strtol(argv[4], NULL, 10)); - demo(50); -} diff --git a/src/archive/mr_bpnn_2.cpp b/src/archive/mr_bpnn_2.cpp @@ -1,63 +0,0 @@ -// -// mr_bpnn_2.cpp -// Jacobian -// -// Created by David Freifeld -// - -#include "bpnn.hpp" -struct pair* map (struct pair input_pair) -{ - char* path = new char[100]; - strcpy(path, (char*)input_pair.key); - strcat(path, "_shuf"); - printf("%s and %s\n", path, (char*)input_pair.key); - int linecount = prep_file((char*)input_pair.key, path); - Network* net = new Network(path, 16, 0.0155, 0.03, 2, 0, 0.9); - for (int i = 0; i < 50; i++) { - net->train(); - } - struct pair* output = new struct pair; - char* key = new char[100]; - strcpy(key, path); - output[0].key = key; - output[0].value = net; - return output; -} - -struct pair* reduce (struct pair* input_pairs) -{ - struct pair* output = new struct pair[6]; - for (int i = 0; input_pairs[i].key != 0x0; i++) { - float* cost = new float; - *cost = ((Network*)input_pairs[i].value)->get_val_cost(); - output[i].key = input_pairs[i].key; - output[i].value = cost; - } - return output; -} - -void translate(char* path) -{ - FILE* rptr = fopen(path, "r"); - FILE* wptr = fopen("./translated", "w"); - char* line = new char[MAXLINE]; - char* newline = new char[MAXLINE]; - while (fgets(line, MAXLINE, rptr) != NULL) { - void* addr1; - void* addr2; - sscanf(line, "%p %p", &addr1, &addr2); - sprintf(newline, "%s %f", (char*)addr1, *(float*)addr2); - int batch_num = strtol((char*)addr1, NULL, 10); - fprintf(wptr, "%s %f\n",(char*)addr1, *(float*)addr2); - } - fclose(rptr); - fclose(wptr); - free(newline); - free(line); -} - -int main() -{ - begin("./data_banknote_authentication.txt", map, reduce, translate, 1, 2, "108.169.4.115", 1); -} diff --git a/src/capsnet.cpp b/src/capsnet.cpp @@ -1,23 +0,0 @@ - -#include "utils.hpp" -#include "cnn.hpp" -#include "bpnn.hpp" - -class Capsule -{ - Capsule* children; - Capsule* parents; -} - -class CapsNet -{ -public: - std::vector<ConvLayer> conv_layers; - std::vector<Capsule> primary_caps; - std::vector<Capsule> class_caps; - CapsNet(char* path); - void add_conv_layer(); - void add_capsule(); - void feedforward(); - void routing(); -}; diff --git a/src/experimental/activations.cpp b/src/experimental/activations.cpp @@ -1,32 +0,0 @@ -#include <Eigen/Dense> -#include <Eigen/MatrixFunctions> - -#include <iostream> - -std::complex<float> lecun_tanh(std::complex<float> x, int) {return (float)1.7159 * tanh(((float)2.0/3) * x);} -//std::complex<float> lecun_tanh_deriv(std::complex<float> x, int) {return 1.14393 * pow(1.0/cosh(2.0/3 * x),2);} - -std::complex<float> mat_sigmoid(std::complex<float> x, int) {return (float)1.0/((float)1+exp(-x));} -float sigmoid(float x) {return 1.0/(1+exp(-x));} - -int main() -{ - int size; - std::cin >> size; - Eigen::MatrixXf m = Eigen::MatrixXf::Random(size,size); - auto mat_start = std::chrono::high_resolution_clock::now(); - m = m.matrixFunction(mat_sigmoid); - auto mat_end = std::chrono::high_resolution_clock::now(); - Eigen::MatrixXf m2 = Eigen::MatrixXf::Random(size,size); - auto start = std::chrono::high_resolution_clock::now(); - for (int j = 0; j < m2.rows(); j++) { - for (int k = 0; k < m2.cols(); k++) { - m2(j,k) = sigmoid(m2(j,k)); - } - } - auto end = std::chrono::high_resolution_clock::now(); - std::cout << "MATRIX: " << std::chrono::duration_cast<std::chrono::nanoseconds>(mat_end - mat_start).count() << " NORMAL: " << std::chrono::duration_cast<std::chrono::nanoseconds>(end - start).count() << "\n"; - -} - - diff --git a/src/experimental/simd.cpp b/src/experimental/simd.cpp @@ -1,48 +0,0 @@ -#include <Eigen/Dense> -#include <ctime> -#include <iostream> -#include <cmath> - -float sigmoid(float x) {return 1.0/(1+exp(-x));} -float sigmoid_deriv(float x) {return 1.0/(1+exp(-x)) * (1 - 1.0/(1+exp(-x)));} - -int main() -{ - int sz; - std::cin >> sz; - Eigen::MatrixXf a = Eigen::MatrixXf::Random(sz, sz); - - auto sigmoid_simd_start = std::chrono::high_resolution_clock::now(); - Eigen::MatrixXf a1 = (1 + (-1 * a.array()).exp()).pow(-1).matrix(); - auto sigmoid_simd_end = std::chrono::high_resolution_clock::now(); - auto sigmoid_start = std::chrono::high_resolution_clock::now(); - Eigen::MatrixXf a2 (a.rows(), a.cols()); - for (int i = 0; i < a.rows(); i++) { - for (int j = 0; j < a.cols(); j++) { - a2(i,j) = sigmoid(a(i,j)); - } - } - auto sigmoid_end = std::chrono::high_resolution_clock::now(); - if (a1.isApprox(a2)) std::cout << "Sigmoid matrices are equal!\n\n"; - - auto sigmoid_deriv_simd_start = std::chrono::high_resolution_clock::now(); - Eigen::MatrixXf ones = Eigen::MatrixXf::Ones(a.rows(), a.cols()); - Eigen::MatrixXf deriv_a1 = (1 + (-1 * a.array()).exp()).pow(-1).matrix().cwiseProduct(ones-(1 + (-1 * a.array()).exp()).pow(-1).matrix()); - auto sigmoid_deriv_simd_end = std::chrono::high_resolution_clock::now(); - auto sigmoid_deriv_start = std::chrono::high_resolution_clock::now(); - Eigen::MatrixXf deriv_a2 (a.rows(), a.cols()); - for (int i = 0; i < a.rows(); i++) { - for (int j = 0; j < a.cols(); j++) { - deriv_a2(i,j) = sigmoid_deriv(a(i,j)); - } - } - auto sigmoid_deriv_end = std::chrono::high_resolution_clock::now(); - if (deriv_a1.isApprox(deriv_a2)) std::cout << "Sigmoid derivative matrices are equal!\n\n"; - - double eigen_time = std::chrono::duration_cast<std::chrono::nanoseconds>(sigmoid_simd_end - sigmoid_simd_start).count(); - double normal_time = std::chrono::duration_cast<std::chrono::nanoseconds>(sigmoid_end - sigmoid_start).count(); - double eigen_deriv_time = std::chrono::duration_cast<std::chrono::nanoseconds>(sigmoid_deriv_simd_end - sigmoid_deriv_simd_start).count(); - double normal_deriv_time = std::chrono::duration_cast<std::chrono::nanoseconds>(sigmoid_deriv_end - sigmoid_deriv_start).count(); - std::cout << "SIGMOID:\n\tEIGEN FUNCTIONS (SOME SIMD): " << eigen_time << "\n\tNORMAL ITERATIVE METHOD: " << normal_time << "\n\tSPEEDUP FACTOR: " << normal_time/eigen_time << "\n"; - std::cout << "SIGMOID DERIVATIVE:\n\tEIGEN FUNCTIONS (SOME SIMD): " << eigen_deriv_time << "\n\tNORMAL ITERATIVE METHOD: " << normal_deriv_time << "\n\tSPEEDUP FACTOR: " << normal_deriv_time/eigen_deriv_time << "\n"; -} diff --git a/src/experimental/simd_simple.cpp b/src/experimental/simd_simple.cpp @@ -1,38 +0,0 @@ -#include <Eigen/Dense> -#include <ctime> -#include <iostream> -#include <cmath> - -float sigmoid(float x) {return 1.0/(1+exp(-x));} -float sigmoid_deriv(float x) {return 1.0/(1+exp(-x)) * (1 - 1.0/(1+exp(-x)));} - -int main() -{ - int sz; - std::cin >> sz; - Eigen::MatrixXf a = Eigen::MatrixXf::Random(1, sz); - Eigen::MatrixXf::Index maxRow, maxCol; - float max = a.maxCoeff(&maxRow, &maxCol); - Eigen::MatrixXf m1 = ((a.array() - max).exp() / ((a.array() - max).exp().sum())).matrix(); - auto softmax_simd_start = std::chrono::high_resolution_clock::now(); - Eigen::MatrixXf a1 = (1 + (-1 * a.array()).exp()).pow(-1).matrix(); - auto softmax_simd_end = std::chrono::high_resolution_clock::now(); - auto softmax_start = std::chrono::high_resolution_clock::now(); - // float sum = 0; - Eigen::MatrixXf::Index maxRow2, maxCol2; - float max2 = a.maxCoeff(&maxRow2, &maxCol2); - Eigen::MatrixXf m2 = (a.array() - max2).matrix(); - // for (int j = 0; j < m2.cols(); j++) { - // sum += exp(m2(0,j)); - // } - float sum = ((a.array() - max2).exp().sum()); - for (int j = 0; j < m2.cols(); j++) { - m2(0,j) = exp(m2(0,j))/sum; - } - auto softmax_end = std::chrono::high_resolution_clock::now(); - if (m1.isApprox(m2)) std::cout << "Softmax matrices are equal!\n\n"; - - double eigen_time = std::chrono::duration_cast<std::chrono::nanoseconds>(softmax_simd_end - softmax_simd_start).count(); - double normal_time = std::chrono::duration_cast<std::chrono::nanoseconds>(softmax_end - softmax_start).count(); - std::cout << "SOFTMAX:\n\tEIGEN FUNCTIONS (SOME SIMD): " << eigen_time << "\n\tNORMAL ITERATIVE METHOD: " << normal_time << "\n\tSPEEDUP FACTOR: " << normal_time/eigen_time << "\n"; -} diff --git a/src/rnn.cpp b/src/rnn.cpp @@ -1,108 +0,0 @@ -#include "bpnn.hpp" -#include "utils.hpp" - -class RecurrentLayer : public Layer { -public: - Eigen::MatrixXf* s; - Eigen::MatrixXf* rec_weights; - void init_weights(RecurrentLayer next); - RecurrentLayer(int rows, int columns, float a=0); -}; - -RecurrentLayer::RecurrentLayer(int rows, int columns, float a) - :Layer(rows, columns, a) -{ - s = new Eigen::MatrixXf(contents->rows(), contents->cols()); - rec_weights = new Eigen::MatrixXf(contents->cols(), contents->cols()); - int n = contents->cols() * 2; - std::normal_distribution<float> d(0,sqrt(1.0/n)); - for (int i = 0; i < (rec_weights->cols()*rec_weights->cols()); i++) { - std::random_device rd; - std::mt19937 gen(rd()); - (*rec_weights)(static_cast<int>(i / columns), i%columns) = d(gen); - } - for (int i = 0; i < rows*columns; i++) { - (*s)(static_cast<int>(i / columns),i%columns) = 0; - } -} - -void RecurrentLayer::init_weights(RecurrentLayer next) -{ - v = new Eigen::MatrixXf (contents->cols(), next.contents->cols()); - m = new Eigen::MatrixXf (contents->cols(), next.contents->cols()); - weights = new Eigen::MatrixXf (contents->cols(), next.contents->cols()); - int nodes = weights->cols(); - int n = contents->cols() + next.contents->cols(); - std::normal_distribution<float> d(0,sqrt(1.0/n)); - for (int i = 0; i < (weights->rows()*weights->cols()); i++) { - std::random_device rd; - std::mt19937 gen(rd()); - (*weights)(static_cast<int>(i / weights->cols()), i%weights->cols()) = d(gen); - (*v)(static_cast<int>(i / weights->cols()), i%weights->cols()) = 0; - (*m)(static_cast<int>(i / weights->cols()), i%weights->cols()) = 0; - } -} - -class RNN : public Network { -public: - std::vector<RecurrentLayer> layers; - int length = 0; - void add_layer(int nodes, char* name, std::function<float(float)> activation, std::function<float(float)> activation_deriv); - void initialize(); - void feedforward(); - void backpropagate(); - RNN(char* path, int batch_sz, float learn_rate, float bias_rate, Regularization regularization, float l, float ratio, bool early_exit=true, float cutoff=0); - -}; - -RNN::RNN(char* path, int batch_sz, float learn_rate, float bias_rate, Regularization regularization, float l, float ratio, bool early_exit, float cutoff) - :Network(path, batch_sz, learn_rate, bias_rate, regularization, l, ratio, early_exit, cutoff) -{} - -void RNN::add_layer(int nodes, char* name, std::function<float(float)> activation, std::function<float(float)> activation_deriv) -{ - length++; - layers.emplace_back(batch_size, nodes); - strcpy(layers[length-1].activation_str, name); - layers[length-1].activation = activation; - layers[length-1].activation_deriv = activation_deriv; -} - -void RNN::initialize() -{ - labels = new Eigen::MatrixXf (batch_size,layers[length-1].contents->cols()); - for (int i = 0; i < length-1; i++) layers[i].init_weights(layers[i+1]); -} - -void RNN::feedforward() -{ - for (int i = 0; i < length-1; i++) { - *layers[i].contents = ((*layers[i].s) * (*layers[i].rec_weights)); - for (int j = 0; j < layers[i].contents->rows(); j++) { - if (strcmp(layers[i].activation_str, "linear") == 0) break; - for (int k = 0; k < layers[i].contents->cols(); k++) { - (*layers[i].dZ)(j,k) = layers[i].activation_deriv((*layers[i].contents)(j,k)); - (*layers[i].contents)(j,k) = layers[i].activation((*layers[i].contents)(j,k)); - } - } - *layers[i+1].contents = ((*layers[i].contents) * (*layers[i].weights)); - *layers[i+1].contents += *layers[i+1].bias; - } - for (int j = 0; j < layers[length-1].contents->rows(); j++) { - if (strcmp(layers[length-1].activation_str, "linear") == 0) break; - for (int k = 0; k < layers[length-1].contents->cols(); k++) { - (*layers[length-1].dZ)(j,k) = layers[length-1].activation_deriv((*layers[length-1].contents)(j,k)); - (*layers[length-1].contents)(j,k) = layers[length-1].activation((*layers[length-1].contents)(j,k)); - } - } -} - -int main() -{ - RNN rnn ("../data_banknote_authentication.txt", 10, 0.0155, 0.03, L2, 0, 0.9); - rnn.add_layer(4, "linear", linear, linear_deriv); - rnn.add_layer(5, "lecun_tanh", lecun_tanh, lecun_tanh_deriv); - rnn.add_layer(2, "linear", linear, linear_deriv); - rnn.initialize(); - rnn.feedforward(); -}