python - ¿Cómo cargo un modelo Caffe y lo convierto en una matriz numpy?
neural-network deep-learning (1)
Tengo un archivo caffemodel que contiene capas que no son compatibles con la utilidad de conversión caffe-tensorflow de ethereon. Me gustaría generar una representación numpy de mi caffemodel.
Mi pregunta es, ¿cómo convierto un archivo caffemodel (también tengo el prototipo, si es útil) en un archivo numpy?
Información adicional: tengo instalado Python, Caffe con interfaces Python, etc. Claramente no tengo experiencia con el café.
Aquí hay una buena función que convierte una red de café en una lista de diccionarios de Python, para que pueda encurtirla y leerla de la forma que desee:
import caffe
def shai_net_to_py_readable(prototxt_filename, caffemodel_filename):
net = caffe.Net(prototxt_filename, caffemodel_filename, caffe.TEST) # read the net + weights
pynet_ = []
for li in xrange(len(net.layers)): # for each layer in the net
layer = {} # store layer''s information
layer[''name''] = net._layer_names[li]
# for each input to the layer (aka "bottom") store its name and shape
layer[''bottoms''] = [(net._blob_names[bi], net.blobs[net._blob_names[bi]].data.shape)
for bi in list(net._bottom_ids(li))]
# for each output of the layer (aka "top") store its name and shape
layer[''tops''] = [(net._blob_names[bi], net.blobs[net._blob_names[bi]].data.shape)
for bi in list(net._top_ids(li))]
layer[''type''] = net.layers[li].type # type of the layer
# the internal parameters of the layer. not all layers has weights.
layer[''weights''] = [net.layers[li].blobs[bi].data[...]
for bi in xrange(len(net.layers[li].blobs))]
pynet_.append(layer)
return pynet_