Scadao 发表于 2019-12-5 21:56:33

LabVIEW/C++深度学习开源库

本帖最后由 Scadao 于 2019-12-17 20:28 编辑

LabVIEW/C++深度学习开源库

LabVIEW/C++深度学习库

LabVIEW中的深度学习库。基于C++的正向神经网络实现。
编译需要Eigen库版本V3.3.5。使用VisualStudio 2015 C++编译。

当前支持的库:

1. 多特征卷积层
2. 多特征反卷积层
3. 全连接层
4. 输出层
5. 最大池化层
6. 传递层(应用一些元素函数)
7. 混合全连接层(可能概率分布输出值)
9. 网络之间的层共享
10. 侧通道层(向网络上游输入其他数据)
11. Vanilla & Wasserstein GAN训练函数

具有三种不同的非线性 ReLu、Tanh 和 Sigmoid(每一层可能不同)。
梯度下降在小批量中执行,有几种方法可用:

1. 基于动量的下降(Nesterov的加速梯度目前因技术原因被注释掉)。
2. RMSprop
3. ADAM

此外,该库提供了两种规范化模式,无论梯度步进方案如何,都可以使用。

1. 权重正则化
2. 光谱归一化

所有方法都可以在训练期间动态打开和关闭。训练期间始终可以更改所有超参数。

目前,我将其应用于"逆全息术"。下面将对此进行更多介绍。

HoloNet - 教会神经网络如何做全息

在我的研究中,我需要能够在全息光学钳位设置中创建复杂的光模式(例如,参见动态全息光学钳位,Curtis等人,2002年)。我的设置具有所谓的空间光调制器(SLM),本质上是一个液晶屏幕,800x600像素。每个像素可以推进或延迟进入激光束的相位。从理论上讲,这应该允许我以我想要的任何方式塑造光束。实际上,我需要知道应该为此 SLM 的每个像素分配哪个值来创建该特定光束形状。

这不是一个简单的问题。事实上,它的不平凡,有关于它的学术部落(总是存在)。

我认为深度学习可能是解决这个问题的一个方法。我们应该能够训练一个神经网络的正向问题(全息图强度)。反问题是下面进一步描述的一个正在进行的项目。

从数学上讲,我们希望在网络上训练的正向变换是一个非线性矩阵到矩阵的问题。我们的图像只有强度,因此没有额外的颜色通道。SLM 在光束上传递的变换不能以任何分析形式写下来,即使有可能,也需要对设置几何知识的精确了解。

下图应会给您一个转变的印象。你会看到全息图的图片,有很多条纹图案(左)和相应的激光光强度场的图片(右),这可以是相当不错的看。
(请见原始文档链接)
页: [1]
查看完整版本: LabVIEW/C++深度学习开源库