Как записать сеть caffe в prototxt на C ++ с помощью google protobuf - PullRequest
0 голосов
/ 23 октября 2018

Я использую protobuf и caffe.Я хочу создать сеть, используя caffe API в C ++, а затем записать это в файл protobuf.

name: "AlexNet" input: "data" input_shape {dim: 1 dim: 3 dim: 227 dim: 227}

У меня есть программа на C ++, которая создает объект NetParameterparam.Мой вопрос в том, какую функцию я должен вызвать, чтобы записать это в файл prototxt.

Я думаю, что я должен использовать WriteProtoToTextFile(const Message& proto, const char* filename), расположенный здесь в src / caffe / util / io.cpp:

#include <fcntl.h>
#include <google/protobuf/io/coded_stream.h>
#include <google/protobuf/io/zero_copy_stream_impl.h>
#include <google/protobuf/text_format.h>
#include <stdint.h>
#include <algorithm>
#include <fstream> // NOLINT(readability/streams)
#include <string>
#include <vector>
#include <string>
#include "caffe.pb.h"
#include <iostream>
#include <caffe/caffe.hpp>

using namespace std;
using google::protobuf::Message;
using google::protobuf::io::CodedInputStream;
using google::protobuf::io::CodedOutputStream;
using google::protobuf::io::FileInputStream;
using google::protobuf::io::FileOutputStream;
using google::protobuf::io::ZeroCopyInputStream;
using google::protobuf::io::ZeroCopyOutputStream;

int main()
{
    caffe::NetParameter param;

    const char *filename = "/test.prototxt";

    int fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0644);
    if (fd == -1)
        cout << "File not found: " << filename;

    FileOutputStream *output = new FileOutputStream(fd);

    param.set_name("AlexNet");

    //How to convert param to a proto message 

    // Call WriteProtoToTextFile(const Message& proto, const char* filename) ??

    delete outputput;

    close(fd);
    return 0;
}

Это правильно?Эта функция принимает прототип сообщения в качестве первого аргумента.Как мне преобразовать объект param в прототип сообщения?

1 Ответ

0 голосов
/ 23 октября 2018

После того как вы создали NetParameter, вы можете записать его в прототекст с помощью:

caffe::NetParameter param;

// ... param initialization ...

std::ofstream ofs; 
ofs.open ("test.prototxt", std::ofstream::out | std::ofstream::app);
ofs << param.Utf8DebugString(); 
ofs.close();
...