一个神经网络框架,我可以设置自己的激活

时间:2017-11-21 19:20:52

标签: neural-network

对于我的任务,我需要实现一个带有一些任意激活函数的神经网络。更具体地说,这些激活是ReLU,但都有不同的一阶导数。

我为此目的实现了神经网络,但由于某种原因,它训练得很差(达到一个相当大的阈值)。

所以我需要一个框架来帮助我快速使用我的ReLU构建NN并将其应用于一些实际任务,如MNIST数据集。语言并不重要,但我想坚持使用C ++ \ C \ C#\ Golang。

谢谢!

3 个答案:

答案 0 :(得分:1)

如果Java没问题。 DL4J通过扩展BaseActivationFunction轻松支持自定义激活功能。

public class Sample {
    static class MyActivationFunction extends BaseActivationFunction {
        @Override
        public INDArray getActivation( INDArray in, boolean training ) {
            Nd4j.getExecutioner().execAndReturn( new RectifedLinear( in ) );
            return in;
        }

        @Override
        public Pair<INDArray, INDArray> backprop( INDArray in, INDArray epsilon ) {
            INDArray dLdz = Nd4j.getExecutioner().execAndReturn( new RectifedLinear( in ).derivative() );
            dLdz.muli( epsilon );
            return new Pair<>( dLdz, null );
        }

        @Override
        public String toString() {
            return "myrelu";
        }
    }

    public static void main( String[] args ) throws Exception {
        MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder()
            .optimizationAlgo( OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT ).iterations( 1 )
            .learningRate( 0.0001 )
            .seed( 123 )
            .regularization( true )
            .l2( 0.005 )
            .weightInit( WeightInit.XAVIER )
            .updater( Updater.NESTEROVS )
            .activation( new MyActivationFunction() ) // << USE CUSTOM ACTIVATION FUNCTION
            .list()
            .layer( 0, new DenseLayer.Builder().nIn( 768 ).nOut( 200 ).build() )
            .layer( 1, new DenseLayer.Builder().nIn( 200 ).dropOut( 0.2 ).nOut( 200 ).build() )
            .layer( 2, new RnnOutputLayer.Builder( LossFunction.MCXENT ).activation( Activation.SOFTMAX ).nIn( 200 ).nOut( 10 ).build() )
            .pretrain( false ).backprop( true )
            .build();
    }
}

答案 1 :(得分:0)

如果你可以使用Python,那么Keras将是最好的方式。它可以使用c ++中的tensorflow后端并支持GPU https://keras.io/

答案 2 :(得分:0)

通常,为了构建用于检测数字的NeuralNet,可以按照以下步骤操作:

  1. 数据集:
    • 如果您有自己的数据集,请检查标签的大小和日期以适合神经网络。
    • 如果您没有自己的数据集,则可以使用准备好的数据集,例如MNIST和其他数据集。
  2. 神经网络:
    • 您可以在此RFC3986 paragraph 2.3Tensorflow中使用Keras。它有一个可用的示例,其中包含有关如何运行它并查看结果的良好指南。

它已经准备好并且易于运行,可以看到结果,Tensorflow指南解释了所使用的功能。因此您只需稍作搜索即可更改所需的功能。