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:
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();
-}