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);
总的来说就这里有点不同。。