Skip to content

Instantly share code, notes, and snippets.

View omaraflak's full-sized avatar
👨‍💻
ha!

Omar Aflak omaraflak

👨‍💻
ha!
View GitHub Profile
@omaraflak
omaraflak / main.c
Last active September 11, 2017 18:45
Minesweeper in C for Unix systems
#include <stdio.h>
#include <stdlib.h>
#include <termios.h>
#include <time.h>
#include <stdbool.h>
const char BOMB = 'X';
const char EMPTY = 'E';
const char DISCOVERED = '0';
const char FLAG = 'F';
@omaraflak
omaraflak / index.py
Created February 19, 2018 23:29
Simple XOR with Keras
from keras.models import Sequential
from keras.layers.core import Dense
from keras.optimizers import SGD
import numpy as np
def main():
X = np.array([[0,0],[0,1],[1,0],[1,1]])
Y = np.array([[0],[1],[1],[0]])
@omaraflak
omaraflak / Matrix.h
Last active March 5, 2018 21:42
Neural Network from Scratch — Part 2: Practice - Matrix.h
#ifndef DEF_MATRIX
#define DEF_MATRIX
#include <vector>
#include <iostream>
/**
Every method ends with "const" keyword which means that the object on which the method is called is never modified.
Instead it will return a new Matrix.
@omaraflak
omaraflak / Matrix.cpp
Created March 5, 2018 21:29
Neural Network from Scratch — Part 2: Practice - Matrix.cpp
#include "Matrix.h"
#include <assert.h>
#include <sstream>
Matrix::Matrix(){}
Matrix::Matrix(int height, int width)
{
this->height = height;
this->width = width;
@omaraflak
omaraflak / main.cpp
Created March 5, 2018 21:44
Neural Network from Scratch — Part 2: Practice - main.cpp
#include <iostream>
#include <fstream>
void loadTraining(const char *filename, vector<vector<double> > &input, vector<vector<double> > &output)
{
int trainingSize = 946;
input.resize(trainingSize);
output.resize(trainingSize);
ifstream file(filename);
@omaraflak
omaraflak / main.cpp
Created March 5, 2018 21:51
Neural Network from Scratch — Part 2: Practice - main.cpp
#include "Matrix.h"
Matrix X, W1, H, W2, Y, B1, B2, Y2, dJdB1, dJdB2, dJdW1, dJdW2;
double learningRate;
@omaraflak
omaraflak / main.cpp
Created March 5, 2018 21:54
Neural Network from Scratch — Part 2: Practice - main.cpp
void init(int inputNeuron, int hiddenNeuron, int outputNeuron, double rate)
{
learningRate = rate;
W1 = Matrix(inputNeuron, hiddenNeuron);
W2 = Matrix(hiddenNeuron, outputNeuron);
B1 = Matrix(1, hiddenNeuron);
B2 = Matrix(1, outputNeuron);
W1 = W1.applyFunction(random);
@omaraflak
omaraflak / main.cpp
Created March 5, 2018 21:58
Neural Network from Scratch — Part 2: Practice - main.cpp
#include <stdlib.h>
#include <time.h>
double random(double x)
{
return (double)(rand() % 10000 + 1)/10000-0.5;
}
@omaraflak
omaraflak / main.cpp
Created March 5, 2018 22:05
Neural Network from Scratch — Part 2: Practice - main.cpp
Matrix computeOutput(vector<double> input)
{
X = Matrix({input}); // row matrix
H = X.dot(W1).add(B1).applyFunction(sigmoid);
Y = H.dot(W2).add(B2).applyFunction(sigmoid);
return Y;
}
@omaraflak
omaraflak / main.cpp
Created March 5, 2018 22:07
Neural Network from Scratch — Part 2: Practice - main.cpp
#include <cmath>
double sigmoid(double x)
{
return 1/(1+exp(-x));
}