2017-05-13 2 views
0

Disons que j'ai un Tensor t qui a une forme {3, 4, 5}. Je voudrais trouver la valeur maximale de la première et deuxième dimensions, de sorte que le résultat de cette opération serait une matrice de forme {5, 2}.Comment puis-je obtenir les indices des valeurs maximales d'un tensorflow :: Tenseur de rang 3 en utilisant l'API C++?

Jusqu'à présent, j'ai essayé de en obtenant un Eigen::Tensor du tensorflow::Tensor et en utilisant maxCoeff dans une boucle, donc:

auto t_mapped = t.tensor<float, 3>(); 
Eigen::Matrix<float, 5, 2> maximums; 

for (int i = 0; i < 5; i++){ 
    MatrixXf::Index maxRow, maxCol; 
    t_mapped.maxCoeff(&maxRow, &maxCol); 
    maximums(i, 0) = maxRow; 
    maximums(i, 1) = maxCol; 
} 

Mais cela ne fonctionne pas parce que t.tensor<float, 3>() retourne un Eigen::TensorMap<Eigen::Tensor<float, 3, 1, long>, 16, MakePointer>, pas Eigen::Tensor. Il ne semble pas y avoir beaucoup de documentation sur la classe Eigen::TensorMap.

Comment puis-je obtenir un Eigen::Tensor sur le Eigen::TensorMap ou faire ce que j'essaie de faire avec l'API tensorflow?

Répondre

1

Pourquoi ne pas appeler tf.argmax avec axis=0?

+0

Vous ne retournez pas l'élément maximum? Pas l'indice de celui-ci? –

+1

argmax renvoie les indices, max renvoie l'élément –