示例#1
0
 def test_forward_backward(self):
     l = ReluLayer()
     y = l.forward(np.array([5, 5]))
     self.assertEqual(y.shape, (2, ))
     assert_almost_equal(y, np.array([5, 5]))
     x = np.random.rand(2)
     d = l.backward(x)
     self.assertEqual(d.shape, (2, ))
     assert_almost_equal(d, np.array(x), decimal=5)
     return
示例#2
0
class cnn(object):
    class simple_cnn_model(object):
        def __init__(self, epochs, batch_size, lr):
            self.epochs = epochs
            self.batch_size = batch_size
            self.lr = lr

        def load_data(self):
            # load data from cifar100 folder
            (x_train, y_train), (x_test, y_test) = cifar100(1211506319)
            return x_train, y_train, x_test, y_test

        def train_model(self, layers, loss_metrics, x_train, y_train):
            # build model
            self.model = Sequential(layers, loss_metrics)
            # train the model
            loss = self.model.fit(x_train,
                                  y_train,
                                  self.epochs,
                                  self.lr,
                                  self.batch_size,
                                  print_output=True)
            avg_loss = np.mean(np.reshape(loss, (self.epochs, -1)), axis=1)
            return avg_loss

        def test_model(self, x_test, y_test):
            # make a prediction
            pred_result = self.model.predict(x_test)
            accuracy = np.mean(pred_result == y_test)
            return accuracy

    if __name__ == '__main__':
        # define model parameters
        epochs = 15
        batch_size = 128
        lr = [.1]

        # define layers
        layers = (ConvLayer(3, 16, 3), ReluLayer(), MaxPoolLayer(),
                  ConvLayer(16, 32, 3), ReluLayer(), MaxPoolLayer(),
                  FlattenLayer(), FullLayer(2048, 4), SoftMaxLayer())

        loss_matrics = CrossEntropyLayer()

        # build and train model
        model = simple_cnn_model(epochs, batch_size, lr)
        x_train, y_train, x_test, y_test = model.load_data()
        loss = model.train_model(layers, loss_matrics, x_train, y_train)
        accuracy = model.test_model(x_test, y_test)
        print("loss: %s" % loss)
        print("The accuracy of the model is %s" % accuracy)
示例#3
0
 def test_numeric_gradient(self):
     l = ReluLayer()
     x = np.random.rand(2)
     gradient = l.numeric_gradient(x)
     l.forward(x)
     delta = l.backward([1, 1])
     assert_almost_equal(np.diag(gradient), delta, decimal=5)
import numpy as np
import matplotlib.pyplot as plt

from layers import (FullLayer, ReluLayer, SoftMaxLayer, CrossEntropyLayer)
from layers.sequential import Sequential
from layers.dataset import cifar100
(x_train, y_train), (x_test, y_test) = cifar100(1213268041)

test_accuracy=[]
epochs=20
lr=[0.1, 0.01, 0.2]
for i in lr:
    model = Sequential(layers=(FullLayer(32 * 32 * 3, 2500),
                               ReluLayer(),
                               FullLayer(2500, 2000),
                               ReluLayer(),
                               FullLayer(2000, 1500),
                               ReluLayer(),
                               FullLayer(1500, 1000),
                               ReluLayer(),
                               FullLayer(1000, 500),
                               ReluLayer(),
                               FullLayer(500, 4),
                               SoftMaxLayer()),
                       loss=CrossEntropyLayer())
    finalloss = model.fit(x_train, y_train,epochs=20, lr=i)
    y_pred = model.predict(x_test)
    accuracy=(np.mean(y_test == y_pred))
    print('Accuracy: %.2f' % accuracy)
    np.append(test_accuracy, accuracy)
    plt.plot(range(epochs), finalloss, label=('Learning rate=',i))
示例#5
0
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
Created on Sun Mar 25 19:52:43 2018

@author: kaushik
"""
import time
import numpy as np
import matplotlib.pyplot as plt
from layers.dataset import cifar100
from layers import (ConvLayer, FullLayer, FlattenLayer, MaxPoolLayer,
                    ReluLayer, SoftMaxLayer, CrossEntropyLayer, Sequential)

(x_train, y_train), (x_test, y_test) = cifar100(1337)
model = Sequential(layers=(ConvLayer(3, 16, 3), ReluLayer(), MaxPoolLayer(),
                           ConvLayer(16, 32, 3), ReluLayer(), MaxPoolLayer(),
                           FlattenLayer(), FullLayer(8 * 8 * 32,
                                                     4), SoftMaxLayer()),
                   loss=CrossEntropyLayer())
start_time = time.clock()
lr_vals = [0.1]
losses_train = list()
losses_test = list()
test_acc = np.zeros(len(lr_vals))
for j in range(len(lr_vals)):
    train_loss, test_loss = model.fit(x_train,
                                      y_train,
                                      x_test,
                                      y_test,
                                      epochs=8,
示例#6
0
import numpy as np
from layers.dataset import cifar100

# Please make sure that cifar-100-python is present in the same folder as dataset.py

(x_train, y_train), (x_test, y_test) = cifar100(1212356299)

from layers import (FullLayer, ReluLayer, SoftMaxLayer, CrossEntropyLayer,
                    Sequential_better)

model = Sequential_better(layers=(FullLayer(3072, 1500), ReluLayer(),
                                  FullLayer(1500, 500), ReluLayer(),
                                  FullLayer(500, 4), SoftMaxLayer()),
                          loss=CrossEntropyLayer())

loss2 = model.fit(x_train, y_train, lr=0.1, epochs=15)
y_predict = model.predict(x_test)

count = 0
for i in range(np.size(y_test)):
    if y_predict[i] == y_test[i]:
        count += 1

accuracy = (100.0 * count) / np.shape(y_predict)[0]

print "Accuracy of better CIFAR = ", accuracy, "%"
示例#7
0
import numpy as np
from layers.dataset import cifar100
import matplotlib.pyplot as plt

# Please make sure that cifar-100-python is present in the same folder as dataset.py

(x_train, y_train), (x_test, y_test) = cifar100(1212356299)

from layers import (FullLayer, ReluLayer, SoftMaxLayer, CrossEntropyLayer,
                    Sequential)

model = Sequential(layers=(FullLayer(3072,
                                     500), ReluLayer(), FullLayer(500, 4),
                           SoftMaxLayer()),
                   loss=CrossEntropyLayer())

lr_accuracies = np.zeros((3, ))

loss1 = model.fit(x_train, y_train, lr=0.01, epochs=15)
y_predict = model.predict(x_test)

count = 0
for i in range(np.size(y_test)):
    if y_predict[i] == y_test[i]:
        count += 1

lr_accuracies[0] = (100.0 * count) / np.shape(y_predict)[0]

loss2 = model.fit(x_train, y_train, lr=0.1, epochs=15)

y_predict = model.predict(x_test)