Skip to content

Commit

Permalink
GRU
Browse files Browse the repository at this point in the history
  • Loading branch information
pchavanne committed Feb 14, 2017
1 parent 802352e commit 22e8922
Show file tree
Hide file tree
Showing 7 changed files with 28 additions and 42 deletions.
2 changes: 1 addition & 1 deletion examples/mnist_examples.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ def train(network_name, data):

# We can test it on some examples from test
test_set_x = data.test_set_x.get_value()
test_set_y = data.test_set_y.eval()
test_set_y = data.test_set_y.get_value()

predicted_values = [np.argmax(prediction) for prediction in model.predict(test_set_x[:30])]
true_values = [np.argmax(true_value) for true_value in test_set_y[:30]]
Expand Down
2 changes: 1 addition & 1 deletion examples/model_template.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@
# make prediction
# We can test it on some examples from test
test_set_x = data.test_set_x.get_value()
test_set_y = data.test_set_y.eval()
test_set_y = data.test_set_y.get_value()

predicted_values = [np.argmax(prediction) for prediction in model.predict(test_set_x[:30])]
true_values = [np.argmax(true_value) for true_value in test_set_y[:30]]
Expand Down
2 changes: 1 addition & 1 deletion examples/save_and_load_example.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@
# Make prediction
# We can test it on some examples from test
test_set_x = data.test_set_x.get_value()
test_set_y = data.test_set_y.eval()
test_set_y = data.test_set_y.get_value()

predicted_values = [np.argmax(prediction) for prediction in model.predict(test_set_x[:30])]
true_values = [np.argmax(true_value) for true_value in test_set_y[:30]]
Expand Down
43 changes: 13 additions & 30 deletions tests/test_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,21 +8,11 @@
class TestModel:
@pytest.fixture(scope='module')
def data(self):
from yadll.data import Data
from yadll.data import mnist_loader
# data = [[np.random.random((100, 25)).astype('float32'), np.random.random_integers(low=0, high=9, size=(100,)).astype('float32')],
# [np.random.random((50, 25)).astype('float32'), np.random.random_integers(low=0, high=9, size=(50,)).astype('float32')],
# [np.random.random((50, 25)).astype('float32'), np.random.random_integers(low=0, high=9, size=(50,)).astype('float32')]]
return Data(mnist_loader()) #, cast_y=True)

@pytest.fixture(scope='module')
def data_y_2D(self):
from yadll.data import Data
from yadll.data import mnist_loader
# data = [[np.random.random((100, 25)).astype('float32'), one_hot_encoding(np.random.random_integers(low=0, high=9, size=(100, ))).astype('float32')],
# [np.random.random((50, 25)).astype('float32'), one_hot_encoding(np.random.random_integers(low=0, high=9, size=(50, ))).astype('float32')],
# [np.random.random((50, 25)).astype('float32'), one_hot_encoding(np.random.random_integers(low=0, high=9, size=(50, ))).astype('float32')]]
return Data(mnist_loader())
from yadll.data import Data, one_hot_encoding
data = [[np.random.random((100, 25)).astype('float32'), one_hot_encoding(np.random.random_integers(low=0, high=9, size=(100, ))).astype('float32')],
[np.random.random((50, 25)).astype('float32'), one_hot_encoding(np.random.random_integers(low=0, high=9, size=(50, ))).astype('float32')],
[np.random.random((50, 25)).astype('float32'), one_hot_encoding(np.random.random_integers(low=0, high=9, size=(50, ))).astype('float32')]]
return Data(data)

@pytest.fixture(scope='module')
def hp(self):
Expand All @@ -49,15 +39,10 @@ def model_no_data(self, hp):
from yadll.model import Model
return Model(name='test_model', hyperparameters=hp)

@pytest.fixture(scope='module')
def model_y_2D(self, data_y_2D, hp):
from yadll.model import Model
return Model(name='test_model', data=data_y_2D, hyperparameters=hp)

@pytest.fixture(scope='module')
def input(self):
from yadll.layers import InputLayer
return InputLayer(input_shape=(None, 784))
return InputLayer(input_shape=(None, 25))

@pytest.fixture(scope='module')
def layer(self, input):
Expand Down Expand Up @@ -133,22 +118,20 @@ def test_save_model(self, model, network, caplog):
model_from_conf_file = Model()
model_from_conf_file.from_conf(file='test_conf.yc')

def test_model(self, model, model_y_2D, network, network_unsupervised):
def test_model(self, model, network, network_unsupervised):
model.network = network
assert model.name == 'test_model'
model.train()
network_unsupervised.layers[0].input = None
model.network = network_unsupervised
model.pretrain()
model.train()
model_y_2D.network = network
#model_y_2D.train()
#
# def test_predict(self, data, model, network):
# model.network = network
# model.train()
# model.network.layers[0].input = None
# model.predict(data.test_set_x.eval()[:10])

def test_predict(self, data, model, network):
model.network = network
model.train()
model.network.layers[0].input = None
model.predict(data.test_set_x.eval()[:10])



Expand Down
4 changes: 3 additions & 1 deletion yadll/data.py
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,7 @@ class Data(object):
"""
def __init__(self, data, shared=True, borrow=True, cast_y=False):
self.data = data
#TODO: Check data input
if len(data) == 3:
train_set, valid_set, test_set = data
Expand Down Expand Up @@ -167,4 +168,5 @@ def dataset(self):
(self.valid_set_x, self.valid_set_y),
(self.test_set_x, self.test_set_y)]


def shape(self):
return [(data[0].shape, data[1].shape) for data in self.data]
15 changes: 8 additions & 7 deletions yadll/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,8 @@ def __init__(self, network=None, data=None, hyperparameters=None, name='model',
self.save_mode = None # None, 'end' or 'each'
self.index = T.iscalar() # index to a [mini]batch
self.epoch_index = T.ivector() # index per epoch
self.x = None # T.tensor3(name='x') # the input data is presented as a matrix
self.x = T.matrix(name='x') # the input data is presented as a matrix
self.y = T.matrix(name='y')
self.report = dict()

@timer(' Unsupervised Pre-Training')
Expand Down Expand Up @@ -140,15 +141,15 @@ def train(self, unsupervised_training=True, save_mode=None, shuffle=True):
if self.data is None:
raise NoDataFoundException
# else:
# y_tensor_type = theano.tensor.TensorType(dtype=floatX, broadcastable=(False,)*self.data.train_set_y.ndim)
# #y_tensor_type = theano.tensor.TensorType(dtype=floatX, broadcastable=(False,)*self.data.train_set_y.ndim)
# if self.data.train_set_y.ndim == 1:
# self.y = T.ivector('y') # the output labels are presented as 1D vector of[int] labels
# else:
# self.y = T.matrix('y')
y_tensor_type = theano.tensor.TensorType(dtype=floatX, broadcastable=(False,)*self.data.train_set_y.ndim)
self.y = y_tensor_type('y')
x_tensor_type = theano.tensor.TensorType(dtype=floatX, broadcastable=(False,)*self.data.train_set_x.ndim)
self.x = x_tensor_type('x')
# y_tensor_type = theano.tensor.TensorType(dtype=floatX, broadcastable=(False,)*self.data.train_set_y.ndim)
# self.y = y_tensor_type('y')
# x_tensor_type = theano.tensor.TensorType(dtype=floatX, broadcastable=(False,)*self.data.train_set_x.ndim)
# self.x = x_tensor_type('x')

if self.network is None:
raise NoNetworkFoundException
Expand Down Expand Up @@ -211,7 +212,7 @@ def train(self, unsupervised_training=True, save_mode=None, shuffle=True):
################################################
# Compiling functions for training, validating and testing the model
logger.info('... Compiling the model')
train_model = theano.function(inputs=[self.index, self.epoch_index], outputs=cost, updates=updates, name='train', # mode='DebugMode',
train_model = theano.function(inputs=[self.index, self.epoch_index], outputs=cost, updates=updates, name='train', # on_unused_input='ignore', # mode='DebugMode',
givens={self.x: self.data.train_set_x[self.epoch_index[self.index * self.hp.batch_size: (self.index + 1) * self.hp.batch_size]],
self.y: self.data.train_set_y[self.epoch_index[self.index * self.hp.batch_size: (self.index + 1) * self.hp.batch_size]]})

Expand Down
2 changes: 1 addition & 1 deletion yadll/network.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# -*- coding: UTF-8 -*-
from collections import OrderedDict
import cPickle

import yadll
from .layers import *

import logging
Expand Down

0 comments on commit 22e8922

Please sign in to comment.