c++和java 创建tensor的情况

87 篇文章 1 订阅
25 篇文章 0 订阅

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);

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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值