我正在使用以下命令保存训练有素的模型:
net.save(model_name)
然后使用以下命令加载它:
net.load(model_name)
但是在加载模型后,当我尝试使用 net.blobs() 打印 blob 时,它给了我一个空字典。看起来该模型未正确保存或未正确加载。
请在这方面帮助我。提前致谢。
我正在使用以下命令保存训练有素的模型:
net.save(model_name)
然后使用以下命令加载它:
net.load(model_name)
但是在加载模型后,当我尝试使用 net.blobs() 打印 blob 时,它给了我一个空字典。看起来该模型未正确保存或未正确加载。
请在这方面帮助我。提前致谢。
你的问题有两个要素。
保存:
为了加载模型,您必须以HDF5
格式保存它。这可以使用SnapshotLogger
如下所示的类来完成:
from apollocaffe.loggers import SnapshotLogger
SnapshotLogger(snapshot_interval, snapshot_prefix='PATH_TO_YOUR_MODEL',
log_file="PATH_TO_log.txt")
加载:
Loading
保存的模型可以如图所示完成:
net = apollocaffe.ApolloNet()
model_path = "../model_name.h5"
net.load(model_path)
我更多地研究了这个问题的细节,看起来我正在正确地保存加载它。问题是加载模型后 net.blob 将没有任何价值。但是,如果您将加载的模型与任何测试示例一起使用,它就可以正常工作(如预期的那样)。我附上了一个示例代码,灵感来自https://github.com/Russell91/apollocaffe/blob/master/examples/apollocaffe/simple.py在这里可以正常工作:
import apollocaffe
from apollocaffe.layers import NumpyData, Convolution, EuclideanLoss
import numpy as np
def save():
net = apollocaffe.ApolloNet()
for i in range(1000):
example = np.array(np.random.random()).reshape((1, 1, 1, 1))
net.clear_forward()
net.f(NumpyData('data', example))
net.f(NumpyData('label', example*3))
net.f(Convolution('conv', (1,1), 1, bottoms=['data']))
net.f(EuclideanLoss('loss', bottoms=['conv', 'label']))
net.backward()
net.update(lr=0.1)
if i % 100 == 0:
print net.loss
net.save("model.h5")
def load():
print "LOAD"
net = apollocaffe.ApolloNet()
net.load("model.h5")
#example = np.array(np.random.random()).reshape((1, 1, 1, 1))
example = np.asarray([[[[ 0.92890837]]]])
net.clear_forward()
net.f(NumpyData('data', example))
net.f(NumpyData('label', example*3))
net.f(Convolution('conv', (1,1), 1, bottoms=['data']))
net.f(EuclideanLoss('loss', bottoms=['conv', 'label']))
net.backward()
net.update(lr=0.1)
print net.loss
save()
load()