在 C++ 中调用 keras | iqhy's Blog
Opened this issue · 9 comments
https://iqhy.github.io/posts/2020/0228155601/
Python 的代码优雅而实用,但是经常会遇到性能问题,这时可以使用 C/C++ 重写几个函数来解决,这样就同时兼顾了开发效率和性能。
如果想将predict的input设置成一个二维或者三维矩阵,例如{{1,2}, {3,4}}, 应该如何操作呢?感谢解答!
@lingxiaw
如果想将predict的input设置成一个二维或者三维矩阵,例如{{1,2}, {3,4}}, 应该如何操作呢?感谢解答!
可以参考我写的第一个常见问题
先用fdeep::tensor
声明一个tensor
,如
// tensor的形状参数在fdeep::tensor_shape()中,0是初始化的值
fdeep::tensor t(fdeep::tensor_shape(3, 8, 3), 0);
然后最简单的方法是使用下面的语句给每个位置赋值 (这里也有其他赋值方法FAQ)
t.set(fdeep::internal::tensor_pos(0, 1, 2), 1);
t.set(fdeep::internal::tensor_pos(0, 1, 1), 2);
t.set(fdeep::internal::tensor_pos(0, 1, 0), 3);
然后使用model.predict()
即可
fdeep::tensors result = model.predict(t);
了解,感谢解答!
@iqhy
@lingxiaw
如果想将predict的input设置成一个二维或者三维矩阵,例如{{1,2}, {3,4}}, 应该如何操作呢?感谢解答!可以参考我写的第一个常见问题
先用
fdeep::tensor
声明一个tensor
,如// tensor的形状参数在fdeep::tensor_shape()中,0是初始化的值 fdeep::tensor t(fdeep::tensor_shape(3, 8, 3), 0);然后最简单的方法是使用下面的语句给每个位置赋值 (这里也有其他赋值方法FAQ)
t.set(fdeep::internal::tensor_pos(0, 1, 2), 1); t.set(fdeep::internal::tensor_pos(0, 1, 1), 2); t.set(fdeep::internal::tensor_pos(0, 1, 0), 3);然后使用
model.predict()
即可fdeep::tensors result = model.predict(t);
还有一个问题:在得到result之后,如何将其转化成为double型的参数呢?
我了解到对于fdeep::tensor型的tensor可以用tensor.to_vector来解决问题,但是对于fdeep::tensors型的没有to_vetcor这个函数。
感谢解答!
@lingxiaw
还有一个问题:在得到result之后,如何将其转化成为double型的参数呢?
我了解到对于fdeep::tensor型的tensor可以用tensor.to_vector来解决问题,但是对于fdeep::tensors型的没有to_vetcor这个函数。
感谢解答!
fdeep::tensors
实际上是 std::vector<tensor>
的别名
如果你的模型只输出一个 tensor,那么可以使用
const auto result_vec = result.front().to_vector();
了解,感谢解答!
请问您如何得知 'result.front()' 中'front()' 的用法?有时候我也想知道具体函数的用法,但是看官方信息上好像没有很多具体函数用法的信息。
这个工具仅支持tf2,但是 import tf.keras接口比tf1的import keras 慢10倍怎么办,直接c++训练更合适吗
@chocolate-byte
这个工具仅支持tf2,但是 import tf.keras接口比tf1的import keras 慢10倍怎么办,直接c++训练更合适吗
我当时使用的时候没有遇到性能问题,所以没有研究你说的这个问题。另外,这个工具不支持在 C++ 中训练,需要 Python 训练好后导入 C++ 调用。