Развертывание caffe rnns

Я пытаюсь развернуть модель кафе, содержащую слой RNN. Проблема, с которой я столкнулся, заключается в том, как вычислить выход из сети. Я предполагал, что могу вызвать

net->Forward();

обновить сеть, а затем

net->output_blobs()[0]->mutable_cpu_data()[x];

один раз на каждом временном шаге для чтения вывода. Однако использование постоянного входа и последующий запуск "net-Forward()" несколько раз не влияет на результат, как можно было бы ожидать. Я пробовал использовать разные веса / смещения, что меняет вывод, но независимо от того, какую конфигурацию я использую, вывод все равно будет статическим. Кто-нибудь знает, какова правильная процедура развертывания caffe RNN с C++?

Редактировать:

Это было протестировано с одним нейронным слоем RNN, как показано ниже.

model.prototxt:

layer {
    name: "input"
    type: "Input"
    top: "states"
    input_param {
        shape: {
            dim: 1
            dim: 1
        }
    }
}

input: "clip"
input_shape { dim: 1 dim: 1 dim: 1}

layer {
    name: "rnn"
    type: "RNN"
    top: "rnn"
    bottom: "clip"
    bottom: "states"
    recurrent_param {
        num_output: 1
    }
}

И .cpp:

caffe::Blob<float>* input_layer = test_net->input_blobs()[0];
float* input_data;
input_data = input_layer->mutable_cpu_data();

input_data[0] = 1.0;
for (int i=0; i<5; i++)
{
    test_net->Forward();
    cout << "Ouput: " << net->output_blobs().back()->mutable_cpu_data()[0] << endl;
}

Для этого может потребоваться немного больше кода.

MSalters 11.04.2018 13:49
2
1
156
0

Другие вопросы по теме