MyNet training

In [1]:
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image

%matplotlib inline

caffe_root = '/home/max/caffe-master/'  
home = '/home/max/myPython/my_net_sum/'

import sys
sys.path.insert(0, caffe_root + 'python')
import caffe

# run scripts from caffe root
import os
os.chdir(caffe_root)

caffe.set_mode_cpu()

#Определим модель нейронной сети
model_def = home + 'net.prototxt'

#Загрузка нейронной сети
net = caffe.Net(model_def, caffe.TEST)

#Посмотрим параметры многомерных массивов для каждого слоя сети
[(k, v.data.shape) for k, v in net.blobs.items()]
Out[1]:
[('data', (1, 1, 1, 2)),
 ('label', (1,)),
 ('label_data_1_split_0', (1,)),
 ('label_data_1_split_1', (1,)),
 ('ip0', (1, 1)),
 ('ip0_ip0_0_split_0', (1, 1)),
 ('ip0_ip0_0_split_1', (1, 1)),
 ('loss', ()),
 ('accuracy', ())]
In [2]:
#Load the solver
solver = caffe.SGDSolver(home + 'solver.prototxt')

#dir(solver)
In [3]:
#Посмотрим параметры многомерных массивов для градиентов слоев
[(k, v[0].data.shape, v[1].data.shape) for k, v in net.params.items()]
Out[3]:
[('ip0', (1, 2), (1,))]
In [4]:
#Посмотрим параметры многомерных массивов для каждого слоя сети
[(k, v.data.shape) for k, v in solver.net.blobs.items()]
Out[4]:
[('data', (1, 1, 1, 2)), ('label', (1,)), ('ip0', (1, 1)), ('loss', ())]
In [5]:
#that is a forward propagation, a backward propagation 
#and the update of the net params given the gradients 
# (update of the net.params[k][j].data)
#solver.step(1)

# net forward
#solver.net.forward() 

#solver solver
solver.solve()

# test net (there can be more than one)
#solver.test_nets[0].forward()  

#save net model
#solver.net.save(home+'mymodel2.caffemodel')
In [6]:
#solver.step(1)
#solver.net.forward() 

#print 'net.blobs label =',net.blobs['label'].data[...] 
#contains the blobs
print 'blobs data =',solver.net.blobs['data'].data[...]
print 'blobs label =',solver.net.blobs['label'].data[...] 
print 'blobs ip0 =',solver.net.blobs['ip0'].data[...]
#print 'blobs ip1 =',solver.net.blobs['ip1'].data[...]
print 'blobs loss =',solver.net.blobs['loss'].data[...]
#print 'blobs accuracy =',solver.net.blobs['accuracy'].data[...]

#contains the weight parameters
print 'params =',solver.net.params['ip0'][0].data[...] 

#contains the bias parameters
print 'params =',solver.net.params['ip0'][1].data[...] 

#the gradients (computation of the net.blobs[k].diff 
#and net.params[k][j].diff from the loss layer until input layer)
print 'diff =',solver.net.params['ip0'][0].diff
print 'diff =',solver.net.params['ip0'][1].diff
blobs data = [[[[ 0.  0.]]]]
blobs label = [ 0.]
blobs ip0 = [[ 0.00111614]]
blobs loss = 6.22886659585e-07
params = [[ 0.99945396  0.9993977 ]]
params = [ 0.00111614]
diff = [[ -1.01666865e-05  -1.06548923e-05]]
diff = [ -6.60804562e-06]
In [50]:
#train on range step
for i in range(5000):
    solver.step(1)
    
print 'blobs loss =',solver.net.blobs['loss'].data[...]
print 'params =',solver.net.params['ip0'][0].data[...]    
blobs loss = 6.2288324898e-07
params = [[ 0.99945807  0.99940234]]
In [75]:
#save net
net.save(home+'mymodel.caffemodel')
In [7]:
#Drawing net
home_img=home+'my_net.png'
model_def = home+'net.prototxt'

!/home/max/caffe-master/python/draw_net.py $model_def $home_img

im = plt.imshow(np.flipud(plt.imread(home_img)), origin='lower')
plt.show()

!shotwell $home_img
Drawing net to /home/max/myPython/my_net_sum/my_net.png

Testing MyNet

In [8]:
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image

%matplotlib inline

caffe_root = '/home/max/caffe-master/'  
home = '/home/max/myPython/my_net_sum/'

import sys
sys.path.insert(0, caffe_root + 'python')
import caffe

# run scripts from caffe root
import os
os.chdir(caffe_root)

caffe.set_mode_cpu()

#Определим модель нейронной сети
model_def2 = home + 'net2.prototxt'

#load the model
net = caffe.Net(model_def2, home+'mymodel.caffemodel', caffe.TEST)
In [9]:
#contains the blobs
print 'blobs data =',net.blobs['data'].data[...]
print 'blobs ip0 =',net.blobs['ip0'].data[...]


#contains the weight parameters
print 'params =',net.params['ip0'][0].data[...] 

#contains the bias parameters
print 'params =',net.params['ip0'][1].data[...]
blobs data = [[[[ 0.  0.]]]]
blobs ip0 = [[ 0.]]
params = [[ 1.  1.]]
params = [ 0.]
In [10]:
#input data
l0 = input ("l0=")
l1 = input ("l1=")

#Установка data blob
net.blobs['data'].data[...] = [[[[ l0,l1]]]]

#compute
out = net.forward()

print 'blobs data =',net.blobs['data'].data[...]

#predicted predicted class
print 'ip0 = ',out['ip0']
#print 'accuracy = ',out['accuracy'].argmax()
l0=3
l1=9
blobs data = [[[[ 3.  9.]]]]
ip0 =  [[ 12.]]
In [ ]: