32、基于深度学习算法的鹌鹑蛋新鲜度检测研究

基于深度学习算法的鹌鹑蛋新鲜度检测研究

1. 研究背景与目标

不同国家采用了不同的新鲜度标准。例如,欧盟采用气室大小作为评估禽蛋新鲜度的参数,而巴西则采用哈夫单位(HU)。本研究旨在开发一种基于深度学习算法的计算机视觉模型,利用热成像微相机快速、无损地检测鹌鹑蛋气室,以此对不新鲜的鹌鹑蛋进行分类。研究假设是,由于蛋壳的气体传输,热成像相机可以检测到因气室增大导致的蛋重损失,从而通过快速无损的方式实现机器视觉系统对鹌鹑蛋新鲜度的检测。

2. 材料与方法
2.1 实验环境
  • 使用从当地杂货店收集的日本鹌鹑蛋(Coturnix japonica),以标签上的保质期作为新鲜度的终点参考。
  • 实验在日本筑波大学的生物生产与机械实验室进行,时间为夏季中期,日平均温度范围为24 - 32°C。
  • 研究方法分为两个阶段:一是通过像素测量评估气室大小;二是利用热成像图像进行深度学习目标检测,自动分类不新鲜的鸡蛋。
2.2 热成像
  • 使用FLIR® Model VUE™ 336热成像相机收集鹌鹑蛋的辐射图像。该相机传感器分辨率为336 × 256像素,光谱波段范围为7.5 - 13.5μm,尺寸为2.26″(5.74 cm)× 1.75″(4.44 cm)。
  • 热成像相机通过解释目标与环境相互作用时发射的红外辐射强度来生成图像,其图像受大气传输、红外反射和目标发射波长的影响。获取物体信息的三个关键变量是目标的大小、距离和相机角度。
  • 与光学相机相比,热成像相机的主要优点是无需依赖光线,常用于夜间视觉和体温测量。但与传统相机相比,它存在分辨率低、成本高的局限性,且提供的是相对温度,需要经过数据处理或校准才能获得绝对测量值。
2.3 数据集收集
  • 随机从当地杂货店收集了390个鹌鹑蛋,其中8个有裂缝,剩余382个用于实验。
  • 将鸡蛋分为三组:
    • 第一组174个鸡蛋,在17°C的常规冰箱中连续储存60天,相对湿度为45%。分别在第30天、第50天和第60天取出进行图像采样,该数据集用于训练基于视觉的目标检测算法。
    • 第二组148个鸡蛋,用于评估气室大小,因为气室会因老化而增大,导致蛋重损失,两者可能存在相关性。
    • 第三组60个鸡蛋,用于测试预测模型。该组在与第一组相同的条件下储存,并在保质期后15天进行评估。通过煮鸡蛋并纵向切割来直观确认气室大小。
2.4 气室评估方法
  • 为了关联气室增大与蛋重损失,对第二组鸡蛋进行实验。在购买后立即(第1天)和加速老化10天后(将鸡蛋置于夏季室温下,平均温度27°C,湿度60%)分别称重。
  • 通过三条线段测量两点之间的像素距离,以减少误差和像素长度转换的主观性。
  • 采用皮尔逊相关系数计算加速老化期间蛋重和气室大小变化之间的关系,公式如下:
    [r = \frac{\sum_{i=1}^{n}(x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum_{i=1}^{n}(x_i - \bar{x})^2\sum_{i=1}^{n}(y_i - \bar{y})^2}}]
    其中,r是相关系数,$x_i$和$y_i$分别是x和y变量样本(面积和重量),$\bar{x}$和$\bar{y}$是x - y样本变量的平均值。
2.5 基于深度学习的目标检测算法
  • 深度学习(DL)使用深度神经网络处理涉及大数据的非线性问题,创建预测模型。与传统机器学习方法相比,DL在处理多维数据时更快、更准确,例如图像分类、分割和定位。
  • YOLO是一种深度学习目标检测算法,使用单个卷积神经网络(CNN)在图像中定位感兴趣的目标,并将目标分类视为回归问题。自发布以来,YOLO已经发展出多个系列,如YOLOv5、YOLOv6和YOLOv7。
    • YOLOv5使用CSPDarknet53作为骨干网络,PANet和修改后的FPN作为颈部网络,YOLO层作为头部网络,损失函数为二元交叉熵和对数损失函数,训练框架为PyTorch。
    • YOLOv7引入了扩展高效层聚合网络(E - ELAN),提高了特征提取效率,在MS COCO数据集上的mAP表现优于之前的版本。其骨干网络为E - ELAN,颈部网络为CSPSPP + (ELAN, E - ELAN) PAN,头部网络为YOLOR,损失函数为二元交叉熵,训练框架为PyTorch。
    • EfficientDet由Google Research发布,具有轻量级模型、高精度和多尺度可扩展性的特点,适用于检测小目标和低终端设备。其骨干网络为EfficientNet,颈部网络为BiFPN,头部网络为Box prediction net,损失函数为焦点损失,训练框架为TensorFlow。

三种算法的基本架构对比如下:
| 模型 | 骨干网络 | 颈部网络 | 头部网络 | 损失函数 | 训练框架 |
| — | — | — | — | — | — |
| YOLOv5 | CSPDarknet53 | PANet,修改后的FPN | YOLO层 | 二元交叉熵和对数损失函数 | PyTorch |
| YOLOv7 | E - ELAN | CSPSPP + (ELAN, E - ELAN) PAN | YOLOR | 二元交叉熵 | PyTorch |
| EfficientDet | EfficientNet | BiFPN | Box prediction net | 焦点损失 | TensorFlow |

2.6 数据标注
  • 使用第一组的174个鸡蛋(共522张图像,来自第30天、第50天和第60天)训练YOLO和EfficientDet算法。假设储存30天后的鸡蛋都不新鲜,通过空间、像素和CutMix等增强技术扩大图像数据集,以提高模型的泛化能力和特征提取效果。
2.7 训练参数
  • 将总共3610张图像的训练数据集按70:30的比例分为训练集(2527张)和验证集(1083张)。
  • 使用不同的框架训练模型:
    • EfficientDet在运行Windows® 10™ 64位的个人计算机上训练,配置为Intel® Xeon™ E5 - 1607处理器、32GB RAM、NVIDIA® GTX 1650™ 4GB GPU,Python版本3.8.5,CUDA 10.1,cuDNN 7.6.5,OpenCV 4.4.0,Tensor - Flow 2.3.1和TensorFlow - GPU 2.3.1。
    • YOLOv5和YOLOv7在Google Collab云环境中训练,使用PyTorch 1.11.0 + cu102和16GB GPU Tesla T4。

各算法的训练参数如下:
| 算法 | 批量大小 | 输入大小 | 动量 | 迭代次数 |
| — | — | — | — | — |
| YOLOv5 | 16 | 640 × 640 | 0.937 | 30个周期 |
| YOLOv7 | 16 | 640 × 640 | 0.937 | 30个周期 |
| EfficientDet | 4 | 512 × 512 | 0.899 | 30,000步 |

2.8 评估指标

采用以下常见指标来验证模型并比较结果:
- 精度(P):真阳性(TP)检测与假阳性(FP)检测的比例。
- 召回率(R):真阳性(TP)检测与假阴性(FN)检测的比例。
- F1分数:表示精度和召回率之间的平衡,是比较模型效果的良好指标。
- 平均精度(AP)和mAP@0.5:用于评估模型训练参数,是PASCAL VOC挑战中采用的指标。

相关公式如下:
[P = \frac{TP}{TP + FP}]
[R = \frac{TP}{TP + FN}]
[F1 = \frac{2 \times P \times R}{P + R}]

3. 实验结果
3.1 相关性测试
  • 对储存鸡蛋的重量和气室大小进行了数据探索分析,结果如下表所示:
    | 指标 | 高度(mm) | 第1天像素长度 | 第10天像素长度 | 第1天气室面积 | 第10天气室面积 | 第1天重量(g) | 第10天重量(g) |
    | — | — | — | — | — | — | — | — |
    | 平均值 | 30.993 | 147.678 | 141.122 | 40.464 | 93.763 | 9.902 | 9.282 |
    | 标准差 | 1.306 | 16.963 | 18.897 | 32.071 | 59.454 | 0.930 | 0.968 |

  • 对重量和气室大小进行皮尔逊相关性统计分析,结果如下表所示:
    | 重量差异(均值) | 像素面积差异(均值) | 观察次数 | 自由度(n - 2) | T统计量 | 相关系数(r) | p值 |
    | — | — | — | — | — | — | — |
    | -0.620 | 53.300 | 148 | 146 | 17.47713 | -0.82256 | 1.3 × 10 - 37 |

  • 结果表明,重量和气室大小之间存在负相关关系($R^2 = 0.6766$),即蛋重减少时,气室大小增加。

3.2 计算机视觉模型预测
  • 训练结果 :

    • 对三种模型(YOLOv5、YOLOv7和EfficientDet)进行训练评估,IoU为0.5时的评估结果如下表所示:
      | 模型 | 精度(P) | 召回率(R) | F1分数 | mAP@0.50 |
      | — | — | — | — | — |
      | YOLOv5 | 0.99 | 0.99 | 0.99 | 99.5% |
      | YOLOv7 | 0.97 | 0.98 | 0.97 | 99.4% |
      | EfficientDet | 0.95 | 0.73 | 0.82 | 95.0% |

    • 测试数据集的准确性评估指标如下表所示:
      | 模型 | 总边界框 | 真阳性(TP) | 真阴性(TN) | 假阳性(FP) | 假阴性(FN) |
      | — | — | — | — | — | — |
      | YOLOv5 | 39 | 33 | 22 | 6 | 5 |
      | YOLOv7 | 44 | 37 | 22 | 7 | 1 |
      | EfficientDet | 29 | 29 | 22 | 0 | 9 |

    • 不同阈值下测试数据集的准确性评估结果如下表所示:
      | 模型 | 精度(P) | 召回率(R) | F1分数 |
      | — | — | — | — |
      | YOLOv5 | 0.85 | 0.87 | 0.86 |
      | YOLOv7 | 0.84 | 0.97 | 0.90 |
      | EfficientDet | 1 | 0.76 | 0.86 |

  • 保质期重新验证 :
    | 模型 | 总鸡蛋数 | 不新鲜(边界框) | DL新鲜(TN + FN) | 真阴性(TN) | DL重新验证率 | 真实重新验证率 | 重新验证误差 |
    | — | — | — | — | — | — | — | — |
    | YOLOv5 | 60 | 39 | 27 | 22 | 45.00% | 36.67% | 8.33% |
    | YOLOv7 | 60 | 44 | 23 | 22 | 38.33% | 36.67% | 1.67% |
    | EfficientDet | 60 | 29 | 31 | 22 | 51.67% | 36.67% | 15.00% |

综上所述,本研究通过热成像相机和深度学习算法实现了对鹌鹑蛋新鲜度的快速无损检测。在三种模型中,YOLOv7表现最佳,其次是YOLOv5和EfficientDet。然而,热成像相机的低分辨率限制了检测的准确性,未来需要在热传感技术和算法优化方面进一步改进,以提高检测效率和准确性。同时,不同网络大小和训练参数会影响模型的性能,在选择最佳模型时需要进行全面比较。

4. 讨论
  • 热成像技术优势 :本研究采用热成像相机并提出新方法,依据气室大小检测鸡蛋新鲜度。热成像相机能解读经大气传输的红外波长强度。由于二氧化碳比大气空气重,在冷鸡蛋与温暖室温形成的温度对比下,气室中的二氧化碳和其他气体成分会产生可被热成像相机辐射传感器检测到的光谱特征,此方法被称为“热成像对比技术”。该技术能轻松、快速且有效地识别不新鲜鸡蛋,结合深度学习目标检测算法,可用于工业级的实时高通量应用。
  • 未考虑因素 :研究期间未测量储存期内蛋白或蛋黄的pH值。不过,相关文献表明,对于鸡蛋,蛋白的pH值可能比蛋黄略有升高,且在可控大气系统中注入二氧化碳可减少这种变化。此外,基因型、鹌鹑饲料成分、疾病、亲代鸡群年龄和环境条件等因素也可能影响蛋白和蛋黄的化学变化。
  • 对鹌鹑产业的意义 :能够进行实时无损分析的方法有助于鹌鹑养殖和产后处理过程,保障消费者的质量和安全。研究发现,同一组中的部分鸡蛋新鲜度不如其他鸡蛋,推测这可能与蛋壳成分(如厚度和硬度)的差异有关。
  • 相关性测试误差分析 :在相关性测试中,实际测量和像素测量的标准差差异较大,这是因为像素测量依赖于手动标记点的连线,连接鸡蛋上下点的线条可能会改变像素长度。为减少误差,采用三次连线并取平均值的方法确定像素长度。
  • 深度学习模型性能比较 :通过深度学习目标检测,能够高精度地预测不新鲜的鹌鹑蛋。比较三种模型,YOLOv7效果最佳,其次是YOLOv5和EfficientDet。随着各领域对图像识别和定位应用需求的增加,基于深度学习的模型也在不断升级。
  • 算法与设备的权衡 :深度学习算法的改进可降低不新鲜鸡蛋重新分类的误差。但由于热成像相机分辨率较低,进一步改进热传感技术可提高基于深度学习的计算机视觉系统的效率和准确性,因此需要权衡设备和算法之间的关系。
  • 训练参数影响 :训练深度学习模型时,一些参数会影响模型的速度和准确性,其中网络大小最为重要。YOLOv5和YOLOv7的网络大小均设置为640 × 640像素,因其架构相同,但由于硬件资源(特别是GPU处理能力)的限制,批量大小有所不同。EfficientDet的最小网络大小为512 × 512,这是由其可扩展特征架构决定的,批量大小适合TensorFlow处理。不同的网络大小会产生不同的结果,因此在选择最佳模型以实现所开发系统时,全面比较各种模型和预训练模型至关重要。

5. 总结与展望

  • 研究成果总结 :本研究成功利用热成像相机和深度学习算法实现了对鹌鹑蛋新鲜度的快速无损检测。通过相关性测试,明确了蛋重和气室大小之间的负相关关系。在计算机视觉模型预测方面,对YOLOv5、YOLOv7和EfficientDet三种模型进行了训练和评估,结果显示YOLOv7在各项指标上表现最优,能够更准确地识别不新鲜的鹌鹑蛋。
  • 研究局限性 :热成像相机的低分辨率是影响检测准确性的主要因素,限制了深度学习算法的性能发挥。此外,研究未考虑储存期内蛋白和蛋黄pH值的变化以及其他可能影响鸡蛋新鲜度的因素,如基因型、饲料成分等。
  • 未来研究方向 :
    • 技术改进 :进一步提高热成像相机的分辨率,优化热传感技术,以增强对鸡蛋气室特征的捕捉能力,从而提高检测的准确性和可靠性。
    • 算法优化 :持续探索和改进深度学习算法,结合更多的特征信息,如鸡蛋的颜色、纹理等,提高模型的泛化能力和适应性。
    • 多因素综合考虑 :在后续研究中,纳入更多影响鸡蛋新鲜度的因素,建立更全面的评估模型,为鹌鹑蛋的质量检测提供更科学的依据。
    • 实际应用推广 :将研究成果应用于实际的鹌鹑养殖和产后处理过程中,进行大规模的验证和优化,推动该技术在鹌鹑产业中的广泛应用。

通过本研究,为鹌鹑蛋新鲜度检测提供了一种新的方法和思路,未来的研究有望进一步完善该技术,为鹌鹑产业的发展提供有力支持。

6. 流程图

graph LR
    A[收集鹌鹑蛋] --> B[分组]
    B --> B1[第一组:训练数据集]
    B --> B2[第二组:气室评估]
    B --> B3[第三组:测试数据集]
    B1 --> C1[储存并采样图像]
    B2 --> C2[加速老化实验]
    B3 --> C3[储存并评估]
    C1 --> D1[数据标注与增强]
    C2 --> D2[气室大小与重量相关性分析]
    C3 --> D3[煮蛋确认气室大小]
    D1 --> E[训练深度学习模型]
    E --> F[模型评估]
    F --> G[结果分析与总结]

7. 关键步骤总结

  • 数据收集 :随机收集鹌鹑蛋,去除有裂缝的蛋后分组,分别用于训练、气室评估和测试。
  • 热成像采集 :使用特定型号的热成像相机采集鹌鹑蛋的辐射图像。
  • 气室评估 :通过加速老化实验,测量蛋重和气室大小的变化,计算两者的相关性。
  • 模型训练 :选择YOLOv5、YOLOv7和EfficientDet三种深度学习模型,进行数据标注、增强和训练。
  • 模型评估 :采用精度、召回率、F1分数等指标评估模型性能,比较不同模型的优劣。
  • 结果分析 :分析实验结果,总结研究成果和局限性,提出未来研究方向。

8. 表格汇总

类别 模型 骨干网络 颈部网络 头部网络 损失函数 训练框架 批量大小 输入大小 动量 迭代次数
算法架构 YOLOv5 CSPDarknet53 PANet,修改后的FPN YOLO层 二元交叉熵和对数损失函数 PyTorch 16 640 × 640 0.937 30个周期
算法架构 YOLOv7 E - ELAN CSPSPP + (ELAN, E - ELAN) PAN YOLOR 二元交叉熵 PyTorch 16 640 × 640 0.937 30个周期
算法架构 EfficientDet EfficientNet BiFPN Box prediction net 焦点损失 TensorFlow 4 512 × 512 0.899 30,000步
训练评估(IoU = 0.5) YOLOv5 - - - - - - - - 精度0.99,召回率0.99,F1分数0.99,mAP@0.50 99.5%
训练评估(IoU = 0.5) YOLOv7 - - - - - - - - 精度0.97,召回率0.98,F1分数0.97,mAP@0.50 99.4%
训练评估(IoU = 0.5) EfficientDet - - - - - - - - 精度0.95,召回率0.73,F1分数0.82,mAP@0.50 95.0%
测试数据集评估 YOLOv5 - - - - - - - - 总边界框39,真阳性33,真阴性22,假阳性6,假阴性5
测试数据集评估 YOLOv7 - - - - - - - - 总边界框44,真阳性37,真阴性22,假阳性7,假阴性1
测试数据集评估 EfficientDet - - - - - - - - 总边界框29,真阳性29,真阴性22,假阳性0,假阴性9
不同阈值评估 YOLOv5 - - - - - - - - 精度0.85,召回率0.87,F1分数0.86
不同阈值评估 YOLOv7 - - - - - - - - 精度0.84,召回率0.97,F1分数0.90
不同阈值评估 EfficientDet - - - - - - - - 精度1,召回率0.76,F1分数0.86
保质期重新验证 YOLOv5 - - - - - - - - 总鸡蛋数60,不新鲜39,DL新鲜27,真阴性22,DL重新验证率45.00%,真实重新验证率36.67%,重新验证误差8.33%
保质期重新验证 YOLOv7 - - - - - - - - 总鸡蛋数60,不新鲜44,DL新鲜23,真阴性22,DL重新验证率38.33%,真实重新验证率36.67%,重新验证误差1.67%
保质期重新验证 EfficientDet - - - - - - - - 总鸡蛋数60,不新鲜29,DL新鲜31,真阴性22,DL重新验证率51.67%,真实重新验证率36.67%,重新验证误差15.00%

相关推荐

Crazyflie 2.1固件刷写与地址配置全攻略:从开箱到连接Crazyswarm

本文详细介绍了Crazyflie 2.1微型无人机的固件刷写、地址配置及与Crazyswarm系统的集成方法。从开箱检查到多机协同飞行,涵盖了硬件准备、固件刷写、无线电地址修改等关键步骤,帮助用户快速实现集群飞行控制。特别针对Crazyswarm系统集成提供了实用配置示例和调试技巧。

weixin_42530458的博客 405

基础的pdf病毒木马

基础的pdf病毒木马 环境: 攻击机:Kali 目标操作系统:Windows 10或Windows 7 (关闭防火墙和安全软件) 目标软件:Adobe Reader 8.1.2 msf框架搜索:adobe-pdf 1.打开msfconsole 2.搜索 adobe_pdf模块 3.加载攻击模块并设置payload 4.运行生成pdf 5.将pdf拖入到win10 6.打开msf,加...

小小猪的博客 4624

4.无限共轭距柯克物镜设计——zemax学习笔记

无限共轭cooker物镜

fly_daerm的博客 1600

[Linux外设驱动详解]RK3588 U-Boot网络功能深度分析

本文深入分析了RK3588平台上U-Boot的网络功能实现,主要内容包括: 网络架构:详细剖析了从硬件层到协议层的完整网络栈架构,包括GMAC驱动、TFTP/NFS启动、网络命令等关键组件。 驱动实现:重点介绍了RK3588 GMAC驱动结构,包含关键数据结构、专用操作函数集、设备树兼容性配置和GRF寄存器设置。 功能实现:详细说明了驱动初始化流程、RGMII速度适配机制以及PHY接口配置过程。 高级特性:涵盖了网络启动功能、镜像更新和MAC地址传递到Linux内核的机制。 文档通过代码片段和流程图清晰展示

Just Linux! 1115

内存|内存的概念、内存的作用、内存的物理结构及内存使用

内存是硬件,是用于存放数据的硬件。程序执行前需要先放到内存中才能被CPU处理。内存是与CPU沟通的桥梁,计算机中所有程序的运行都要依靠内存,内存对计算机的影响非常大。本文简单介绍了内存的概念、作用、物理结构以及使用,内存远不止如此,后续文章会逐步深入讲解。

qq_59938293的博客 2万+

【智能流体力学】使用ANSYS Fluent + SpaceClaim + SCDM制作流体力学前处理的几何模型

生成来源.scdoc文件来自前处理工具生成的模型数据,或在 FLUENT 中创建和保存的模型。生成方式: 通过前处理工具导出网格数据,或在 FLUENT 中设置并保存模型。作用: 用于储存模型的结构信息和设置,确保在 FLUENT 中的正确导入和使用。.x_t文件是 Parasolid 文件格式的扩展名,用于存储三维模型数据。在 ANSYS Fluent 中,这种格式通常用于在前处理工具之间交换几何数据。要创建.x_t。

源代码杀手的博客 3265

从零学懂车载 TSN(二):802.1AS、Qbv、Qbu 是如何让 Ethernet “按时发送”的?

假设有两台设备: ECU A 认为: 但 Switch B 认为: 如果我们规定: 问题就来了。ECU:Switch:整个调度立即失效。因此 TSN 要做时间调度,第一件事就是:这就是:IEEE 802.1AS 定义时间敏感网络里的:工程中通常会看到:gPTP也就是:generalized Precision Time Protocol可以先简单理解成: 核心表达:所有 TSN 节点使用共同时间。后面抓包时你会经常遇到: 刚入门时不用急着研究每个 bit。先搞清楚它们解决什么问题。两个设备连接: A 需要知

struggle_22_58的博客 51

Dify平台隐患url:/console/api/remote-files/upload暴露高危漏洞,配置nginx htpasswd模块认证机制屏蔽解决

内部网络探测: 攻击者可通过SSRF扫描内网服务云元数据访问: 可能访问AWS/Aliyun/腾讯云等元数据服务服务端请求伪造: 以服务器身份发起任意HTTP请求。

CN_Eden 1325

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: 18、神经突触交互与动作电位生成机制解析
下一篇: 7、Hadoop MapReduce:原理、架构与应用实践
python9snake
博客等级 码龄1天 0粉丝 1724原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值