Skip to content
Snippets Groups Projects
Commit 5888ee1f authored by Franck Dary's avatar Franck Dary
Browse files

Using torch functions to compute entropy

parent 4cb5c474
Branches
No related tags found
No related merge requests found
......@@ -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");
......
......@@ -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>();
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment