| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> Image数据数值计算处理的一个小问题 -> 正文阅读 |
|
[人工智能]Image数据数值计算处理的一个小问题 |
目录 1. 前言????????今天在做图像分类实验的手撕代码实验中碰到了一个非常无厘头的问题,折腾了两个小时,最后搞明白了错在哪儿了后,心中一万头草泥马奔腾而过。。。感觉自己就是一个智障。。。 ????????记录于此,给自己提个醒。 ????????背景是做一个图像分类器(Image classification)的代码实验,作为对比,先实现一个最naive的kNN分类器。在kNN分类器中需要求两个图像之间的距离,这里采用欧几里得距离。即各像素值的差的平方和的开方: ???????????????? 2. 原始问题? ? ? ? 以下代码中首先用加载cifar10数据集。然后将每个图像的数据由3维张量变为1维向量数据。然后取第一张图片计算两者之间的欧几里得距离。 ? ? ? ? 顺便作为numpy的一个练习,采用几种不同的方法进行计算作为对比(应该庆幸做了这样一件多余的事。不做这个对比的话,就意识不到这个错误)。
? ? ? ? 结果如下:? a = [59 62 63 43 46 45 50 48 43 68] b = [158 112 49 159 111 47 165 116 51 166] d = [ 99 50 242 116 65 2 115 68 8 98] 340.68607250664064 9.95 9.95 33.51119216023208 33.51119216023208 ? ? ? ? 咦,为什么结果不一致,竟然出来了三种结果???!!! ? ? ? ? 读者朋友们不妨自己想一想问题出在哪儿,然后再往下看^-^ 3. 调试1? ? ? ? 生成了一些随机数来测试这几种方法的一致性。
?????????运行结果如下: [[-1.63494836 -1.41606636 -1.31414425 -2.05088151 1.32989198 -1.66553675 0.95680131 -0.98757441 -3.46276187 -1.07665464]] 5.4949697401612125 5.4949697401612125 5.4949697401612125 5.4949697401612125 ? ? ? ? 没毛病,几种方法的结果是一致的。 4. 调试2? ? ? ? 把上面图像数据直接进行赋给两个变量。
? ? ? ? 运行结果如下: d = [ 99 50 -14 116 65 2 115 68 8 98] 240.20616145303185 240.20616145303185 240.20616145303185 240.20616145303185 ? ? ? ? 也没毛病,4种计算方法的结果是一致的。 ? ? ? ? BUT。。。等等!这个结果跟最初的几种不同的运算结果又不一致了。。。抓狂。 5. 错误原因和正解? ? ? ? 现在记录下来只是一刹那的事情,但是真的折腾了很久才看出毛病来。 ? ? ? ? 调试2中打印出来的d的数值与原始问题中打印出来的d的数值不一样(a和b是一样的)!注意到这里,瞬间就明白过来了,图像数据的原始数据类型是uint8,做减法后得到的仍然是unit8,所以本来做正常的有符号数减法应该出现负数的地方仍然是给出了uint8的正数! ? ? ? ? 修改最初的代码,将a和b的类型用过astype()重设为有符号整数。这样各种方法的结果就完全一致了。
? ? ? ? 在机器学习中,一般来说图像数据加载进来后会先进行归一化处理,这个归一化过程(当然同样需要注意数据类型的指定)中就将数据变成了浮点数类型。平时看到这个处理基本上是无意识地跳过去了,不是做一下手撕代码的实验,真的意识不到这里居然会有这么一个坑在在这里。?正所谓:纸上得来终觉浅,绝知此事要躬行。。。 uint8 uint8 a = [59 62 63 43 46 45 50 48 43 68] b = [158 112 49 159 111 47 165 116 51 166] d = [ 99 50 -14 116 65 2 115 68 8 98] 240.20616145303185 240.20616145303185 240.20616145303185 240.20616145303185 240.20616145303185 ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 7:33:19- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |