【发布时间】:2018-01-21 04:58:14
【问题描述】:
我正在尝试为 Actor-Critic 方法构建一个网络,如 here 所述。具体来说,我正在尝试将带有 ReLU 激活的最后一个全连接层连接到两个输出层,用于策略和价值函数。但是我无法从文档中了解如何使用 tiny-dnn 的图形模型来做到这一点。
(见编辑)
我尝试了什么(这是错误的):
layers::input in(size_inputs);
layers::fc h1(size_inputs, size_hidden);
layers::fc h2(size_hidden, size_hidden);
layers::fc h3(size_hidden, size_hidden);
layers::fc h4(size_hidden, size_hidden);
layers::fc out_policy(size_hidden, size_ouputs);
layers::fc out_value(size_hidden, 1);
activation::leaky_relu activation_h;
activation::softmax activation_out_policy;
layers::linear activation_out_value(1);
auto &t1 = in << h1 << activation_h;
auto &t2 = t1 << h2 << activation_h;
auto &t3 = t2 << h3 << activation_h;
auto &t4 = t3 << h4 << activation_h;
auto &t5 = t4 << (out_policy,out_value);
construct_graph(m_network, {&in}, {&out_policy, &out_value});
(在最后一次调用 out_shape()[head_index];”处出现连接函数中的“向量下标超出范围”错误)
编辑:哦,我是个白痴,但文档可以提供更完整的示例...首先,网络组件的生命周期应该与网络本身的生命周期相同 - 这并不明显。其次,这在一定程度上确实有效。它构建了一个在运行时产生两个输出的网络,但是 softmax 输出全错了——它返回负数。
auto &t1 = in << h1 << activation_h;
auto &t2 = t1 << h2 << activation_h;
auto &t3 = t2 << h3 << activation_h;
auto &t4 = t3 << h4 << activation_h;
auto &t5 = t4 << out_policy;
auto &t6 = t4 << out_value;
construct_graph(m_network, {&in}, {&out_policy, &out_value});
【问题讨论】:
标签: tiny-dnn