Skip to content

Instantly share code, notes, and snippets.

@arngarden
Created July 26, 2013 10:13

Revisions

  1. arngarden created this gist Jul 26, 2013.
    53 changes: 53 additions & 0 deletions gistfile1.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,53 @@
    import theano
    from pylearn2.models import mlp
    from pylearn2.training_algorithms import sgd
    from pylearn2.termination_criteria import EpochCounter
    from pylearn2.datasets.dense_design_matrix import DenseDesignMatrix
    import numpy as np
    from random import randint


    class XOR(DenseDesignMatrix):
    def __init__(self):
    self.class_names = ['0', '1']
    X = [[randint(0, 1), randint(0, 1)] for _ in range(1000)]
    y = []
    for a, b in X:
    if a + b == 1:
    y.append([0, 1])
    else:
    y.append([1, 0])
    X = np.array(X)
    y = np.array(y)
    super(XOR, self).__init__(X=X, y=y)


    # create XOR dataset
    ds = XOR()
    # create hidden layer with 2 nodes, init weights in range -0.1 to 0.1 and add
    # a bias with value 1
    hidden_layer = mlp.Sigmoid(layer_name='hidden', dim=2, irange=.1, init_bias=1.)
    # create Softmax output layer
    output_layer = mlp.Softmax(2, 'output', irange=.1)
    # create Stochastic Gradient Descent trainer that runs for 400 epochs
    trainer = sgd.SGD(learning_rate=.05, batch_size=10, termination_criterion=EpochCounter(400))
    layers = [hidden_layer, output_layer]
    # create neural net that takes two inputs
    ann = mlp.MLP(layers, nvis=2)
    trainer.setup(ann, ds)
    # train neural net until the termination criterion is true
    while True:
    trainer.train(dataset=ds)
    ann.monitor.report_epoch()
    ann.monitor()
    if not trainer.continue_learning(ann):
    break

    inputs = np.array([[0, 0]])
    print ann.fprop(theano.shared(inputs, name='inputs')).eval()
    inputs = np.array([[0, 1]])
    print ann.fprop(theano.shared(inputs, name='inputs')).eval()
    inputs = np.array([[1, 0]])
    print ann.fprop(theano.shared(inputs, name='inputs')).eval()
    inputs = np.array([[1, 1]])
    print ann.fprop(theano.shared(inputs, name='inputs')).eval()