为自定义层扩展DL4J功能。
有两个组件可添加自定义层:
添加层配置类: 扩展 org.deeplearning4j.nn.conf.layers.Layer
添加层实现类: 实现 org.deeplearning4j.nn.api.Layer
配置层(以上(1))类处理设置。这是你在构建多层网络或计算图时所使用的方法。你可以在这里添加自定义设置,并在你的图层中使用这些设置。
实现层(以上(2))类具有参数,并处理网络前向传播、反向传播等。它是从org.deeplearning4j.nn.conf.layers.Layer.instantiate(…)方法创建的。换句话说:instanceiate方法是我们从配置到实现的方式;MultiLayerNetwork或ComputationGraph在初始化的时候调用。
其中的一个例子是CustomLayer(配置类)和CustomLayerImpl(实现类)。这两类都对它们的方法有广泛的注释。
你将注意到,在DL4J中有两个DenseLayer 类 、两个GravesLSTM类等:原因在于一个用于配置,一个用于实现。我们没有遵循这个“同名”模式,希望避免混淆。
一旦添加了自定义层,就需要运行一些测试来确保它是正确的。
这些测试至少应包括以下内容:
测试以确保JSON配置(到/从JSON)正常工作,这对于你的自定义层与模型序列化(保存)和Spark训练都起作用的网络来说是必要的。
梯度检查,以确保执行是正确的。
我们提供了一个完整的自定义层示例。在我们的 示例仓库 中。