commit 4ef04e671adbedba987f6cea30e3a7f4f1d66e98
parent bec1678d6f27c9c4e89610fe91b9ffb363c837a1
Author: David Freifeld <freifeld.david@gmail.com>
Date: Tue, 30 Jun 2020 20:11:01 -0700
Added constructors + funcs for adding layers
Diffstat:
| M | cnn.cpp | | | 58 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- |
1 file changed, 56 insertions(+), 2 deletions(-)
diff --git a/cnn.cpp b/cnn.cpp
@@ -8,12 +8,29 @@ class ConvLayer
Eigen::MatrixXd* input;
Eigen::MatrixXd* kernel;
Eigen::MatrixXd* output;
+ int stride_len;
public:
- ConvLayer(int stride)
+ ConvLayer(int x, int y, int stride, int kernel_size);
void convolute();
};
+ConvLayer::ConvLayer(int x, int y, int stride, int kern_size)
+{
+ input = new Eigen::MatrixXd (x, y);
+ for (int i = 0; i < x*y; i++) {
+ (*input)((int)i / y,i%y) = 0;
+ }
+ kernel = new Eigen::MatrixXd (kern_size, kern_size);
+ for (int i = 0; i < kern_size*kern_size; i++) {
+ (*input)((int)i / kern_size,i%kern_size) = 0;
+ }
+ output = new Eigen::MatrixXd (kern_size, kern_size); // We're using valid padding for now.
+ for (int i = 0; i < kern_size*kern_size; i++) {
+ (*input)((int)i / kern_size,i%kern_size) = 0;
+ }
+};
+
void ConvLayer::convolute()
{
for (int i = 0; i < input->cols() - kernel->cols() + 1; i+=stride_len) {
@@ -28,9 +45,28 @@ class PoolingLayer
Eigen::MatrixXd* input;
Eigen::MatrixXd* kernel;
Eigen::MatrixXd* output;
-
+ int stride_len;
+
public:
void pool();
+ PoolingLayer(int x, int y, int stride, int kern_size);
+};
+
+// Will eventually be different from ConvLayer
+PoolingLayer::PoolingLayer(int x, int y, int stride, int kern_size)
+{
+ input = new Eigen::MatrixXd (x, y);
+ for (int i = 0; i < x*y; i++) {
+ (*input)((int)i / y,i%y) = 0;
+ }
+ kernel = new Eigen::MatrixXd (kern_size, kern_size);
+ for (int i = 0; i < kern_size*kern_size; i++) {
+ (*input)((int)i / kern_size,i%kern_size) = 0;
+ }
+ output = new Eigen::MatrixXd (kern_size, kern_size);
+ for (int i = 0; i < kern_size*kern_size; i++) {
+ (*input)((int)i / kern_size,i%kern_size) = 0;
+ }
};
void PoolingLayer::pool()
@@ -62,6 +98,7 @@ public:
void process(); // Runs the convolutional and pooling layers.
void next_batch();
void add_conv_layer();
+ void add_pool_layer();
};
ConvNet::ConvNet(char* path, int batch_sz, float learn_rate, float bias_rate)
@@ -75,3 +112,20 @@ ConvNet::ConvNet(char* path, int batch_sz, float learn_rate, float bias_rate)
data = fopen("./shuffled.txt", "r");
batches = 0;
}
+
+void add_conv_layer(int x, int y, int stride, int kern_size)
+{
+ preprocess_length++;
+ conv_layers.empace_back(x,y,stride,kern_size);
+}
+
+void add_pool_layer(int x, int y, int stride, int kern_size)
+{
+ preprocess_length++;
+ pool_layers.empace_back(x,y,stride,kern_size);
+}
+
+void process()
+{
+
+}