In [1]:
import os
os.chdir('/home/renwh/gaze/renwh/caffe_with_cudnnv3/')
import sys
sys.path.insert(0,'./python')
import caffe
from pylab import *
%matplotlib inline
caffe.set_device(0)
caffe.set_mode_gpu()
solver = caffe.SGDSolver('examples/mymodel/00/lenet_solver.prototxt')
In [2]:
 
# each output is (batch size, feature dim, spatial dim)
[(k, v.data.shape) for k, v in solver.net.blobs.items()]
Out[2]:
[('data', (1000, 1, 36, 60)),
 ('label', (1000, 6)),
 ('gaze', (1000, 3)),
 ('headpose', (1000, 3)),
 ('conv1', (1000, 20, 32, 56)),
 ('pool1', (1000, 20, 16, 28)),
 ('conv2', (1000, 50, 12, 24)),
 ('pool2', (1000, 50, 6, 12)),
 ('ip1', (1000, 500)),
 ('cat', (1000, 503)),
 ('ip2', (1000, 3)),
 ('loss', ())]
In [3]:
 
# just print the weight sizes (not biases)
[(k, v[0].data.shape) for k, v in solver.net.params.items()]
Out[3]:
[('conv1', (20, 1, 5, 5)),
 ('conv2', (50, 20, 5, 5)),
 ('ip1', (500, 3600)),
 ('ip2', (3, 503))]
In [4]:
 
solver.net.forward()  # train net
solver.test_nets[0].forward()  # test net (there can be more than one)
Out[4]:
{'loss': array(0.5168986916542053, dtype=float32)}
In [5]:
 
# we use a little trick to tile the first eight images
imshow(solver.net.blobs['data'].data[:8, 0].transpose(1, 0, 2).reshape(36, 8*60), cmap='gray')
print solver.net.blobs['label'].data[:8]
[[ -2.44513273e-01   5.20949736e-02  -9.68245506e-01  -5.07045567e-01
   -1.12138920e-01  -2.90884897e-02]
 [ -7.41908699e-02   2.27922529e-01  -9.70848620e-01  -1.28387764e-01
    1.65355857e-02   1.06296828e-03]
 [ -1.74087971e-01   3.04691344e-02  -9.84258592e-01  -9.52000245e-02
   -3.14195365e-01  -1.50917871e-02]
 [ -2.49744281e-02   1.77879885e-01  -9.83735263e-01  -7.38587156e-02
   -1.21144764e-02  -4.47588827e-04]
 [ -1.61419377e-01   5.79187945e-02  -9.85184848e-01  -1.06810793e-01
    1.42905980e-01   7.65229668e-03]
 [ -1.52415037e-01   2.09456533e-01  -9.65866268e-01  -5.29863574e-02
   -1.14266567e-01  -3.03129526e-03]
 [ -1.76816806e-02   6.62708879e-02  -9.97644961e-01  -6.35477304e-02
   -2.95568883e-01  -9.46362782e-03]
 [  1.79661021e-01   2.34958977e-01  -9.55257118e-01  -8.40480402e-02
    1.60711512e-01   6.77234307e-03]]
In [6]:
 
solver.step(1)
In [7]:
 
imshow(solver.net.params['conv1'][0].diff[:, 0].reshape(4, 5, 5, 5)
       .transpose(0, 2, 1, 3).reshape(4*5, 5*5), cmap='gray')
Out[7]:
<matplotlib.image.AxesImage at 0x7f80f0021490>
 
Show the conv1 weights pics.
Then, I will train the model, and log some information.

Show the conv1 weights pics.

Then, I will train the model, and log some information.

In [8]:
 
%%time
niter = 200
test_interval = 25
# losses will also be stored in the log
train_loss = zeros(niter)
#test_acc = zeros(int(np.ceil(niter / test_interval)))
output = zeros((niter, 8, 3))
# the main solver loop
for it in range(niter):
    solver.step(1)  # SGD by Caffe
    
    # store the train loss
    train_loss[it] = solver.net.blobs['loss'].data
    
    # store the output on the first test batch
    # (start the forward pass at conv1 to avoid loading new data)
    solver.test_nets[0].forward(start='conv1')
    output[it] = solver.test_nets[0].blobs['ip2'].data[:8]
    if it % test_interval == 0:
        print 'Iteration', it
    # run a full test every so often
    # (Caffe can also do this for us and write to a log, but we show here
    #  how to do it directly in Python, where more complicated things are easier.)
Iteration 0
Iteration 25
Iteration 50
Iteration 75
Iteration 100
Iteration 125
Iteration 150
Iteration 175
CPU times: user 12.2 s, sys: 1.78 s, total: 14 s
Wall time: 14 s
In [9]:
 
_, ax1 = subplots()
ax1.plot(arange(niter), train_loss)
ax1.set_xlabel('iteration')
ax1.set_ylabel('train loss')
Out[9]:
<matplotlib.text.Text at 0x7f80ea99d950>
 
**show you the train loss curve.

**show you the train loss curve.

In [10]:
 
figsize=(20, 10)
imshow(solver.test_nets[0].blobs['data'].data[:8, 0].transpose(1, 0, 2).reshape(36, 8*60), cmap='gray')
    
# print the label and train result
for i in range(20):
    print solver.test_nets[0].blobs['label'].data[i,:3] ,'label<->ip2', solver.test_nets[0].blobs['ip2'].data[i]
    
[-0.03092132  0.2968981  -0.95440841] label<->ip2 [ 0.13453819  0.22090048 -1.00112033]
[-0.17464623  0.07483938 -0.98178297] label<->ip2 [ 0.06116261  0.16740224 -0.99770129]
[-0.05296618  0.03521639 -0.99797517] label<->ip2 [ 0.17916283  0.11645281 -0.9816829 ]
[ 0.15368699  0.22621903 -0.96187592] label<->ip2 [ 0.0635498   0.20400019 -0.99273276]
[ 0.12089528  0.1480363  -0.98156488] label<->ip2 [ 0.2069844   0.18295418 -1.00374508]
[-0.00988072  0.12020992 -0.99269933] label<->ip2 [ 0.05067474  0.18941744 -1.00383723]
[ 0.2152129   0.09968402 -0.97146618] label<->ip2 [ 0.23817278  0.17394108 -0.99177444]
[ 0.00774731  0.23595811 -0.97173232] label<->ip2 [ 0.11838973  0.23183405 -1.00399184]
[-0.02837802  0.06899208 -0.99721348] label<->ip2 [ 0.18390562  0.11202981 -0.98027492]
[-0.16378379  0.29957783 -0.9399085 ] label<->ip2 [ 0.05615453  0.21094823 -0.98927003]
[ 0.07077608  0.2685408  -0.96066469] label<->ip2 [ 0.16141681  0.21359254 -0.98862493]
[-0.06599613  0.1631272  -0.98439527] label<->ip2 [-0.08085128  0.14479022 -0.97410214]
[-0.14460173  0.2283988  -0.96276909] label<->ip2 [ 0.11083819  0.24060942 -0.99647766]
[-0.00739336  0.02487539 -0.99966323] label<->ip2 [ 0.14934002  0.14724517 -1.01201344]
[-0.10118731  0.16971911 -0.98028392] label<->ip2 [ 0.134765    0.18803424 -0.99778891]
[-0.24296962  0.17370193 -0.95435494] label<->ip2 [ 0.03142359  0.19478598 -0.99698198]
[-0.00978585  0.25987193 -0.96559352] label<->ip2 [ 0.10045359  0.21675873 -1.01401651]
[ 0.13373443  0.17797749 -0.97490466] label<->ip2 [ 0.00540466  0.20169626 -0.96952415]
[-0.06412659  0.20568931 -0.97651404] label<->ip2 [-0.00117249  0.19722903 -1.01627445]
[-0.00718827  0.27373067 -0.96177953] label<->ip2 [ 0.08323713  0.21371695 -0.99667388]
In [11]:
 
imshow(solver.net.params['conv1'][0].diff[:, 0].reshape(4, 5, 5, 5)
       .transpose(0, 2, 1, 3).reshape(4*5, 5*5), cmap='gray')
Out[11]:
<matplotlib.image.AxesImage at 0x7f80ea77b250>
In [12]:
 
figure(figsize=(10, 5))
imshow(solver.net.params['conv2'][0].diff[:, 0].reshape(5, 10, 5, 5)
       .transpose(0, 2, 1, 3).reshape(5*5, 10*5), cmap='gray')
Out[12]:
<matplotlib.image.AxesImage at 0x7f80ea71e190>
In [13]:
 
figure(figsize=(20, 10))
imshow(solver.test_nets[0].blobs['conv1'].data[:8, :].reshape(8,20,32,56)
           .transpose(0,2,1,3).reshape(8*32, 20*56), cmap='gray')
Out[13]:
<matplotlib.image.AxesImage at 0x7f80ea654090>
In [14]:
 
figure(figsize=(50, 25))
imshow(solver.test_nets[0].blobs['conv2'].data[:8, :].reshape(40, 10, 12, 24)
       .transpose(0,2,1,3).reshape(40*12, 10*24), cmap='gray')
Out[14]:
<matplotlib.image.AxesImage at 0x7f80ea43c690>
In [ ]: