私はCaffeをPythonで使っていますが、今はC++を使って自分自身を習得しようとしています。C++での予測のためのCaffeモデルの読み込み方法
私がやったことは、機能を計算しHDF5レイヤーをロードすることで、Caffe FCレイヤーを探索しようとしたことです。私はモデルを訓練してきたし、それが次のコードを使用してのpythonと非常によく動作します:
caffe.set_device(0)
caffe.set_mode_gpu()
net = caffe.Net(proto_file, caffe_model, caffe.TEST)
feats, labels = get_features('test/test.txt') #AlexNet features
for feature, label in zip(feats, labels):
net.blobs['data'].data[...] = feature
output = net.forward()
output_prob = output['loss'][0]
print output_prob.argmax(), ", ", label
私は確認することができ、このPythonコードを使用すると、それは非常によく動作します。
私は同じ予測を行うためにC++でコードを書こうとしています。このライン
net.blobs['data'].data[...] = feature
は少しトリッキーだと私はC++で同じことを行うことはできません:どのように私はC++でデータ層に機能を読み込むことができます。
私のC++のコード今のところです:
caffe::Caffe::SetDevice(0);
caffe::Caffe::set_mode(caffe::Caffe::GPU);
boost::shared_ptr<caffe::Net<float> > net_;
net_.reset(new caffe::Net<float>(model_file, caffe::TEST));
net_->CopyTrainedLayersFrom(trained_file);
std::cout << "LOADED CAFFE MODEL\n";
LOG(INFO) << "Blob size: "<< net_->input_blobs().size();
This caffe exampleは便利ですが、イメージをロードしてチャネルを分割します。私の場合、私はPythonコードのように直接ロードしたいAlexNetの4096-Dの特徴ベクトルを持っています。