libtorch 哪些函数比较常用?
如何打印模型?
// print register_module
// auto Tiny_Net = std::make_shared<VGG9>();
// print_modules(Tiny_Net)
void print_modules(const std::shared_ptr<torch::nn::Module> &module, size_t level = 0) {
auto tabs = [&](size_t num) {
for (size_t i = 0; i < num; i++) {
std::cout << "\t";
}
};
std::cout << module->name() << " (\n";
for (const auto& parameter : module->named_parameters()) {
tabs(level + 1);
std::cout << parameter.key() << '\t';
std::cout << parameter.value().sizes() << '\n';
}
tabs(level);
std::cout << ")\n";
}
//输入32x32 3通道图片
auto input = torch::rand({ 1,3,32,32 });
//输出
auto output_bilinear = torch::upsample_bilinear2d(input, { 8,8 }, false);
auto output_nearest = torch::upsample_nearest2d(input, { 5,5 });
auto output_avg = torch::adaptive_avg_pool2d(input, { 3,9 });
std::cout << output_bilinear << std::endl;
std::cout << output_nearest << std::endl;
std::cout << output_avg << std::endl;
libtorch 加载 pytorch 模块进行预测示例
void mat2tensor(const char * path, torch::Tensor &output)
{
//读取图片
cv::Mat img = cv::imread(path);
if (img.empty()) {
printf("load image failed!");
system("pause");
}
//调整大小
cv::resize(img, img, { 224,224 });
cv::cvtColor(img, img, cv::COLOR_BGR2RGB);
//浮点
img.convertTo(img, CV_32F, 1.0 / 255.0);
torch::TensorOptions option(torch::kFloat32);
auto img_tensor = torch::from_blob(img.data, { 1,img.rows,img.cols,img.channels() }, option);// opencv H x W x C torch C x H x W
img_tensor = img_tensor.permute({ 0,3,1,2 });// 调整 opencv 矩阵的维度使其和 torch 维度一致
//均值归一化
img_tensor[0][0] = img_tensor[0][0].sub_(0.485).div_(0.229);
img_tensor[0][1] = img_tensor[0][1].sub_(0.456).div_(0.224);
img_tensor[0][2] = img_tensor[0][2].sub_(0.406).div_(0.225);
output = img_tensor.clone();
}
int main()
{
torch::Tensor dog;
mat2tensor("dog.png", dog);
// Load model.
std::shared_ptr<torch::jit::script::Module> module = torch::jit::load("model.pt");
assert(module != nullptr);
std::cout << "ok\r\n" << std::endl;
// Create a vector of inputs.
std::vector<torch::jit::IValue> inputs;
torch::Tensor tensor = torch::rand({ 1, 3, 224, 224 });
inputs.push_back(dog);
// Execute the model and turn its output into a tensor.
at::Tensor output = module->forward(inputs).toTensor();
//加载标签文件
std::string label_file = "synset_words.txt";
std::fstream fs(label_file, std::ios::in);
if (!fs.is_open()) {
printf("label open failed!\r\n");
system("pause");
}
std::string line;
std::vector<std::string> labels;
while (std::getline(fs,line))
{
labels.push_back(line);
}
//排序 {1,1000} 矩阵取前10个元素(预测值),返回一个矩阵和一个矩阵的下标索引
std::tuple<torch::Tensor,torch::Tensor> result = output.topk(10, -1);
auto top_scores = std::get<0>(result).view(-1);//{1,10} 变成 {10}
auto top_idxs = std::get<1>(result).view(-1);
std::cout << top_scores << "\r\n" << top_idxs << std::endl;
//打印结果
for (int i = 0; i < 10; ++i) {
std::cout << "score: " << top_scores[i].item().toFloat() << "\t" << "label: " << labels[top_idxs[i].item().toInt()] << std::endl;
}
system("pause");
return 0;
]
torch::sort
torch::Tensor x = torch::rand({ 3,3 });
std::cout << x << std::endl;
//排序操作 true 大到小排序,false 小到大排序
auto out = x.sort(-1, true);
std::cout << std::get<0>(out) << "\r\n" << std::get<1>(out) << std::endl;
输出如下:
0.0855 0.4925 0.4323
0.8314 0.8954 0.0709
0.0996 0.3108 0.6845
[ Variable[CPUFloatType]{3,3} ]
0.4925 0.4323 0.0855
0.8954 0.8314 0.0709
0.6845 0.3108 0.0996
[ Variable[CPUFloatType]{3,3} ]
1 2 0
1 0 2
2 1 0
[ Variable[CPULongType]{3,3} ]
libtorch 哪些函数比较常用?的更多相关文章
- 总结js常用函数和常用技巧(持续更新)
学习和工作的过程中总结的干货,包括常用函数.常用js技巧.常用正则表达式.git笔记等.为刚接触前端的童鞋们提供一个简单的查询的途径,也以此来缅怀我的前端学习之路. PS:此文档,我会持续更新. Aj ...
- js常用函数和常用技巧
学习和工作的过程中总结的干货,包括常用函数.常用js技巧.常用正则表达式.git笔记等.为刚接触前端的童鞋们提供一个简单的查询的途径,也以此来缅怀我的前端学习之路. PS:此文档,我会持续更新. Aj ...
- Kotlin的高阶函数和常用高阶函数
Kotlin的高阶函数和常用高阶函数 文章来源:企鹅号 - Android先生 高阶函数的定义 将函数当做参数或者是返回值的函数 什么是高阶函数 可以看看我们常用的 函数: 首先我们可以知道, 是 的 ...
- 如果你也会C#,那不妨了解下F#(4):了解函数及常用函数
函数式编程其实就是按照数学上的函数运算思想来实现计算机上的运算.虽然我们不需要深入了解数学函数的知识,但应该清楚函数式编程的基础是来自于数学. 例如数学函数\(f(x) = x^2+x\),并没有指定 ...
- 分享一些关于PHP时间函数的常用时间
<?php // 各种时间函数 echo "现在:".date("Y-m-d H:i:s")."<br>"; echo & ...
- SendMessage函数的常用消息及其应用大全
来源:http://www.360doc.com/content/09/0814/10/19147_4907488.shtml,非常全面的解释. 文本框控件通常用于输入和编辑文字.它属于标准 Wind ...
- C# 8 函数 调用 常用类 时间 日期型
函数:能够独立完成某个功能的模块. 好处:1.结构更清析(编写.维护方便 ).2.代码重用.3.分工开发. 四要素:名称,输入(参数),输出(返回的类型),加工(函数体) 语法: 返回类型 函数名(参 ...
- 程序员需要有多懒 ?- cocos2d-x 数学函数、常用宏粗整理 - by Glede
最近我们的cocos2d-x游戏项目已经进入了正式开发的阶段了,几个dev都辛苦码代码.cocos2d-x还是一套比较方便的api的,什么action啊.director啊.ccpoint啊都蛮便捷的 ...
- 程序员需要有多懒 ?- cocos2d-x 数学函数、常用宏粗整理
原帖地址:http://www.cnblogs.com/buaashine/archive/2012/11/12/2765691.html 1.注意这是cocos2d-x中的函数,但大体上和cocos ...
随机推荐
- pycharm设置安装python第三方插件
pycharm设置安装python第三方插件 转载于:https://www.mindg.cn/?p=80 今天下了一个pycharm,设置用它来安装python插件,以下是安装步骤,与大家分享,我的 ...
- python 加密方法总结
MD5 def md5(str): import hashlib m = hashlib.md5() m.update(str) return m.hexdigest() base64 import ...
- Bootstrap学习笔记(5)--实现Bootstrap导航条可点击和鼠标悬停显示下拉菜单
实现Bootstrap导航条可点击和鼠标悬停显示下拉菜单 微笑的鱼 2014-01-03 Bootstrap 5,281 次围观 11条评论 使用Bootstrap导航条组件时,如果你的导航条带有下拉 ...
- The Tao Of Programming翻译
The Tao Of Programming里面有许多道家思想,我也喜欢道家学说, 萌生了用文言文翻译的想法,不足之处还请方家指正. 翻译后的文档放在gitcafe上了,欢迎大家fork修正.
- chrome 控制台js调试与断点调试
这篇文章是根据目前 chrome 稳定版(19.0.1084.52 m)写的,因为 google 也在不断完善chrome developer tool,所以 chrome 版本不同可能稍有差 ...
- 关于SQL高量问题
一工作今天在用DataTable.Table.Select("字段 like")查询时候老是碰到格式不正确 dtrFoundRow = dtvOOView.Table.Select ...
- 那么类 Man 可以从类 Human 派生,类 Boy 可以从类 Man 派生
若在逻辑上 B 是 A 的“一种”(a kind of ),则允许 B 继承 A 的功 能和属性. 例如男人(Man)是人(Human)的一种,男孩(Boy)是男人的一种. 那么类 Man 可以从类 ...
- 多媒体开发之分场图像和交错图像interlacing---一个破解版的迅雷云点播网站
[-] 目录 编辑描述 编辑去交错方法 编辑去交错源自电影的影像 编辑去交错交错式影像 编辑单一场去交错intra-field deinterlacing 编辑场间去交错inter-field dei ...
- 【BZOJ】1609: [Usaco2008 Feb]Eating Together麻烦的聚餐(dp+被坑)
http://www.lydsy.com/JudgeOnline/problem.php?id=1609 首先我不得不说,我被这题坑了.题目前边没有说可以不需要3种牛都有啊!!!!!!!!然后我一直在 ...
- 【BZOJ】1633: [Usaco2007 Feb]The Cow Lexicon 牛的词典(dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=1633 一开始也想到了状态f[i]表示i以后的字符串最少删的数 然后想到的转移是 f[i]=min{f ...