pub fn policy_extraction_net<'a, T : Borrow<Path<'a>>>(params : &Params, vs : T) -> TriConcatThenSequential {
    let vs = vs.borrow();
    let mut net = tri_concat_then_seq();
    let three_feat_dim = 3 * params.num_feat_maps;
    for i in 0..params.num_policy_extraction_layers {
        net = net.add(linear_residual(vs / format!("layer_{}", i), three_feat_dim));
    }

    //Softmax is translation-invariant, so we don't need bias here
    let output_config = LinearConfig {
        ws_init : Init::KaimingUniform,
        bs_init : Option::None,
        bias : false
    };

    net = net.add(linear(vs / "final_linear", three_feat_dim as i64, 1 as i64, 
                  output_config));
    net
}
///Module that takes thre num_feat_maps-sized inputs,
///the first for the "left" element's track, the second for the "right" element's track,
///and the third for the global track, and yields a probability value of dimension 1 which
///will be a logit for that particular pairing
Module that takes thre num_feat_maps-sized inputs,
the first for the "left" element's track, the second for the "right" element's track,
and the third for the global track, and yields a probability value of dimension 1 which
will be a logit for that particular pairing
Module that takes thre num_feat_maps - sized inputs the first for the " left " element ' s track the second for the " right " element ' s track and the third for the global track and yields a probability value of dimension 1 which will be a logit for that particular pairing
pub fn policy_extraction_net<'a, T : Borrow<Path<'a>>>(params : &Params, vs : T) -> TriConcatThenSequential {
    let vs = vs.borrow();
    let mut net = tri_concat_then_seq();
    let three_feat_dim = 3 * params.num_feat_maps;
    for i in 0..params.num_policy_extraction_layers {
        net = net.add(linear_residual(vs / format!("layer_{}", i), three_feat_dim));
    }
    //Softmax is translation-invariant, so we don't need bias here
    let output_config = LinearConfig {
        ws_init : Init::KaimingUniform,
        bs_init : Option::None,
        bias : false
    };
    net = net.add(linear(vs / "final_linear", three_feat_dim as i64, 1 as i64, 
                  output_config));
    net
}
pub fn policy_extraction_net < ' a , T : Borrow < Path < ' a > > > ( params : & Params , vs : T ) -> TriConcatThenSequential { let vs = vs . borrow ( ) ; let mut net = tri_concat_then_seq ( ) ; let three_feat_dim = 3 * params . num_feat_maps ; for i in 0 .. params . num_policy_extraction_layers { net = net . add ( linear_residual ( vs / format ! ( " " i ) , three_feat_dim ) ) ; } //Softmax is translation-invariant, so we don't need bias here let output_config = LinearConfig { ws_init : Init :: KaimingUniform , bs_init : Option :: None , bias : false } ; net = net . add ( linear ( vs / " " , three_feat_dim as i64 , 1 as i64 , output_config ) ) ; net }
Module that takes thre num_feat_maps-sized inputs,
the first for the "left" element's track, the second for the "right" element's track,
and the third for the global track, and yields a probability value of dimension 1 which
will be a logit for that particular pairing
Module that takes thre num_feat_maps - sized inputs the first for the " left " element ' s track the second for the " right " element ' s track and the third for the global track and yields a probability value of dimension 1 which will be a logit for that particular pairing
params
&Params
vs
T
params
&Params
vs
T