Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在tensorflow C api中创建字符串类型的张量?_C_Tensorflow - Fatal编程技术网

如何在tensorflow C api中创建字符串类型的张量?

如何在tensorflow C api中创建字符串类型的张量?,c,tensorflow,C,Tensorflow,参数列表中下面的数据应该是什么 TF_Tensor* tensorStr = TF_NewTensor(TF_STRING, nullptr, 0, &data[0], 8, no_op, nullptr); 我试过: char * data = "blah"; char* data[] = {"blah"}; char data[1][4] = {{'b','l','a','h'}}; 全是运气。当馈入输入时。我总是得到: Malformed TF_STRING tensor; e

参数列表中下面的
数据应该是什么

TF_Tensor* tensorStr = TF_NewTensor(TF_STRING, nullptr, 0, &data[0], 8, no_op, nullptr);
我试过:

char * data = "blah";
char* data[] = {"blah"};
char data[1][4] = {{'b','l','a','h'}};
全是运气。当馈入输入时。我总是得到:

Malformed TF_STRING tensor; element 0 out of range

除非张量是标量(只包含一个数字),否则需要传入维度信息。您正在为当前代码中的DIM传递null ptr和zero,这就是它引发错误的原因。您可以在此处看到如何为字符串调用TF_NewTensor的示例: 创建字符串张量的有效(但有点难看)代码示例:

std::string input_str = "abracdabra";  // any input string
size_t encoded_size = TF_StringEncodedSize(input_str.size());
size_t total_size = 8 + encoded_size;  // 8 extra bytes - for start_offset 
char *input_encoded = (char*)malloc(total_size);
for (int i =0; i < 8; ++i) {  // fills start_offset
    input_encoded[i] = 0;
}
TF_StringEncode(input_str.c_str(), input_str.size(), input_encoded+8, encoded_size, status); // fills the rest of tensor data
if (TF_GetCode(status) != TF_OK){
    fprintf(stderr, "ERROR: something wrong with encoding: %s", TF_Message(status));
    return 1;
}
TF_Tensor* input = TF_NewTensor(TF_STRING, NULL, 0, input_encoded, total_size, &Deallocator, 0);
std::字符串输入任何输入字符串
size_t encoded_size=TF_StringEncodedSize(输入字符串size());
大小\u t总大小=8+编码大小;//8个额外字节-用于起始偏移量
字符*输入编码=(字符*)malloc(总大小);
对于(int i=0;i<8;++i){//填充起始偏移量
输入_编码的[i]=0;
}
TF_StringEncode(input_str.c_str(),input_str.size(),input_encoded+8,encoded_size,status);//填充其余的张量数据
如果(TF_GetCode(状态)!=TF_OK){
fprintf(stderr,“错误:编码错误:%s”,TF_消息(状态));
返回1;
}
TF_张量*input=TF_新传感器(TF_字符串,NULL,0,输入编码,总大小,&Deallocator,0);
工作原理:根据这个链接,弦张量的数据由两部分组成。最后一个是通过TF_StringEncode函数编码的输入字符串。第一个是数组“start_offset”,我不完全理解它的作用,但看起来八个零就可以了)


另一个创建张量的例子可以在C API测试中找到:

但是如果字符串不是标量,那么它的维数是多少仍然会得到相同的错误。具有
int64_t dims[]={4}我得到:格式错误的TF_字符串张量;太短,无法容纳元素数。这是一个非常有用的示例。但是这个例子似乎只考虑了单个字符串的情况,如何创建一个包含字符串列表的张量,比如['ab','abc','cc']?