4

次のコマンドを使用して、トレーニング済みのモデルを保存しています。

net.save(model_name)

そして、次のコマンドを使用してロードします。

net.load(model_name)

しかし、モデルをロードした後、net.blobs() を使用して BLOB を印刷しようとすると、空の辞書が表示されます。モデルが正しく保存されていないか、正しくロードされていないようです。

この点で私を助けてください。前もって感謝します。

4

2 に答える 2

2

あなたの質問には2つの要素があります。

保存:

モデルをロードするには、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)
于 2016-06-02T21:37:57.250 に答える
0

この問題の詳細を詳しく調べたところ、正しく保存してロードしていたようです。問題は、モデルをロードした後、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()
于 2016-06-06T07:05:16.437 に答える