保存 - 加载阿波罗卡夫模型的问题



我正在使用以下命令保存我训练好的模型:

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.blobs将没有任何值。但是,如果将加载的模型与任何测试示例一起使用,则它可以正常工作(如预期的那样)。我附上了一个示例代码,灵感来自这里的 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()

最新更新