c++和java 创建tensor的情况

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/luoyexuge/article/details/81871866

c++和java针对tensorflow中的基本类型Tensor创建可谓有很大不同,最近在搞c++得tensorflow接口,总的来说c++中创建 Tensor目前要依赖于vector,目前总结有两种方式,第一种直接用std::initializer_list 具体做法如下:

std::initializer_list<float> v_a={1.0,1.0,1.0,1.0,1.0};
Tensor tensor_in_a(DT_FLOAT, TensorShape({1,5}));
tensor_in_a.matrix<float>().setValues({v_a});
std::vector<std::pair<string, tensorflow::Tensor>> inputs ={{ "inputs", tensor_in_a}}

还有一种是用vector做法如下:

vector<int> vec={7997, 1945, 8471, 14127, 17565, 7340, 20224, 17529, 3796, 16033, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int ndim=vec.size();
Tensor x(tensorflow::DT_INT32, tensorflow::TensorShape({1, ndim})); // New Tensor shape [1, ndim]
auto x_map = x.tensor<int, 2>();
for (int j = 0; j < ndim; j++) {
        x_map(0, j) = vec[j];
    }
std::vector<std::pair<string, tensorflow::Tensor>> inputs;
inputs.push_back(std::pair<std::string, tensorflow::Tensor>("input_x", x));

创建一个dropout的tensor:

Tensor keep_prob(tensorflow::DT_FLOAT, tensorflow::TensorShape({1}));
    keep_prob.vec<float>()(0) = 1.0f;

    inputs.push_back(std::pair<std::string, tensorflow::Tensor>("keep_prob", keep_prob));

c++的一些细节就到这里

java这个东西就更简单,直接用数组:

for (int i = 0; i < text.length; i++) {
			arr[0][i] = ner.mapsource.getOrDefault(text[i], 1);
		}

		Tensor input = Tensor.create(arr);

总的来说就这里有点不同。。

猜你喜欢

转载自blog.csdn.net/luoyexuge/article/details/81871866