diff --git a/decoder/src/Decoder.cpp b/decoder/src/Decoder.cpp index 22f9689ccb23687aec0ba4b21184c1fc61622404..7739b1de6096be6fedb313b8d81ed974ee493e99 100644 --- a/decoder/src/Decoder.cpp +++ b/decoder/src/Decoder.cpp @@ -43,7 +43,7 @@ void Decoder::decode(BaseConfig & baseConfig, std::size_t beamSize, float beamTh if (machine.getTransitionSet(baseConfig.getState()).getTransition("EOS b.0") and baseConfig.getLastNotEmptyHypConst(Config::EOSColName, baseConfig.getWordIndex()) != Config::EOSSymbol1) { - machine.getTransitionSet(baseConfig.getState()).getTransition("EOS b.0")->apply(baseConfig, 0.0); + machine.getTransitionSet(baseConfig.getState()).getTransition("EOS b.0")->apply(baseConfig); if (debug) { fmt::print(stderr, "Forcing EOS transition\n"); diff --git a/torch_modules/src/NeuralNetwork.cpp b/torch_modules/src/NeuralNetwork.cpp index dbab2ebdb9a8e38ccd0cd660e2b5a56a10c3b829..acc5ad557f4ea0d4b8ccb878cf0ba77aecea47ed 100644 --- a/torch_modules/src/NeuralNetwork.cpp +++ b/torch_modules/src/NeuralNetwork.cpp @@ -4,13 +4,10 @@ torch::Device NeuralNetworkImpl::device(torch::cuda::is_available() ? torch::kCU float NeuralNetworkImpl::entropy(torch::Tensor probabilities) { - float res = 0.0; - for (unsigned int i = 0; i < probabilities.size(0); i++) - { - float val = probabilities[i].item<float>(); - res -= val * log(val); - } + if (probabilities.dim() != 1) + util::myThrow("Invalid probabilities tensor"); - return res; + probabilities = probabilities.unsqueeze(0); + return - torch::tensordot(probabilities, torch::log(torch::transpose(probabilities, 0, 1)), {0,1}, {0,1}).item<float>(); }