61 const Eigen::MatrixXf& inputs,
62 Eigen::MatrixXf& outputs,
66 auto p_op = std::dynamic_pointer_cast<deeplima::eigen_impl::Op_BiLSTM<Eigen::MatrixXf, Eigen::VectorXf, float>>(Parent::m_ops[0]);
68 p_op->precompute_inputs(Parent::m_params[0], inputs, outputs, input_size);
88 const Eigen::MatrixXf& inputs,
94 const std::vector<size_t>& lengths,
95 const std::vector<std::string>&
101 auto p_encoder = std::dynamic_pointer_cast<deeplima::eigen_impl::Op_BiLSTM<Eigen::MatrixXf, Eigen::VectorXf, float>>(Parent::m_ops[0]);
106 assert(Parent::m_wb.size() > 0);
107 assert(worker_id < Parent::m_wb[0].size());
109 auto wb = std::dynamic_pointer_cast<typename deeplima::eigen_impl::Op_BiLSTM<Eigen::MatrixXf, Eigen::VectorXf, float>::workbench_t>(Parent::m_wb[0][worker_id]);
111 auto p_decoder = std::dynamic_pointer_cast<typename deeplima::eigen_impl::Op_DeepBiaffineAttnDecoder<Eigen::MatrixXf, Eigen::VectorXf, float>>(
114 const bool predict_labels =
115 !m_deep_biaffine_attn_label_decoder.empty() && output->size() >= 2;
118 size_t start = input_begin;
119 for (
size_t i = 0; i < lengths.size(); ++i)
121 p_encoder->execute(Parent::m_wb[0][worker_id],
122 inputs, Parent::m_params[0],
123 start, start + lengths[i]);
126 Parent::m_wb[1][worker_id],
127 wb->get_last_output(),
136 const Eigen::MatrixXf& enc = wb->get_last_output();
137 const Eigen::MatrixXf sent_input = enc.block(0, 0, enc.rows(), lengths[i]);
139 sent_input, (*output)[0], start, (*output)[1]);