【问题标题】:tensorflow Invalid argument: In[0] is not a matrixtensorflow 参数无效:In[0] 不是矩阵
【发布时间】:2017-04-14 14:09:27
【问题描述】:

我是 tensorflow C++ API 的新手,正在努力寻找文档 在线的。这个短代码执行两个向量的内积 W 和 x1,编译正常但有运行时错误, 我复制代码和错误 在这里记录。非常感谢您的帮助

#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<float,1>();
  auto x1_map = x1.tensor<float,1>();

  for(int i=0;i<L;++i) { 
    W_map(i)  = -1; 
    x1_map(i) =  1;  
  }
  std::cout<<"W  \n"<<W .flat<float>()<<"\n debug "<<W .DebugString()<<std::endl;
  std::cout<<"x1 \n"<<x1.flat<float>()<<"\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<Tensor> o1; 

  TF_CHECK_OK(session.Run({v1}, &o1));
}

===========================

hweekuans-MacBook-Pro:linear_model hweekuan$ ./linear

W  
-1
-1
 debug Tensor<type: float shape: [2] values: -1 -1>

x1 
1
1
 debug Tensor<type: float shape: [2] values: 1 1>

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 matrix
     [[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

【问题讨论】:

    标签: c++ tensorflow


    【解决方案1】:

    错误消息给出了问题的线索:Wx1 都不是二维矩阵——事实上,它们都是一维向量——并且tensorflow::ops::MatMul() 操作要求它的两个参数至少是二维的。它不会自动将向量转换为其矩阵表示,您必须手动执行此操作。

    要解决此问题,请在构造 W 时指定 TensorShape({1, 2}),在构造 x1 时指定 TensorShape({2, 1})。对于这些形状,您不应设置 MatMul::TransposeA(false)MatMul::TransposeB(false),或者您可以省略这些选项,因为它们是默认值。

    【讨论】:

    • 非常感谢。你让我意识到向量在 tensorflow 的实现中不是 2x1 矩阵。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    • 1970-01-01
    • 2020-09-11
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多