Je suis novice dans l’API tensorflow C ++ et j’ai du mal à trouver de la documentation en ligne. ce code court effectue le produit interne de deux vecteurs W et x1, la compilation est bonne mais il y a des erreurs d’exécution, je copie le code et les journaux des erreurs ici Merci beaucoup pour l’aide
#include "tensorflow/cc/client/client_session.h" #include "tensorflow/cc/ops/standard_ops.h" #include "tensorflow/core/framework/tensor.h" int main() { using namespace tensorflow; using namespace tensorflow::ops; Tensor W (DT_FLOAT,TensorShape({2})); Tensor x1(DT_FLOAT,TensorShape({2})); auto W_map = W .tensor(); auto x1_map = x1.tensor(); for(int i=0;i<L;++i) { W_map(i) = -1; x1_map(i) = 1; } std::cout<<"W \n"<<W .flat()<<"\n debug "<<W .DebugString()<<std::endl; std::cout<<"x1 \n"<<x1.flat()<<"\n debug "<<x1.DebugString()<<std::endl; Scope root = Scope::NewRootScope(); ClientSession session(root); // either line of code gives similar run time error // auto v1 = MatMul(root.WithOpName("v1"), W, x1, MatMul::TransposeA(true)); auto v1 = MatMul(root.WithOpName("v1"), W, x1, MatMul::TransposeB(true)); std::vector o1; TF_CHECK_OK(session.Run({v1}, &o1)); } =========================== hweekuans-MacBook-Pro:linear_model hweekuan$ ./linear W -1 -1 debug Tensor x1 1 1 debug Tensor F tensorflow/cc/20170412/linear_model/linear.cc:37] Check failed: ::tensorflow::Status::OK() == (session.Run({v1}, &o1)) (OK vs. Invalid argument: In[0] is not a masortingx [[Node: v1 = MatMul[T=DT_FLOAT, transpose_a=false, transpose_b=true, _device="/job:localhost/replica:0/task:0/cpu:0"](Const/Const, Const_1/Const)]]) Abort trap: 6
Le message d’erreur donne une idée du problème: ni W
ni x1
sont des masortingces 2D, en fait, les deux sont des vecteurs tensorflow::ops::MatMul()
et tensorflow::ops::MatMul()
op requirejs que ses deux arguments soient au moins 2 dimensions. Il ne convertit pas automatiquement les vecteurs en représentation masortingcielle, et vous devez le faire manuellement.
Pour résoudre le problème, spécifiez TensorShape({1, 2})
lorsque vous construisez W
et TensorShape({2, 1})
lorsque vous construisez x1
. Avec ces formes, vous ne devez pas définir MatMul::TransposeA(false)
et MatMul::TransposeB(false)
, ou vous pouvez omettre ces options car elles sont les valeurs par défaut.