我有一个大型的S3存储桶,里面装满了四种不同动物的照片。我将首次尝试机器学习,看看能否成功让Deep Learning 4 Java (DL4J)识别出这四种动物中的任意一种新照片,并能持续、准确地猜出这是哪种动物。
我的理解是,我必须首先进行一个“训练阶段”,这个阶段有效地构建了一个(内存中的)神经网络,该网络由节点和权重组成,这些节点和权重来源于这个S3存储桶(输入数据)以及我对DL4J库的编码和使用。
一旦训练完成(也就是说,一旦我构建了一个内存中的神经网络),我的理解是,我可以进入零个或多个“测试阶段”,在这个阶段,我输入一张新的图片,让程序决定它认为这张图片是什么动物,然后我手动标记输出为正确(程序猜对了)或错误并进行更正(程序猜错了,顺便说一下,实际上是这样的答案)。我的理解是,这些测试阶段有助于调整算法并最小化错误。
最后,我的理解是,这个库可以在一个实时的“生产阶段”中使用,在这个阶段,程序只是对输入的图片做出反应,并决定它认为这些图片是什么。
所有这些问题都是为了问:我对ML和DL4J基本方法的理解是否正确,或者我有什么误解吗?
回答:
训练:这是任何框架都可以做的。你也可以使用基于Java的SerializationUtils或在新版本中我们也有一个ModelSerializer来持久化神经网络。
这更像是一个集成游戏,而不是“它能做x吗?”
DL4j可以与kafka/spark流集成,并进行在线/小批量学习。
神经网络可以嵌入到生产环境中。
我在这里唯一的建议是确保你用于训练和测试的数据管道是相同的。
这主要是为了确保你用于训练和测试的数据的一致性。
对于小批量学习,确保你有minibatch(true)(默认)如果你是进行小批量/在线学习,或者minibatch(false)如果你是针对整个数据集一次性训练的。
我还建议使用StandardScalar (https://github.com/deeplearning4j/nd4j/blob/master/nd4j-backends/nd4j-api-parent/nd4j-api/src/main/java/org/nd4j/linalg/dataset/api/iterator/StandardScaler.java) 或类似的工具来持久化关于你的数据的全局统计数据。不过,数据管道的很大一部分将取决于你用来构建数据管道的库。
我认为你可能希望以某种方式规范化你的数据。