Ejemplo n.º 1
0
    private NeuralNetwork CreateNewNetwork()
    {
        //先创建一个神经网络
        var network = new NeuralNetwork();
        //创建一个全连接层,输出形状为(1, 10, 1),激活函数为Sigmoid
        //var d1 = new DenseLayer(new Shape(1, 10, 1), ActivationType.Sigmoid);
        //network.AddLayer(d1);
        //创建一个全连接层,输出形状为(1, 2, 1),注意这里是最后一层,输入形状要和你需要的输出对应,激活函数为Sigmoid
        var d2 = new DenseLayer(new Shape(1, 2, 1), ActivationType.Sigmoid);

        network.AddLayer(d2);

        //初始化参数
        var initArgs = new NetworkInitializeArgs();

        //输入形状 你的输入数据形状,这里是小车的demo,输入为射线的数量
        initArgs.inputShape = new Shape(1, rayNum, 1);
        //权重的初始化范围 weight = Random.Range(-0.1f, 0.1f)
        initArgs.initWeightRange = (-0.1f, 0.1f);
        //偏执项的初始化范围 bias = Random.Range(-0.1f, 0.1f)
        initArgs.initBiasRange = (-0.1f, 0.1f);
        //初始化
        network.Initialize(initArgs);
        return(network);
    }
    // Start is called before the first frame update
    void Start()
    {
        var network = new NeuralNetwork();
        var d1      = new DenseLayer(new Shape(1, 10, 1), ActivationType.Sigmoid);

        network.AddLayer(d1);

        var initArgs = new NetworkInitializeArgs();

        initArgs.inputShape      = new Shape(1, 28 * 28, 1);
        initArgs.initWeightRange = (-0.1f, 0.1f);
        initArgs.initBiasRange   = (-0.1f, 0.1f);
        network.Initialize(initArgs);

        var trainArgs = new NeuralNetworkTrainArgs();

        trainArgs.trainingData   = ReadTrainingData();   //设置数据
        trainArgs.trainingLabels = ReadTrainingLabels(); //设置标签
        trainArgs.learningRate   = 0.01f;                //设置学习速率,越大学习的速度越快,但出现不收敛的可能性也越大
        trainArgs.onOnceEpoch    = (i) =>
        {
            var accuracy = GetAccuracy(network, trainArgs.trainingData, trainArgs.trainingLabels);
            Debug.Log($"第{i}个训练回合, 准确率:{accuracy}");
        };
        trainArgs.trainEpoches = 100; //设置训练的回合数
        network.Train(trainArgs);     //开始训练

        TestNetwork(network, trainArgs.trainingData, trainArgs.trainingLabels);
    }
Ejemplo n.º 3
0
        public override void Initial(Shape inputShape, INeuralNetwork neuralNetwork, int layerIndex, NetworkInitializeArgs args)
        {
            this.inputShape    = inputShape;
            this.neuralNetwork = neuralNetwork;
            this.layerIndex    = layerIndex;

            _weights = new Tensor(1, outputShape.len1, inputShape.len1);
            _weights.FillWithRandomValue(args.initWeightRange.Item1, args.initWeightRange.Item2);
            _bias = new Tensor(1, outputShape.len1, 1);
            _bias.FillWithRandomValue(args.initBiasRange.Item1, args.initBiasRange.Item2);
        }