草庐IT

c++ - 深度神经网络的图像识别精度,float 还是 double?

coder 2024-02-19 原文

用于图像识别的神经网络可能非常庞大。 可以有数千个输入/隐藏神经元,数百万个连接什么的 会占用大量计算机资源。

同时 float通常是 32 位和 double c++ 64位,它们在速度上没有太大的性能差异,但使用 float 可以节省一些内存。

有一个神经网络正在使用什么 sigmoid作为激活函数, 如果我们可以选择神经网络中的哪些变量可以是 float 或 double 哪个可以 float 以节省内存而不会使神经网络无法执行?

虽然训练/测试数据的输入和输出绝对可以是 float 因为它们不需要 double ,因为图像中的颜色可以 仅在 0-255 范围内,当归一化为 0.0-1.0 比例时,单位值为 1/255 = 0.0039~

<强>1。隐藏神经元的输出精度如何, 让它们也漂浮起来安全吗?

隐藏神经元的输出从上一层神经元输出的总和*它与当前正在计算的神经元的连接权重得到它的值,然后将总和传递给激活函数(当前是sigmoid)以获得新的输出。 Sum 变量本身可以是双倍的,因为当网络很大时它可能会变成一个非常大的数字。

<强>2。连接权重如何,它们可以是 float 吗?

由于 sigmoid,输入和神经元的输出在 0-1.0 的范围内, 权重可以大于这个值。


Stochastic gradient descent backpropagation遭受vanishing gradient problem由于激活函数的导数,我决定不把它作为梯度变量应该是什么精度的问题提出来,感觉 float 根本不够精确,特别是当网络很深时。

最佳答案

  1. what about hidden neurons output precision, would it be safe to make them float too?

在任何地方使用 float32 通常是大多数神经网络应用程序的安全首选。 GPU目前只支持float32,所以很多从业者处处坚持float32。对于许多应用程序,甚至 16-bit floating point values可能就足够了。一些极端的例子表明,高精度网络仅需每个权重 2 位即可进行训练 (https://arxiv.org/abs/1610.00324)。

深度网络的复杂性通常不受计算时间的限制,而是受单个 GPU 上的 RAM 数量和内存总线吞吐量的限制。即使您在 CPU 上工作,使用较小的数据类型仍然有助于更有效地使用缓存。您很少会受到机器数据类型精度的限制。

since colors in image can only be in range of 0-255,

你做错了。您强制网络学习输入数据的规模,当它已知时(除非您使用自定义权重初始化程序)。当输入数据被归一化到范围 (-1, 1) 或 (0, 1) 并且权重被初始化为具有相同尺度的层的平均输出时,通常会获得更好的结果。这是一种流行的初始化技术:http://andyljones.tumblr.com/post/110998971763/an-explanation-of-xavier-initialization

如果输入在 [0, 255] 范围内,则平均输入为 ~ 100,权重为 ~ 1,激活潜力(激活函数的自变量)将为 ~ 100×N,其中 N 是层输入的数量,可能远离 sigmoid 的“平坦”部分。因此,要么将权重初始化为 ~ 1/(100×N),要么缩放数据并使用任何流行的初始化方法。否则网络将不得不花费大量的训练时间来将权重调整到这个比例。

Stochastic gradient descent backpropagation suffers on vanishing gradient problem because of the activation function's derivative, I decided not to put this out as an a question of what precision should gradient variable be, feeling that float will simply not be precise enough, specially when network is deep.

这不是机器算术精度的问题,而是每一层输出的规模。在实践中:

  • 预处理输入数据(规范化到 (-1, 1) 范围)
  • 如果你有超过 2 层,那么不要使用 sigmoids,而是使用整流线性单元
  • 仔细初始化权重
  • 使用批量归一化

This video如果您不熟悉这些概念,应该有助于学习这些概念。

关于c++ - 深度神经网络的图像识别精度,float 还是 double?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40537503/

有关c++ - 深度神经网络的图像识别精度,float 还是 double?的更多相关文章

  1. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  2. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

  3. ruby-on-rails - 添加回形针新样式不影响旧上传的图像 - 2

    我有带有Logo图像的公司模型has_attached_file:logo我用他们的Logo创建了许多公司。现在,我需要添加新样式has_attached_file:logo,:styles=>{:small=>"30x15>",:medium=>"155x85>"}我是否应该重新上传所有旧数据以重新生成新样式?我不这么认为……或者有什么rake任务可以重新生成样式吗? 最佳答案 参见Thumbnail-Generation.如果rake任务不适合你,你应该能够在控制台中使用一个片段来调用重新处理!关于相关公司

  4. ruby - 使用 `+=` 和 `send` 方法 - 2

    如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:

  5. 网络编程套接字 - 2

    网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识

  6. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  7. ruby-on-rails - 在 Ruby (on Rails) 中使用 imgur API 获取图像 - 2

    我正在尝试使用Ruby2.0.0和Rails4.0.0提供的API从imgur中提取图像。我已尝试按照Ruby2.0.0文档中列出的各种方式构建http请求,但均无济于事。代码如下:require'net/http'require'net/https'defimgurheaders={"Authorization"=>"Client-ID"+my_client_id}path="/3/gallery/image/#{img_id}.json"uri=URI("https://api.imgur.com"+path)request,data=Net::HTTP::Get.new(path

  8. python ffmpeg 使用 pyav 转换 一组图像 到 视频 - 2

    2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p

  9. [工业相机] 分辨率、精度和公差之间的关系 - 2

    📢博客主页:https://blog.csdn.net/weixin_43197380📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正!📢本文由Loewen丶原创,首发于CSDN,转载注明出处🙉📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨文章预览:一.分辨率(Resolution)1、工业相机的分辨率是如何定义的?2、工业相机的分辨率是如何选择的?二.精度(Accuracy)1、像素精度(PixelAccuracy)2、定位精度和重复定位精度(RepeatPrecision)三.公差(Tolerance)四.课后作业(Post-ClassExercises)视觉行业的初学者,甚至是做了1~2年

  10. ruby - 如何计算 Liquid 中的变量 +1 - 2

    我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我

随机推荐