In [1]:
from __future__ import print_function

import sys
import os
import time
import string

import numpy as np
import theano
import theano.tensor as T

import os; import sys; sys.path.append('..')
import gp

import gp.nets as nets
import gp.nets.BatchNormLayer as BatchNormLayer

import lasagne

sys.setrecursionlimit(10000)


Using gpu device 0: GeForce GTX TITAN (CNMeM is disabled, CuDNN 4007)
/home/d/nolearn/local/lib/python2.7/site-packages/theano/tensor/signal/downsample.py:6: UserWarning: downsample module has been moved to the theano.tensor.signal.pool module.
  "downsample module has been moved to the theano.tensor.signal.pool module.")

In [2]:
%load_ext autoreload
%autoreload 2

In [2]:
# helper function for projection_b
def ceildiv(a, b):
    return -(-a // b)

def build_cnn(input_var=None, n=1, num_filters=8, cudnn='no'):
    import lasagne # For some odd reason it can't read the global import, please PR/Issue if you know why
    projection_type = 'B'
    # Setting up layers
    if cudnn == 'yes':
        import lasagne.layers.dnn
        conv = lasagne.layers.dnn.Conv2DDNNLayer # cuDNN
    else:
        conv = lasagne.layers.Conv2DLayer
    dropout = lasagne.layers.DropoutLayer
    nonlin = lasagne.nonlinearities.rectify
    nonlin_layer = lasagne.layers.NonlinearityLayer
    sumlayer = lasagne.layers.ElemwiseSumLayer
    #batchnorm = BatchNormLayer.BatchNormLayer
    batchnorm = lasagne.layers.BatchNormLayer

    # Setting the projection type for when reducing height/width
    # and increasing dimensions.
    # Default is 'B' as B performs slightly better
    # and A requires newer version of lasagne with ExpressionLayer
    projection_type = 'B'
    if projection_type == 'A':
        expression = lasagne.layers.ExpressionLayer
        pad = lasagne.layers.PadLayer

    if projection_type == 'A':
        # option A for projection as described in paper
        # (should perform slightly worse than B)
        def projection(l_inp):
            n_filters = l_inp.output_shape[1]*2
            l = expression(l_inp, lambda X: X[:, :, ::2, ::2], lambda s: (s[0], s[1], ceildiv(s[2], 2), ceildiv(s[3], 2)))
            l = pad(l, [n_filters//4,0,0], batch_ndim=1)
            return l

    if projection_type == 'B':
        # option B for projection as described in paper
        def projection(l_inp):
            # twice normal channels when projecting!
            n_filters = l_inp.output_shape[1]*2 
            l = conv(l_inp, num_filters=n_filters, filter_size=(1, 1),
                     stride=(2, 2), nonlinearity=None, pad='same', b=None)
            l = batchnorm(l)
            return l

    # helper function to handle filters/strides when increasing dims
    def filters_increase_dims(l, increase_dims):
        in_num_filters = l.output_shape[1]
        if increase_dims:
            first_stride = (2, 2)
            out_num_filters = in_num_filters*2
        else:
            first_stride = (1, 1)
            out_num_filters = in_num_filters
 
        return out_num_filters, first_stride

    # block as described and used in cifar in the original paper:
    # http://arxiv.org/abs/1512.03385
    def res_block_v1(l_inp, nonlinearity=nonlin, increase_dim=False):
        # first figure filters/strides
        n_filters, first_stride = filters_increase_dims(l_inp, increase_dim)
        # conv -> BN -> nonlin -> conv -> BN -> sum -> nonlin
        l = conv(l_inp, num_filters=n_filters, filter_size=(3, 3),
                 stride=first_stride, nonlinearity=None, pad='same',
                 W=lasagne.init.HeNormal(gain='relu'))
        l = batchnorm(l)

        l = nonlin_layer(l, nonlinearity=nonlin)
        l = dropout(l, p=.2)
        print('adding dropout')        
        
        l = conv(l, num_filters=n_filters, filter_size=(3, 3),
                 stride=(1, 1), nonlinearity=None, pad='same',
                 W=lasagne.init.HeNormal(gain='relu'))
        l = batchnorm(l)
        if increase_dim:
            # Use projection (A, B) as described in paper
            p = projection(l_inp)
        else:
            # Identity shortcut
            p = l_inp
        l = sumlayer([l, p])
        l = nonlin_layer(l, nonlinearity=nonlin)
        return l

    # block as described in second paper on the subject (by same authors):
    # http://arxiv.org/abs/1603.05027
    def res_block_v2(l_inp, nonlinearity=nonlin, increase_dim=False):
        # first figure filters/strides
        n_filters, first_stride = filters_increase_dims(l_inp, increase_dim)
        # BN -> nonlin -> conv -> BN -> nonlin -> conv -> sum
        l = batchnorm(l_inp)
        l = nonlin_layer(l, nonlinearity=nonlin)
        l = conv(l, num_filters=n_filters, filter_size=(3, 3),
                 stride=first_stride, nonlinearity=None, pad='same',
                 W=lasagne.init.HeNormal(gain='relu'))
        l = batchnorm(l)
        l = nonlin_layer(l, nonlinearity=nonlin)
        l = conv(l, num_filters=n_filters, filter_size=(3, 3),
                 stride=(1, 1), nonlinearity=None, pad='same',
                 W=lasagne.init.HeNormal(gain='relu'))
        if increase_dim:
            # Use projection (A, B) as described in paper
            p = projection(l_inp)
        else:
            # Identity shortcut
            p = l_inp
        l = sumlayer([l, p])
        return l

    def bottleneck_block(l_inp, nonlinearity=nonlin, increase_dim=False):
        # first figure filters/strides
        n_filters, first_stride = filters_increase_dims(l_inp, increase_dim)
        # conv -> BN -> nonlin -> conv -> BN -> nonlin -> conv -> BN -> sum
        # -> nonlin
        # first make the bottleneck, scale the filters ..!
        scale = 4 # as per bottleneck architecture used in paper
        scaled_filters = n_filters/scale
        l = conv(l_inp, num_filters=scaled_filters, filter_size=(1, 1),
                 stride=first_stride, nonlinearity=None, pad='same',
                 W=lasagne.init.HeNormal(gain='relu'))
        l = batchnorm(l)
        l = nonlin_layer(l, nonlinearity=nonlin)
        l = conv(l, num_filters=scaled_filters, filter_size=(3, 3),
                 stride=(1, 1), nonlinearity=None, pad='same',
                 W=lasagne.init.HeNormal(gain='relu'))
        l = batchnorm(l)
        l = nonlin_layer(l, nonlinearity=nonlin)
        l = conv(l, num_filters=n_filters, filter_size=(1, 1),
                 stride=(1, 1), nonlinearity=None, pad='same',
                 W=lasagne.init.HeNormal(gain='relu'))
        if increase_dim:
            # Use projection (A, B) as described in paper
            p = projection(l_inp)
        else:
            # Identity shortcut
            p = l_inp
        l = sumlayer([l, p])
        l = nonlin_layer(l, nonlinearity=nonlin)
        return l

    # Bottleneck architecture with more efficiency (the post with Kaiming He's response)
    # https://www.reddit.com/r/MachineLearning/comments/3ywi6x/deep_residual_learning_the_bottleneck/ 
    def bottleneck_block_fast(l_inp, nonlinearity=nonlin, increase_dim=False):
        # first figure filters/strides
        n_filters, last_stride = filters_increase_dims(l_inp, increase_dim)
        # conv -> BN -> nonlin -> conv -> BN -> nonlin -> conv -> BN -> sum
        # -> nonlin
        # first make the bottleneck, scale the filters ..!
        scale = 4 # as per bottleneck architecture used in paper
        scaled_filters = n_filters/scale
        l = conv(l_inp, num_filters=scaled_filters, filter_size=(1, 1),
                 stride=(1, 1), nonlinearity=None, pad='same',
                 W=lasagne.init.HeNormal(gain='relu'))
        l = batchnorm(l)
        l = nonlin_layer(l, nonlinearity=nonlin)
        l = conv(l, num_filters=scaled_filters, filter_size=(3, 3),
                 stride=(1, 1), nonlinearity=None, pad='same',
                 W=lasagne.init.HeNormal(gain='relu'))
        l = batchnorm(l)
        l = nonlin_layer(l, nonlinearity=nonlin)
        l = conv(l, num_filters=n_filters, filter_size=(1, 1),
                 stride=last_stride, nonlinearity=None, pad='same',
                 W=lasagne.init.HeNormal(gain='relu'))
        if increase_dim:
            # Use projection (A, B) as described in paper
            p = projection(l_inp)
        else:
            # Identity shortcut
            p = l_inp
        l = sumlayer([l, p])
        l = nonlin_layer(l, nonlinearity=nonlin)
        return l
       
    res_block = res_block_v1

    # Stacks the residual blocks, makes it easy to model size of architecture with int n   
    def blockstack(l, n, nonlinearity=nonlin):
        print('NNN',n)
        for _ in range(n):
            print ('new')
            l = res_block(l, nonlinearity=nonlin)
        return l

    # Building the network
    l_in = lasagne.layers.InputLayer(shape=(None, 4, 75, 75),
                                        input_var=input_var)
    # First layer! just a plain convLayer
    l1 = conv(l_in, num_filters=num_filters, stride=(1, 1),
              filter_size=(3, 3), nonlinearity=None, pad='same')
    l1 = batchnorm(l1)
    l1 = nonlin_layer(l1, nonlinearity=nonlin)

    # Stacking bottlenecks and increasing dims! (while reducing shape size)
#     l1_bs = blockstack(l1, n=n)
#     l1_id = res_block(l1_bs, increase_dim=True)

#     l2_bs = blockstack(l1_id, n=n)
#     l2_id = res_block(l2_bs, increase_dim=True)

#     l3_bs = blockstack(l2_id, n=n)

    l3_bs = blockstack(l1, n=n)

    l3_do = dropout(l3_bs, p=.5)
    
    # And, finally, the 10-unit output layer:
    network = lasagne.layers.DenseLayer(
            l3_do,
#             l1,
            num_units=2,
            nonlinearity=lasagne.nonlinearities.softmax)

    return network


# ############################# Batch iterator ###############################
# This is just a simple helper function iterating over training data in
# mini-batches of a particular size, optionally in random order. It assumes
# data is available as numpy arrays. For big datasets, you could load numpy
# arrays as memory-mapped files (np.load(..., mmap_mode='r')), or write your
# own custom data iteration function. For small datasets, you can also copy
# them to GPU at once for slightly improved performance. This would involve
# several changes in the main program, though, and is not demonstrated here.

def iterate_minibatches(inputs, targets, batchsize, shuffle=False):
    assert len(inputs) == len(targets)
    if shuffle:
        indices = np.arange(len(inputs))
        np.random.shuffle(indices)
    for start_idx in range(0, len(inputs) - batchsize + 1, batchsize):
        if shuffle:
            excerpt = indices[start_idx:start_idx + batchsize]
        else:
            excerpt = slice(start_idx, start_idx + batchsize)
            
            Xb = inputs[excerpt]
            yb = targets[excerpt]
            
            Xb = Xb - .5
            
            k_s = np.array([0,1,2,3],dtype=np.uint8)
            for i in range(len(Xb)):
                k = np.random.choice(k_s)
                for j in range(Xb.shape[1]):
                    Xb[j][0] = np.rot90(Xb[j][0], k)
                    
            yield Xb, yb
            
#         yield inputs[excerpt], targets[excerpt]

In [8]:
PATCH_PATH = ('ipmlb')
X_train, y_train, X_test, y_test = gp.Patch.load_rgba(PATCH_PATH)


Loaded /home/d/patches//ipmlb/ in 0.158769130707 seconds.

In [9]:
X_val = X_train[-X_train.shape[0]/4:]
y_val = y_train[-X_train.shape[0]/4:]

In [10]:
X_train2 = X_train[:-X_train.shape[0]/4]
y_train2 = y_train[:-X_train.shape[0]/4]

In [6]:
n=2
num_filters=64
num_epochs=200
cudnn='yes'
print(n)


2

In [7]:
# Prepare Theano variables for inputs and targets
input_var = T.tensor4('inputs')
target_var = T.ivector('targets')

# Create neural network model (depending on first command line parameter)
print("Building model and compiling functions...")
network = build_cnn(input_var, n, num_filters, cudnn)
all_layers = lasagne.layers.get_all_layers(network)
num_params = lasagne.layers.count_params(network)
num_conv = 0
num_nonlin = 0
num_input = 0
num_batchnorm = 0
num_elemsum = 0
num_dense = 0
num_unknown = 0
print("  layer output shapes:")
for layer in all_layers:
    name = string.ljust(layer.__class__.__name__, 32)
    print("    %s %s" %(name, lasagne.layers.get_output_shape(layer)))
    if "Conv2D" in name:
        num_conv += 1
    elif "NonlinearityLayer" in name:
        num_nonlin += 1
    elif "InputLayer" in name:
        num_input += 1
    elif "BatchNormLayer" in name:
        num_batchnorm += 1
    elif "ElemwiseSumLayer" in name:
        num_elemsum += 1
    elif "DenseLayer" in name:
        num_dense += 1
    else:
        num_unknown += 1
print("  no. of InputLayers: %d" % num_input)
print("  no. of Conv2DLayers: %d" % num_conv)
print("  no. of BatchNormLayers: %d" % num_batchnorm)
print("  no. of NonlinearityLayers: %d" % num_nonlin)
print("  no. of DenseLayers: %d" % num_dense)
print("  no. of ElemwiseSumLayers: %d" % num_elemsum)
print("  no. of Unknown Layers: %d" % num_unknown)
print("  total no. of layers: %d" % len(all_layers))
print("  no. of parameters: %d" % num_params)
# Create a loss expression for training, i.e., a scalar objective we want
# to minimize (for our multi-class problem, it is the cross-entropy loss):
prediction = lasagne.layers.get_output(network)
loss = lasagne.objectives.categorical_crossentropy(prediction, target_var)
loss = loss.mean()
# We could add some weight decay as well here, see lasagne.regularization.

# Create update expressions for training, i.e., how to modify the
# parameters at each training step. Here, we'll use Stochastic Gradient
# Descent (SGD) with Nesterov momentum, but Lasagne offers plenty more.
params = lasagne.layers.get_all_params(network, trainable=True)

# several learning rates for low initial learning rates and
# learning rate anealing (id is epoch)
learning_rate_schedule = {
0: 0.0001, # low initial learning rate as described in paper
2: 0.01,
100: 0.001,
150: 0.0001
}


learning_rate = theano.shared(np.float32(learning_rate_schedule[0]))

updates = lasagne.updates.nesterov_momentum(
        loss, params, learning_rate=learning_rate, momentum=0.9)

# Create a loss expression for validation/testing. The crucial difference
# here is that we do a deterministic forward pass through the network,
# disabling dropout layers.
test_prediction = lasagne.layers.get_output(network, deterministic=True)
test_loss = lasagne.objectives.categorical_crossentropy(test_prediction,
                                                        target_var)
test_loss = test_loss.mean()
# As a bonus, also create an expression for the classification accuracy:
test_acc = T.mean(T.eq(T.argmax(test_prediction, axis=1), target_var),
                  dtype=theano.config.floatX)

# Compile a function performing a training step on a mini-batch (by giving
# the updates dictionary) and returning the corresponding training loss:
train_fn = theano.function([input_var, target_var], loss, updates=updates)

# Compile a second function computing the validation loss and accuracy:
val_fn = theano.function([input_var, target_var], [test_loss, test_acc])


Building model and compiling functions...
NNN 2
new
adding dropout
new
adding dropout
  layer output shapes:
    InputLayer                       (None, 4, 75, 75)
    Conv2DDNNLayer                   (None, 64, 75, 75)
    BatchNormLayer                   (None, 64, 75, 75)
    NonlinearityLayer                (None, 64, 75, 75)
    Conv2DDNNLayer                   (None, 64, 75, 75)
    BatchNormLayer                   (None, 64, 75, 75)
    NonlinearityLayer                (None, 64, 75, 75)
    DropoutLayer                     (None, 64, 75, 75)
    Conv2DDNNLayer                   (None, 64, 75, 75)
    BatchNormLayer                   (None, 64, 75, 75)
    ElemwiseSumLayer                 (None, 64, 75, 75)
    NonlinearityLayer                (None, 64, 75, 75)
    Conv2DDNNLayer                   (None, 64, 75, 75)
    BatchNormLayer                   (None, 64, 75, 75)
    NonlinearityLayer                (None, 64, 75, 75)
    DropoutLayer                     (None, 64, 75, 75)
    Conv2DDNNLayer                   (None, 64, 75, 75)
    BatchNormLayer                   (None, 64, 75, 75)
    ElemwiseSumLayer                 (None, 64, 75, 75)
    NonlinearityLayer                (None, 64, 75, 75)
    DropoutLayer                     (None, 64, 75, 75)
    DenseLayer                       (None, 2)
  no. of InputLayers: 1
  no. of Conv2DLayers: 5
  no. of BatchNormLayers: 5
  no. of NonlinearityLayers: 5
  no. of DenseLayers: 1
  no. of ElemwiseSumLayers: 2
  no. of Unknown Layers: 3
  total no. of layers: 22
  no. of parameters: 871362

In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [11]:
# Finally, launch the training loop.
print("Starting training...")
# We iterate over epochs:
for epoch in range(num_epochs):
    if epoch in learning_rate_schedule:
        lr = np.float32(learning_rate_schedule[epoch])
        print(" setting learning rate to %.7f" % lr)
        learning_rate.set_value(lr)
    # In each epoch, we do a full pass over the training data:
    train_err = 0
    train_batches = 0
    start_time = time.time()
    for batch in iterate_minibatches(X_train2, y_train2, 128, shuffle=False):
        inputs, targets = batch
        train_err += train_fn(inputs, targets)
        train_batches += 1

    # And a full pass over the validation data:
    val_err = 0
    val_acc = 0
    val_batches = 0
    for batch in iterate_minibatches(X_val, y_val, 128, shuffle=False):
        inputs, targets = batch
        err, acc = val_fn(inputs, targets)
        val_err += err
        val_acc += acc
        val_batches += 1

    # Then we print the results for this epoch:
    print("Epoch {} of {} took {:.3f}s".format(
        epoch + 1, num_epochs, time.time() - start_time))
    print("  training loss:\t\t{:.6f}".format(train_err / train_batches))
    print("  validation loss:\t\t{:.6f}".format(val_err / val_batches))
    print("  validation accuracy:\t\t{:.2f} %".format(
        val_acc / val_batches * 100))


Starting training...
 setting learning rate to 0.0001000
Epoch 1 of 200 took 1498.791s
  training loss:		0.961825
  validation loss:		1.122976
  validation accuracy:		81.27 %
Epoch 2 of 200 took 1526.950s
  training loss:		0.565774
  validation loss:		0.449433
  validation accuracy:		91.16 %
 setting learning rate to 0.0100000
Epoch 3 of 200 took 1507.428s
  training loss:		2.093450
  validation loss:		0.285670
  validation accuracy:		88.33 %
Epoch 4 of 200 took 1507.298s
  training loss:		0.279917
  validation loss:		0.246781
  validation accuracy:		90.09 %
Epoch 5 of 200 took 1508.682s
  training loss:		0.258657
  validation loss:		0.239607
  validation accuracy:		90.47 %
Epoch 6 of 200 took 1506.945s
  training loss:		0.249869
  validation loss:		0.236154
  validation accuracy:		90.66 %
Epoch 7 of 200 took 1505.387s
  training loss:		0.244102
  validation loss:		0.230588
  validation accuracy:		90.96 %
Epoch 8 of 200 took 1514.948s
  training loss:		0.240329
  validation loss:		0.226531
  validation accuracy:		91.20 %
Epoch 9 of 200 took 1512.738s
  training loss:		0.235772
  validation loss:		0.233000
  validation accuracy:		90.97 %
Epoch 10 of 200 took 1509.199s
  training loss:		0.233176
  validation loss:		0.233735
  validation accuracy:		90.75 %
Epoch 11 of 200 took 1525.770s
  training loss:		0.230647
  validation loss:		0.233434
  validation accuracy:		90.89 %
Epoch 12 of 200 took 1519.916s
  training loss:		0.228786
  validation loss:		0.220758
  validation accuracy:		91.37 %
Epoch 13 of 200 took 1507.771s
  training loss:		0.225797
  validation loss:		0.224929
  validation accuracy:		91.24 %
Epoch 14 of 200 took 1514.398s
  training loss:		0.225282
  validation loss:		0.218318
  validation accuracy:		91.57 %
Epoch 15 of 200 took 1508.658s
  training loss:		0.223266
  validation loss:		0.229018
  validation accuracy:		91.00 %
Epoch 16 of 200 took 1506.144s
  training loss:		0.221863
  validation loss:		0.219444
  validation accuracy:		91.54 %
Epoch 17 of 200 took 1506.564s
  training loss:		0.220154
  validation loss:		0.220299
  validation accuracy:		91.55 %
Epoch 18 of 200 took 1507.678s
  training loss:		0.218990
  validation loss:		0.231785
  validation accuracy:		90.88 %
Epoch 19 of 200 took 1524.830s
  training loss:		0.217147
  validation loss:		0.216564
  validation accuracy:		91.61 %
Epoch 20 of 200 took 1524.712s
  training loss:		0.216373
  validation loss:		0.206964
  validation accuracy:		92.10 %
Epoch 21 of 200 took 1508.225s
  training loss:		0.214247
  validation loss:		0.211649
  validation accuracy:		91.76 %
Epoch 22 of 200 took 1506.380s
  training loss:		0.213710
  validation loss:		0.220855
  validation accuracy:		91.37 %
Epoch 23 of 200 took 1506.004s
  training loss:		0.212522
  validation loss:		0.210128
  validation accuracy:		91.88 %
Epoch 24 of 200 took 1505.129s
  training loss:		0.211067
  validation loss:		0.220119
  validation accuracy:		91.48 %
Epoch 25 of 200 took 1506.667s
  training loss:		0.210480
  validation loss:		0.210966
  validation accuracy:		91.98 %
Epoch 26 of 200 took 1507.640s
  training loss:		0.209499
  validation loss:		0.215005
  validation accuracy:		91.77 %
Epoch 27 of 200 took 1506.793s
  training loss:		0.209093
  validation loss:		0.204795
  validation accuracy:		92.18 %
Epoch 28 of 200 took 1508.622s
  training loss:		0.208699
  validation loss:		0.202529
  validation accuracy:		92.38 %
Epoch 29 of 200 took 1507.176s
  training loss:		0.206759
  validation loss:		0.200795
  validation accuracy:		92.42 %
Epoch 30 of 200 took 1507.696s
  training loss:		0.206742
  validation loss:		0.195887
  validation accuracy:		92.70 %
Epoch 31 of 200 took 1508.094s
  training loss:		0.206067
  validation loss:		0.201008
  validation accuracy:		92.41 %
Epoch 32 of 200 took 1506.025s
  training loss:		0.204613
  validation loss:		0.203142
  validation accuracy:		92.39 %
Epoch 33 of 200 took 1507.371s
  training loss:		0.204323
  validation loss:		0.213597
  validation accuracy:		92.00 %
Epoch 34 of 200 took 1511.065s
  training loss:		0.203174
  validation loss:		0.202487
  validation accuracy:		92.43 %
Epoch 35 of 200 took 1504.781s
  training loss:		0.203144
  validation loss:		0.200675
  validation accuracy:		92.50 %
Epoch 36 of 200 took 1507.535s
  training loss:		0.202166
  validation loss:		0.201433
  validation accuracy:		92.50 %
Epoch 37 of 200 took 1506.208s
  training loss:		0.202303
  validation loss:		0.196942
  validation accuracy:		92.62 %
Epoch 38 of 200 took 1509.300s
  training loss:		0.199947
  validation loss:		0.195728
  validation accuracy:		92.75 %
Epoch 39 of 200 took 1505.912s
  training loss:		0.200251
  validation loss:		0.199178
  validation accuracy:		92.58 %
Epoch 40 of 200 took 1507.859s
  training loss:		0.199014
  validation loss:		0.197294
  validation accuracy:		92.62 %
Epoch 41 of 200 took 1506.292s
  training loss:		0.199221
  validation loss:		0.197847
  validation accuracy:		92.58 %
Epoch 42 of 200 took 1509.431s
  training loss:		0.197861
  validation loss:		0.191727
  validation accuracy:		93.00 %
Epoch 43 of 200 took 1506.933s
  training loss:		0.197231
  validation loss:		0.193900
  validation accuracy:		92.74 %
Epoch 44 of 200 took 1506.082s
  training loss:		0.196165
  validation loss:		0.191801
  validation accuracy:		92.89 %
Epoch 45 of 200 took 1506.885s
  training loss:		0.195288
  validation loss:		0.193221
  validation accuracy:		92.78 %
Epoch 46 of 200 took 1507.105s
  training loss:		0.195615
  validation loss:		0.190010
  validation accuracy:		93.03 %
Epoch 47 of 200 took 1506.028s
  training loss:		0.194663
  validation loss:		0.189887
  validation accuracy:		92.98 %
Epoch 48 of 200 took 1506.123s
  training loss:		0.193870
  validation loss:		0.187602
  validation accuracy:		92.98 %
Epoch 49 of 200 took 1506.759s
  training loss:		0.193997
  validation loss:		0.193663
  validation accuracy:		92.74 %
Epoch 50 of 200 took 1506.326s
  training loss:		0.193358
  validation loss:		0.191388
  validation accuracy:		92.92 %
Epoch 51 of 200 took 1507.533s
  training loss:		0.191639
  validation loss:		0.188968
  validation accuracy:		93.05 %
Epoch 52 of 200 took 1508.796s
  training loss:		0.191222
  validation loss:		0.190042
  validation accuracy:		92.99 %
Epoch 53 of 200 took 1507.220s
  training loss:		0.191666
  validation loss:		0.185993
  validation accuracy:		93.19 %
Epoch 54 of 200 took 1508.458s
  training loss:		0.190329
  validation loss:		0.187130
  validation accuracy:		93.14 %
Epoch 55 of 200 took 1506.595s
  training loss:		0.189661
  validation loss:		0.186467
  validation accuracy:		93.20 %
Epoch 56 of 200 took 1508.233s
  training loss:		0.189474
  validation loss:		0.196114
  validation accuracy:		92.72 %
Epoch 57 of 200 took 1526.420s
  training loss:		0.189094
  validation loss:		0.190709
  validation accuracy:		92.91 %
Epoch 58 of 200 took 1526.677s
  training loss:		0.188683
  validation loss:		0.189177
  validation accuracy:		92.99 %
Epoch 59 of 200 took 1525.483s
  training loss:		0.187996
  validation loss:		0.195060
  validation accuracy:		92.73 %
Epoch 60 of 200 took 1526.433s
  training loss:		0.187774
  validation loss:		0.185760
  validation accuracy:		93.20 %
Epoch 61 of 200 took 1527.648s
  training loss:		0.187436
  validation loss:		0.183836
  validation accuracy:		93.32 %
Epoch 62 of 200 took 1508.554s
  training loss:		0.187105
  validation loss:		0.185145
  validation accuracy:		93.14 %
Epoch 63 of 200 took 1525.053s
  training loss:		0.186091
  validation loss:		0.184884
  validation accuracy:		93.26 %
Epoch 64 of 200 took 1515.204s
  training loss:		0.186262
  validation loss:		0.184188
  validation accuracy:		93.23 %
Epoch 65 of 200 took 1525.087s
  training loss:		0.184831
  validation loss:		0.187452
  validation accuracy:		93.12 %
Epoch 66 of 200 took 1524.674s
  training loss:		0.184642
  validation loss:		0.181639
  validation accuracy:		93.39 %
Epoch 67 of 200 took 1507.838s
  training loss:		0.183867
  validation loss:		0.182476
  validation accuracy:		93.40 %
Epoch 68 of 200 took 1514.739s
  training loss:		0.184669
  validation loss:		0.180992
  validation accuracy:		93.38 %
Epoch 69 of 200 took 1506.332s
  training loss:		0.183107
  validation loss:		0.182231
  validation accuracy:		93.34 %
Epoch 70 of 200 took 1507.727s
  training loss:		0.183506
  validation loss:		0.188703
  validation accuracy:		93.00 %
Epoch 71 of 200 took 1506.314s
  training loss:		0.182828
  validation loss:		0.180383
  validation accuracy:		93.46 %
Epoch 72 of 200 took 1507.335s
  training loss:		0.182315
  validation loss:		0.179047
  validation accuracy:		93.54 %
Epoch 73 of 200 took 1506.141s
  training loss:		0.182838
  validation loss:		0.179023
  validation accuracy:		93.54 %
Epoch 74 of 200 took 1506.300s
  training loss:		0.180977
  validation loss:		0.187420
  validation accuracy:		93.09 %
Epoch 75 of 200 took 1508.062s
  training loss:		0.180745
  validation loss:		0.180782
  validation accuracy:		93.35 %
Epoch 76 of 200 took 1506.297s
  training loss:		0.180909
  validation loss:		0.186900
  validation accuracy:		93.17 %
Epoch 77 of 200 took 1507.725s
  training loss:		0.181663
  validation loss:		0.177964
  validation accuracy:		93.55 %
Epoch 78 of 200 took 1506.682s
  training loss:		0.180890
  validation loss:		0.179105
  validation accuracy:		93.49 %
Epoch 79 of 200 took 1507.728s
  training loss:		0.181077
  validation loss:		0.181460
  validation accuracy:		93.40 %
Epoch 80 of 200 took 1506.715s
  training loss:		0.179975
  validation loss:		0.180767
  validation accuracy:		93.39 %
Epoch 81 of 200 took 1507.198s
  training loss:		0.179547
  validation loss:		0.186197
  validation accuracy:		93.15 %
Epoch 82 of 200 took 1506.206s
  training loss:		0.178959
  validation loss:		0.180894
  validation accuracy:		93.44 %
Epoch 83 of 200 took 1506.325s
  training loss:		0.178613
  validation loss:		0.177134
  validation accuracy:		93.57 %
Epoch 84 of 200 took 1506.769s
  training loss:		0.180030
  validation loss:		0.177498
  validation accuracy:		93.52 %
Epoch 85 of 200 took 1506.449s
  training loss:		0.177646
  validation loss:		0.176252
  validation accuracy:		93.69 %
Epoch 86 of 200 took 1507.324s
  training loss:		0.178076
  validation loss:		0.175614
  validation accuracy:		93.55 %
Epoch 87 of 200 took 1505.907s
  training loss:		0.177494
  validation loss:		0.179977
  validation accuracy:		93.41 %
Epoch 88 of 200 took 1508.397s
  training loss:		0.177656
  validation loss:		0.175484
  validation accuracy:		93.65 %
Epoch 89 of 200 took 1507.318s
  training loss:		0.176916
  validation loss:		0.174290
  validation accuracy:		93.69 %
Epoch 90 of 200 took 1493.444s
  training loss:		0.176263
  validation loss:		0.174722
  validation accuracy:		93.55 %
Epoch 91 of 200 took 1489.073s
  training loss:		0.176091
  validation loss:		0.180315
  validation accuracy:		93.43 %
Epoch 92 of 200 took 1507.091s
  training loss:		0.176049
  validation loss:		0.176713
  validation accuracy:		93.56 %
Epoch 93 of 200 took 1505.784s
  training loss:		0.175398
  validation loss:		0.173243
  validation accuracy:		93.70 %
Epoch 94 of 200 took 1507.187s
  training loss:		0.175623
  validation loss:		0.174340
  validation accuracy:		93.64 %
Epoch 95 of 200 took 1488.744s
  training loss:		0.175410
  validation loss:		0.176620
  validation accuracy:		93.52 %
Epoch 96 of 200 took 1506.147s
  training loss:		0.174806
  validation loss:		0.174663
  validation accuracy:		93.68 %
Epoch 97 of 200 took 1505.885s
  training loss:		0.174098
  validation loss:		0.178406
  validation accuracy:		93.53 %
Epoch 98 of 200 took 1505.953s
  training loss:		0.175327
  validation loss:		0.173387
  validation accuracy:		93.72 %
Epoch 99 of 200 took 1505.733s
  training loss:		0.173164
  validation loss:		0.171627
  validation accuracy:		93.75 %
Epoch 100 of 200 took 1505.842s
  training loss:		0.173866
  validation loss:		0.171117
  validation accuracy:		93.77 %
 setting learning rate to 0.0010000
Epoch 101 of 200 took 1505.975s
  training loss:		0.167471
  validation loss:		0.166847
  validation accuracy:		93.88 %
Epoch 102 of 200 took 1489.218s
  training loss:		0.166225
  validation loss:		0.166568
  validation accuracy:		93.94 %
Epoch 103 of 200 took 1505.587s
  training loss:		0.165337
  validation loss:		0.165861
  validation accuracy:		93.95 %
Epoch 104 of 200 took 1489.067s
  training loss:		0.164491
  validation loss:		0.166104
  validation accuracy:		93.95 %
Epoch 105 of 200 took 1505.877s
  training loss:		0.165047
  validation loss:		0.165913
  validation accuracy:		94.00 %
Epoch 106 of 200 took 1505.578s
  training loss:		0.163840
  validation loss:		0.165245
  validation accuracy:		94.03 %
Epoch 107 of 200 took 1505.775s
  training loss:		0.164777
  validation loss:		0.165183
  validation accuracy:		94.06 %
Epoch 108 of 200 took 1505.943s
  training loss:		0.165504
  validation loss:		0.165548
  validation accuracy:		94.02 %
Epoch 109 of 200 took 1505.757s
  training loss:		0.165023
  validation loss:		0.165466
  validation accuracy:		94.01 %
Epoch 110 of 200 took 1505.734s
  training loss:		0.163559
  validation loss:		0.165148
  validation accuracy:		94.01 %
Epoch 111 of 200 took 1488.867s
  training loss:		0.163689
  validation loss:		0.165320
  validation accuracy:		94.00 %
Epoch 112 of 200 took 1505.862s
  training loss:		0.163960
  validation loss:		0.165359
  validation accuracy:		94.03 %
Epoch 113 of 200 took 1506.294s
  training loss:		0.163700
  validation loss:		0.165325
  validation accuracy:		94.06 %
Epoch 114 of 200 took 1525.189s
  training loss:		0.163272
  validation loss:		0.165027
  validation accuracy:		94.00 %
Epoch 115 of 200 took 1525.272s
  training loss:		0.163226
  validation loss:		0.164651
  validation accuracy:		94.05 %
Epoch 116 of 200 took 1527.645s
  training loss:		0.163414
  validation loss:		0.164840
  validation accuracy:		94.05 %
Epoch 117 of 200 took 1526.174s
  training loss:		0.163422
  validation loss:		0.164773
  validation accuracy:		94.05 %
Epoch 118 of 200 took 1526.658s
  training loss:		0.163548
  validation loss:		0.164624
  validation accuracy:		94.07 %
Epoch 119 of 200 took 1525.606s
  training loss:		0.162888
  validation loss:		0.164558
  validation accuracy:		94.09 %
Epoch 120 of 200 took 1524.919s
  training loss:		0.163020
  validation loss:		0.164956
  validation accuracy:		94.07 %
Epoch 121 of 200 took 1524.976s
  training loss:		0.162398
  validation loss:		0.164187
  validation accuracy:		94.09 %
Epoch 122 of 200 took 1522.264s
  training loss:		0.163696
  validation loss:		0.164820
  validation accuracy:		94.02 %
Epoch 123 of 200 took 1506.706s
  training loss:		0.163432
  validation loss:		0.164099
  validation accuracy:		94.08 %
Epoch 124 of 200 took 1507.573s
  training loss:		0.162759
  validation loss:		0.164341
  validation accuracy:		94.12 %
Epoch 125 of 200 took 1506.548s
  training loss:		0.162041
  validation loss:		0.163932
  validation accuracy:		94.12 %
Epoch 126 of 200 took 1508.645s
  training loss:		0.163024
  validation loss:		0.163923
  validation accuracy:		94.09 %
Epoch 127 of 200 took 1525.027s
  training loss:		0.163119
  validation loss:		0.164108
  validation accuracy:		94.12 %
Epoch 128 of 200 took 1508.493s
  training loss:		0.162634
  validation loss:		0.163695
  validation accuracy:		94.11 %
Epoch 129 of 200 took 1523.695s
  training loss:		0.162532
  validation loss:		0.164195
  validation accuracy:		94.08 %
Epoch 130 of 200 took 1524.991s
  training loss:		0.162417
  validation loss:		0.163729
  validation accuracy:		94.09 %
Epoch 131 of 200 took 1511.146s
  training loss:		0.161889
  validation loss:		0.164092
  validation accuracy:		94.10 %
Epoch 132 of 200 took 1506.265s
  training loss:		0.162114
  validation loss:		0.163928
  validation accuracy:		94.17 %
Epoch 133 of 200 took 1506.130s
  training loss:		0.161926
  validation loss:		0.163701
  validation accuracy:		94.17 %
Epoch 134 of 200 took 1489.282s
  training loss:		0.162886
  validation loss:		0.163869
  validation accuracy:		94.09 %
Epoch 135 of 200 took 1488.861s
  training loss:		0.162369
  validation loss:		0.163760
  validation accuracy:		94.12 %
Epoch 136 of 200 took 1507.212s
  training loss:		0.161135
  validation loss:		0.163414
  validation accuracy:		94.16 %
Epoch 137 of 200 took 1507.275s
  training loss:		0.161657
  validation loss:		0.163888
  validation accuracy:		94.15 %
Epoch 138 of 200 took 1508.104s
  training loss:		0.162687
  validation loss:		0.163595
  validation accuracy:		94.12 %
Epoch 139 of 200 took 1506.442s
  training loss:		0.161041
  validation loss:		0.163313
  validation accuracy:		94.11 %
Epoch 140 of 200 took 1506.050s
  training loss:		0.160965
  validation loss:		0.163831
  validation accuracy:		94.13 %
Epoch 141 of 200 took 1505.977s
  training loss:		0.160757
  validation loss:		0.163520
  validation accuracy:		94.12 %
Epoch 142 of 200 took 1505.849s
  training loss:		0.161297
  validation loss:		0.163243
  validation accuracy:		94.12 %
Epoch 143 of 200 took 1505.890s
  training loss:		0.161828
  validation loss:		0.164318
  validation accuracy:		94.11 %
Epoch 144 of 200 took 1506.903s
  training loss:		0.160735
  validation loss:		0.163524
  validation accuracy:		94.10 %
Epoch 145 of 200 took 1507.163s
  training loss:		0.161762
  validation loss:		0.163257
  validation accuracy:		94.13 %
Epoch 146 of 200 took 1506.977s
  training loss:		0.160437
  validation loss:		0.163728
  validation accuracy:		94.16 %
Epoch 147 of 200 took 1490.313s
  training loss:		0.160779
  validation loss:		0.162711
  validation accuracy:		94.16 %
Epoch 148 of 200 took 1490.440s
  training loss:		0.161186
  validation loss:		0.162802
  validation accuracy:		94.16 %
Epoch 149 of 200 took 1506.232s
  training loss:		0.160744
  validation loss:		0.162806
  validation accuracy:		94.12 %
Epoch 150 of 200 took 1506.140s
  training loss:		0.161203
  validation loss:		0.163141
  validation accuracy:		94.12 %
 setting learning rate to 0.0001000
Epoch 151 of 200 took 1506.257s
  training loss:		0.160567
  validation loss:		0.163275
  validation accuracy:		94.13 %
Epoch 152 of 200 took 1488.917s
  training loss:		0.160114
  validation loss:		0.163130
  validation accuracy:		94.14 %
Epoch 153 of 200 took 1505.937s
  training loss:		0.159284
  validation loss:		0.163032
  validation accuracy:		94.14 %
Epoch 154 of 200 took 1505.833s
  training loss:		0.160500
  validation loss:		0.163035
  validation accuracy:		94.16 %
Epoch 155 of 200 took 1506.392s
  training loss:		0.159691
  validation loss:		0.162984
  validation accuracy:		94.15 %
Epoch 156 of 200 took 1506.631s
  training loss:		0.160421
  validation loss:		0.162862
  validation accuracy:		94.16 %
Epoch 157 of 200 took 1507.661s
  training loss:		0.159904
  validation loss:		0.162880
  validation accuracy:		94.14 %
Epoch 158 of 200 took 1506.127s
  training loss:		0.160733
  validation loss:		0.163173
  validation accuracy:		94.15 %
Epoch 159 of 200 took 1506.510s
  training loss:		0.159482
  validation loss:		0.163199
  validation accuracy:		94.15 %
Epoch 160 of 200 took 1507.684s
  training loss:		0.159867
  validation loss:		0.163042
  validation accuracy:		94.15 %
Epoch 161 of 200 took 1510.961s
  training loss:		0.160314
  validation loss:		0.163134
  validation accuracy:		94.13 %
Epoch 162 of 200 took 1506.245s
  training loss:		0.158885
  validation loss:		0.163073
  validation accuracy:		94.14 %
Epoch 163 of 200 took 1504.877s
  training loss:		0.160111
  validation loss:		0.163128
  validation accuracy:		94.13 %
Epoch 164 of 200 took 1506.223s
  training loss:		0.159346
  validation loss:		0.163063
  validation accuracy:		94.13 %
Epoch 165 of 200 took 1508.414s
  training loss:		0.159499
  validation loss:		0.162852
  validation accuracy:		94.15 %
Epoch 166 of 200 took 1506.044s
  training loss:		0.159424
  validation loss:		0.163095
  validation accuracy:		94.12 %
Epoch 167 of 200 took 1507.425s
  training loss:		0.159642
  validation loss:		0.162945
  validation accuracy:		94.13 %
Epoch 168 of 200 took 1506.177s
  training loss:		0.158930
  validation loss:		0.162766
  validation accuracy:		94.14 %
Epoch 169 of 200 took 1509.602s
  training loss:		0.158797
  validation loss:		0.163166
  validation accuracy:		94.12 %
Epoch 170 of 200 took 1518.978s
  training loss:		0.159465
  validation loss:		0.162629
  validation accuracy:		94.15 %
Epoch 171 of 200 took 1509.462s
  training loss:		0.159920
  validation loss:		0.162999
  validation accuracy:		94.15 %
Epoch 172 of 200 took 1521.873s
  training loss:		0.159760
  validation loss:		0.162944
  validation accuracy:		94.14 %
Epoch 173 of 200 took 1508.265s
  training loss:		0.159839
  validation loss:		0.162857
  validation accuracy:		94.12 %
Epoch 174 of 200 took 1506.827s
  training loss:		0.159911
  validation loss:		0.162986
  validation accuracy:		94.15 %
Epoch 175 of 200 took 1507.706s
  training loss:		0.160214
  validation loss:		0.162812
  validation accuracy:		94.16 %
Epoch 176 of 200 took 1525.028s
  training loss:		0.159430
  validation loss:		0.162884
  validation accuracy:		94.15 %
Epoch 177 of 200 took 1525.371s
  training loss:		0.159507
  validation loss:		0.162881
  validation accuracy:		94.16 %
Epoch 178 of 200 took 1526.376s
  training loss:		0.159362
  validation loss:		0.162823
  validation accuracy:		94.16 %
Epoch 179 of 200 took 1521.707s
  training loss:		0.160299
  validation loss:		0.162932
  validation accuracy:		94.16 %
Epoch 180 of 200 took 1526.368s
  training loss:		0.158861
  validation loss:		0.162820
  validation accuracy:		94.16 %
Epoch 181 of 200 took 1525.579s
  training loss:		0.159427
  validation loss:		0.162666
  validation accuracy:		94.14 %
Epoch 182 of 200 took 1525.948s
  training loss:		0.159916
  validation loss:		0.162802
  validation accuracy:		94.15 %
Epoch 183 of 200 took 1526.220s
  training loss:		0.160392
  validation loss:		0.162973
  validation accuracy:		94.14 %
Epoch 184 of 200 took 1525.406s
  training loss:		0.158991
  validation loss:		0.162845
  validation accuracy:		94.16 %
Epoch 185 of 200 took 1525.597s
  training loss:		0.158997
  validation loss:		0.162711
  validation accuracy:		94.21 %
Epoch 186 of 200 took 1525.726s
  training loss:		0.160067
  validation loss:		0.162719
  validation accuracy:		94.16 %
Epoch 187 of 200 took 1526.249s
  training loss:		0.160013
  validation loss:		0.162730
  validation accuracy:		94.12 %
Epoch 188 of 200 took 1525.624s
  training loss:		0.159820
  validation loss:		0.162809
  validation accuracy:		94.16 %
Epoch 189 of 200 took 1526.503s
  training loss:		0.159548
  validation loss:		0.162863
  validation accuracy:		94.19 %
Epoch 190 of 200 took 1526.052s
  training loss:		0.159997
  validation loss:		0.162657
  validation accuracy:		94.18 %
Epoch 191 of 200 took 1526.140s
  training loss:		0.158435
  validation loss:		0.162993
  validation accuracy:		94.16 %
Epoch 192 of 200 took 1526.140s
  training loss:		0.159682
  validation loss:		0.162774
  validation accuracy:		94.16 %
Epoch 193 of 200 took 1525.335s
  training loss:		0.159949
  validation loss:		0.162783
  validation accuracy:		94.14 %
Epoch 194 of 200 took 1525.145s
  training loss:		0.159524
  validation loss:		0.162668
  validation accuracy:		94.16 %
Epoch 195 of 200 took 1526.212s
  training loss:		0.159908
  validation loss:		0.162950
  validation accuracy:		94.16 %
Epoch 196 of 200 took 1526.059s
  training loss:		0.159680
  validation loss:		0.163074
  validation accuracy:		94.13 %
Epoch 197 of 200 took 1524.797s
  training loss:		0.159525
  validation loss:		0.162658
  validation accuracy:		94.16 %
Epoch 198 of 200 took 1526.074s
  training loss:		0.159666
  validation loss:		0.162674
  validation accuracy:		94.18 %
Epoch 199 of 200 took 1525.487s
  training loss:		0.160041
  validation loss:		0.162711
  validation accuracy:		94.17 %
Epoch 200 of 200 took 1524.796s
  training loss:		0.159968
  validation loss:		0.162715
  validation accuracy:		94.17 %

In [12]:
# After training, we compute and print the test error:
test_err = 0
test_acc = 0
test_batches = 0
for batch in iterate_minibatches(X_test, y_test, 128, shuffle=False):
    inputs, targets = batch
    err, acc = val_fn(inputs, targets)
    test_err += err
    test_acc += acc
    test_batches += 1
print("Final results:")
print("  test loss:\t\t\t{:.6f}".format(test_err / test_batches))
print("  test accuracy:\t\t{:.2f} %".format(
    test_acc / test_batches * 100))


Final results:
  test loss:			0.189214
  test accuracy:		93.23 %

In [15]:
np.savez('/home/d/resnet2.npz', *lasagne.layers.get_all_param_values(network))

In [84]:
network.input_layer


Out[84]:
<lasagne.layers.special.NonlinearityLayer at 0x7f674cf3b410>

In [13]:
def plot_loss(net):
    train_loss = [row['train_loss'] for row in net.train_history_]
    valid_loss = [row['valid_loss'] for row in net.train_history_]
    plt.plot(train_loss, label='train loss')
    plt.plot(valid_loss, label='valid loss')
    plt.xlabel('epoch')
    plt.ylabel('loss')
    plt.legend(loc='best')
    return plt

In [14]:



---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-14-eedbaacf80c0> in <module>()
----> 1 plot_loss(network)

<ipython-input-13-f862f5ec8e53> in plot_loss(net)
      1 def plot_loss(net):
----> 2     train_loss = [row['train_loss'] for row in net.train_history_]
      3     valid_loss = [row['valid_loss'] for row in net.train_history_]
      4     plt.plot(train_loss, label='train loss')
      5     plt.plot(valid_loss, label='valid loss')

AttributeError: 'DenseLayer' object has no attribute 'train_history_'

In [ ]:
# Finally, launch the training loop.
print("Starting training...")
# We iterate over epochs:
for epoch in range(200,200+num_epochs):
    if epoch in learning_rate_schedule:
        lr = np.float32(learning_rate_schedule[epoch])
        print(" setting learning rate to %.7f" % lr)
        learning_rate.set_value(lr)
    # In each epoch, we do a full pass over the training data:
    train_err = 0
    train_batches = 0
    start_time = time.time()
    for batch in iterate_minibatches(X_train2, y_train2, 128, shuffle=False):
        inputs, targets = batch
        train_err += train_fn(inputs, targets)
        train_batches += 1

    # And a full pass over the validation data:
    val_err = 0
    val_acc = 0
    val_batches = 0
    for batch in iterate_minibatches(X_val, y_val, 128, shuffle=False):
        inputs, targets = batch
        err, acc = val_fn(inputs, targets)
        val_err += err
        val_acc += acc
        val_batches += 1

    # Then we print the results for this epoch:
    print("Epoch {} of {} took {:.3f}s".format(
        epoch + 1, num_epochs, time.time() - start_time))
    print("  training loss:\t\t{:.6f}".format(train_err / train_batches))
    print("  validation loss:\t\t{:.6f}".format(val_err / val_batches))
    print("  validation accuracy:\t\t{:.2f} %".format(
        val_acc / val_batches * 100))


Starting training...

In [17]:
learning_rate_schedule


Out[17]:
{0: 0.0001, 2: 0.01, 100: 0.001, 150: 0.0001}

In [22]:
epoch


Out[22]:
328

In [24]:
train_err / train_batches


Out[24]:
0.15785868913180343

In [25]:
# After training, we compute and print the test error:
test_err = 0
test_acc = 0
test_batches = 0
for batch in iterate_minibatches(X_test, y_test, 128, shuffle=False):
    inputs, targets = batch
    err, acc = val_fn(inputs, targets)
    test_err += err
    test_acc += acc
    test_batches += 1
print("Final results:")
print("  test loss:\t\t\t{:.6f}".format(test_err / test_batches))
print("  test accuracy:\t\t{:.2f} %".format(
    test_acc / test_batches * 100))


Final results:
  test loss:			0.190347
  test accuracy:		93.34 %

In [26]:
# After training, we compute and print the test error:
test_err = 0
test_acc = 0
test_batches = 0
for batch in iterate_minibatches(X_test, y_test, 128, shuffle=False):
    inputs, targets = batch
    err, acc = val_fn(inputs, targets)
    test_err += err
    test_acc += acc
    test_batches += 1
print("Final results:")
print("  test loss:\t\t\t{:.6f}".format(test_err / test_batches))
print("  test accuracy:\t\t{:.2f} %".format(
    test_acc / test_batches * 100))


Final results:
  test loss:			0.190400
  test accuracy:		93.36 %

In [27]:
val_acc / val_batches * 100


Out[27]:
94.174360795454547

In [28]:
val_err / val_batches


Out[28]:
0.16246618782593444

In [29]:
np.savez('/home/d/resnet2_after328.npz', *lasagne.layers.get_all_param_values(network))

In [30]:
# Optionally, you could now dump the network weights to a file like this:
    # np.savez('model.npz', *lasagne.layers.get_all_param_values(network))
    #
    # And load them again later on like this:
    # with np.load('model.npz') as f:
    #     param_values = [f['arr_%d' % i] for i in range(len(f.files))]
    # lasagne.layers.set_all_param_values(network, param_values)

In [31]:
#
#
#

In [34]:
pred_fn = theano.function([input_var, target_var], [test_prediction, test_loss, test_acc])


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-34-759fc37d2e5a> in <module>()
----> 1 pred_fn = theano.function([input_var, target_var], [test_prediction, test_loss, test_acc])

/home/d/nolearn/local/lib/python2.7/site-packages/theano/compile/function.pyc in function(inputs, outputs, mode, updates, givens, no_default_updates, accept_inplace, name, rebuild_strict, allow_input_downcast, profile, on_unused_input)
    318                    on_unused_input=on_unused_input,
    319                    profile=profile,
--> 320                    output_keys=output_keys)
    321     # We need to add the flag check_aliased inputs if we have any mutable or
    322     # borrowed used defined inputs

/home/d/nolearn/local/lib/python2.7/site-packages/theano/compile/pfunc.pyc in pfunc(params, outputs, mode, updates, givens, no_default_updates, accept_inplace, name, rebuild_strict, allow_input_downcast, profile, on_unused_input, output_keys)
    440                                          rebuild_strict=rebuild_strict,
    441                                          copy_inputs_over=True,
--> 442                                          no_default_updates=no_default_updates)
    443     # extracting the arguments
    444     input_variables, cloned_extended_outputs, other_stuff = output_vars

/home/d/nolearn/local/lib/python2.7/site-packages/theano/compile/pfunc.pyc in rebuild_collect_shared(outputs, inputs, replace, updates, rebuild_strict, copy_inputs_over, no_default_updates)
    225                 raise TypeError('Outputs must be theano Variable or '
    226                                 'Out instances. Received ' + str(v) +
--> 227                                 ' of type ' + str(type(v)))
    228             # computed_list.append(cloned_v)
    229     else:

TypeError: Outputs must be theano Variable or Out instances. Received 127.90625 of type <type 'numpy.float64'>

In [33]:
test_prediction = lasagne.layers.get_output(network, deterministic=True)

In [40]:
target_var.shape.eval()


---------------------------------------------------------------------------
MissingInputError                         Traceback (most recent call last)
<ipython-input-40-a06ce32be050> in <module>()
----> 1 target_var.shape.eval()

/home/d/nolearn/local/lib/python2.7/site-packages/theano/gof/graph.pyc in eval(self, inputs_to_values)
    518         inputs = tuple(sorted(inputs_to_values.keys(), key=id))
    519         if inputs not in self._fn_cache:
--> 520             self._fn_cache[inputs] = theano.function(inputs, self)
    521         args = [inputs_to_values[param] for param in inputs]
    522 

/home/d/nolearn/local/lib/python2.7/site-packages/theano/compile/function.pyc in function(inputs, outputs, mode, updates, givens, no_default_updates, accept_inplace, name, rebuild_strict, allow_input_downcast, profile, on_unused_input)
    318                    on_unused_input=on_unused_input,
    319                    profile=profile,
--> 320                    output_keys=output_keys)
    321     # We need to add the flag check_aliased inputs if we have any mutable or
    322     # borrowed used defined inputs

/home/d/nolearn/local/lib/python2.7/site-packages/theano/compile/pfunc.pyc in pfunc(params, outputs, mode, updates, givens, no_default_updates, accept_inplace, name, rebuild_strict, allow_input_downcast, profile, on_unused_input, output_keys)
    477                          accept_inplace=accept_inplace, name=name,
    478                          profile=profile, on_unused_input=on_unused_input,
--> 479                          output_keys=output_keys)
    480 
    481 

/home/d/nolearn/local/lib/python2.7/site-packages/theano/compile/function_module.pyc in orig_function(inputs, outputs, mode, accept_inplace, name, profile, on_unused_input, output_keys)
   1774                    profile=profile,
   1775                    on_unused_input=on_unused_input,
-> 1776                    output_keys=output_keys).create(
   1777             defaults)
   1778 

/home/d/nolearn/local/lib/python2.7/site-packages/theano/compile/function_module.pyc in __init__(self, inputs, outputs, mode, accept_inplace, function_builder, profile, on_unused_input, fgraph, output_keys)
   1426             # OUTPUT VARIABLES)
   1427             fgraph, additional_outputs = std_fgraph(inputs, outputs,
-> 1428                                                     accept_inplace)
   1429             fgraph.profile = profile
   1430         else:

/home/d/nolearn/local/lib/python2.7/site-packages/theano/compile/function_module.pyc in std_fgraph(input_specs, output_specs, accept_inplace)
    175 
    176     fgraph = gof.fg.FunctionGraph(orig_inputs, orig_outputs,
--> 177                                   update_mapping=update_mapping)
    178 
    179     for node in fgraph.apply_nodes:

/home/d/nolearn/local/lib/python2.7/site-packages/theano/gof/fg.pyc in __init__(self, inputs, outputs, features, clone, update_mapping)
    169 
    170         for output in outputs:
--> 171             self.__import_r__(output, reason="init")
    172         for i, output in enumerate(outputs):
    173             output.clients.append(('output', i))

/home/d/nolearn/local/lib/python2.7/site-packages/theano/gof/fg.pyc in __import_r__(self, variable, reason)
    358         # Imports the owners of the variables
    359         if variable.owner and variable.owner not in self.apply_nodes:
--> 360                 self.__import__(variable.owner, reason=reason)
    361         if (variable.owner is None and
    362                 not isinstance(variable, graph.Constant) and

/home/d/nolearn/local/lib/python2.7/site-packages/theano/gof/fg.pyc in __import__(self, apply_node, check, reason)
    472                             "for more information on this error."
    473                             % str(node)),
--> 474                             r)
    475 
    476         for node in new_nodes:

MissingInputError: ("An input of the graph, used to compute Shape(targets), was not provided and not given a value.Use the Theano flag exception_verbosity='high',for more information on this error.", targets)

In [ ]: