次のコマンドを使用して、トレーニング済みのモデルを保存しています。
net.save(model_name)
そして、次のコマンドを使用してロードします。
net.load(model_name)
しかし、モデルをロードした後、net.blobs() を使用して BLOB を印刷しようとすると、空の辞書が表示されます。モデルが正しく保存されていないか、正しくロードされていないようです。
この点で私を助けてください。前もって感謝します。
次のコマンドを使用して、トレーニング済みのモデルを保存しています。
net.save(model_name)
そして、次のコマンドを使用してロードします。
net.load(model_name)
しかし、モデルをロードした後、net.blobs() を使用して BLOB を印刷しようとすると、空の辞書が表示されます。モデルが正しく保存されていないか、正しくロードされていないようです。
この点で私を助けてください。前もって感謝します。
あなたの質問には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)
この問題の詳細を詳しく調べたところ、正しく保存してロードしていたようです。問題は、モデルをロードした後、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()