This is Convolutional Neural Network only in python & numpy. It is simple and slow but will get the job done 👍
Weight Initialization : HE Normal
Weight Update Policy : ADAM, NAG, Momentum, Vanila
Active Function : ReLU, Sigmoid
Regulization : Droupout(only on fc), L2
Pooling : Max, Average
Loss Function : Softmax, Logistic
numpy (+ mkl for intel processors. recommend anaconda)
Used sklearn for LabelEncoder & utils.shuffle on examples.
AND gate and CIFAR-10 examples are included.
lr = 1e-4
l2_reg = 8e-6
cnn = NeuralNetwork(train_images.shape[1:],
[
{'type': 'conv', 'k': 16, 'u_type': 'nag', 'f': 5, 's': 1, 'p': 2},
{'type': 'pool', 'method': 'average'},
{'type': 'conv', 'k': 20, 'u_type': 'nag', 'f': 5, 's': 1, 'p': 2},
{'type': 'pool', 'method': 'average'},
{'type': 'conv', 'k': 20, 'u_type': 'nag', 'f': 5, 's': 1, 'p': 2},
{'type': 'pool', 'method': 'average'},
{'type': 'output', 'k': len(le.classes_), 'u_type': 'adam'}
]
, lr, l2_reg=l2_reg)CIFAR-10 example gets ~72% test accuracy in 20 epoch.
classes.NeuralNetwork(self, input_shape, layer_list, lr, l2_reg=0, loss='softmax'):| Parameter | Description |
|---|---|
| input_shape | Data's numpy shape. |
| layer_list | List of layers you want to be networked. All of properties goes to **kwargs. |
| lr | Learning rate. |
| l2_reg | L2 regularization |
| loss | Loss function. 'softmax', 'logistic' |
# type fc, output
classes.NeuralLayer(input_size, k, f=3, s=1, p=1, u_type='adam', a_type='relu', dropout=1)
# type pool
classes.PoolLayer(input_size, f=2, s=2, method='max', dropout=1):
# type conv
classes.ConvLayer(input_size, k, f=3, s=1, p=1, u_type='adam', a_type='relu', dropout=1)| Update Policy | u_type |
|---|---|
| ADAM | 'adam' |
| Momentum | 'm' |
| Vanilla | 'v' |
| NAG | 'nag' |
| RMSProp | 'rmsprop' |
| Activation Function | a_type |
|---|---|
| ReLU | 'relu' |
| Sigmoid | 'sigmoid' |
| Pooling | method |
|---|---|
| Max | 'max' |
| Avverage | 'average' |
MIT