import osos.chdir('/home/renwh/gaze/renwh/caffe_with_cudnnv3/')import syssys.path.insert(0,'./python')import caffefrom pylab import *%matplotlib inlinecaffe.set_device(0)caffe.set_mode_gpu()solver = caffe.SGDSolver('examples/mymodel/00/lenet_solver.prototxt')# each output is (batch size, feature dim, spatial dim)[(k, v.data.shape) for k, v in solver.net.blobs.items()]# just print the weight sizes (not biases)[(k, v[0].data.shape) for k, v in solver.net.params.items()]solver.net.forward() # train netsolver.test_nets[0].forward() # test net (there can be more than one)# we use a little trick to tile the first eight imagesimshow(solver.net.blobs['data'].data[:8, 0].transpose(1, 0, 2).reshape(36, 8*60), cmap='gray')print solver.net.blobs['label'].data[:8]solver.step(1)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')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.
%%timeniter = 500test_interval = 25# losses will also be stored in the logtrain_loss = zeros(niter)#test_acc = zeros(int(np.ceil(niter / test_interval)))output = zeros((niter, 8, 3))# the main solver loopfor 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.)_, ax1 = subplots()ax1.plot(arange(niter), train_loss)ax1.set_xlabel('iteration')ax1.set_ylabel('train loss')**show you the train loss curve.**show you the train loss curve.
num_test = 20figure(figsize=(10, 5))imshow(solver.test_nets[0].blobs['data'].data[:num_test, 0].transpose(1, 0, 2).reshape(36, num_test*60), cmap='gray') # print the label and train resultfor i in range(num_test): print solver.test_nets[0].blobs['label'].data[i,:3] ,'label<->ip2', solver.test_nets[0].blobs['ip2'].data[i]# caculate the square error for each gaze vectorsub_error = zeros((num_test, 3))square_error = zeros((num_test, 3))sum_square_error = zeros(num_test)for i in range(num_test): sub_error[i,:] = np.subtract(solver.test_nets[0].blobs['label'].data[i,:3], solver.test_nets[0].blobs['ip2'].data[i]) square_error = np.square(sub_error) sum_square_error = np.sum(square_error,1) #print sub_error[i,:],square_error[i,:],sum_square_error[i] print sum_square_error[i],_, ax1 = subplots()ax1.plot(arange(num_test), sum_square_error,'bo', label='sampled')ax1.set_xlabel('num_test')ax1.set_ylabel('sum_square_error')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')x
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')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')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')