深度學習-Caffe模型解析(不需要prototxt)和可視化

在模型訓練中,有時候需要把模型的權重可視化出來,檢查模型權重是否有問題。caffe模型中可視化往往需要一個prototxt文件,不是很方便,因此需要可以直接利用model解析的方法。
一、利用model和prototxt可視化

import caffe
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

deploy = 'pose_deploy.prototxt'
model = 'pose_iter_440000.caffemodel'
net = caffe.Net(deploy, model, caffe.TEST)

def show_para(data):
    data = (data-data.min())/(data.max()-data.min())
    n = int(np.ceil(np.sqrt(data.shape[0])))
    padding = (((0, n**2-data.shape[0]),(0,1),(0,1))+((0,0),)*(data.ndim-3))
    data = np.pad(data,padding, mode='constant', constant_values=1)
    data = data.reshape((n,n)+data.shape[1:]).transpose((0,2,1,3)+tuple(range(4,data.ndim+1)))
    data = data.reshape((n*data.shape[1], n*data.shape[3]) + data.shape[4:])
    plt.imshow(data)
    plt.axis('off')
    plt.show()

layer_analyse = ["conv4_2"]
threshold = 0.01
for i, layer in enumerate(net.params):
    #print layer
    if layer not in layer_analyse:
        continue
    data = net.params[layer][0].data
    show_para(data[0])
    print net.params[layer][0].data.shape

二、只利用model可視化

import caffe.proto.caffe_pb2 as caffe_pb2
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

model_name = 'pose_iter_440000.caffemodel'
model = caffe_pb2.NetParameter()
f = open(model_name, 'rb')
model.ParseFromString(f.read())
f.close()

def show_para(data):
    data = (data-data.min())/(data.max()-data.min())
    n = int(np.ceil(np.sqrt(data.shape[0])))
    padding = (((0, n**2-data.shape[0]),(0,1),(0,1))+((0,0),)*(data.ndim-3))
    data = np.pad(data,padding, mode='constant', constant_values=1)
    data = data.reshape((n,n)+data.shape[1:]).transpose((0,2,1,3)+tuple(range(4,data.ndim+1)))
    data = data.reshape((n*data.shape[1], n*data.shape[3]) + data.shape[4:])
    plt.imshow(data)
    plt.axis('off')
    plt.show()

layers = model.layer
layer_analyse = ["conv4_2"]
threshold = 0.01
for i, layer in enumerate(layers):
    #print layer
    layer_name = layer.name
    if layer_name not in layer_analyse:
        continue
    data = np.array(layer.blobs[0].data)
    data = data.reshape((512,512,3,-1))
    #print data
    show_para(data[0])
    print data.shape

三、結果
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章