Пример #1
0
    private Function.Matrix[] Backward(Function.Matrix x, Function.Matrix y, Function.Matrix w1, Function.Matrix w2, float alpha)
    {
        var z1 = Function.Matrix.Multiply(Function.Matrix.Transpose(w1), x);
        var a1 = Function.sigmoid(z1);

        var z2 = Function.Matrix.Multiply(Function.Matrix.Transpose(w2), a1);
        var a2 = Function.sigmoid(z2);

        var diff = Function.Matrix.Minus(a2, y);

        var w2Grad = Function.Matrix.Multiply(Function.Matrix.Multiply(a1, Function.Dsigmoid(z2)), diff);
        var w1Grad = Function.Matrix.Multiply(Function.Matrix.Transpose(w2), Function.Dsigmoid(z1));

        w1Grad = Function.Matrix.Multiply(x, Function.Matrix.Multiply(Function.Matrix.Multiply(w1Grad, Function.Dsigmoid(z2)), diff));
        //DisplayMatrix(Function.Matrix.Multiply(alpha, w1Grad));
        //Debug.Log(Function.Matrix.Dimension(w1));
        //Debug.Log(Function.Matrix.Shape(Function.Dsigmoid(w1Grad))[0] + ", " + Function.Matrix.Shape(Function.Dsigmoid(w1Grad))[1]);
        var w1Next = Function.Matrix.Minus(w1, Function.Matrix.Multiply(alpha, w1Grad));
        var w2Next = Function.Matrix.Minus(w2, Function.Matrix.Multiply(alpha, w2Grad));
        var result = new Function.Matrix[2];

        result[0] = w1Next;
        result[1] = w2Next;
        return(result);
    }
Пример #2
0
    private Function.Matrix Forward(Function.Matrix x, Function.Matrix w1, Function.Matrix w2)
    {
        //Debug.Log(Function.Matrix.Shape(x)[0] + ", " + Function.Matrix.Shape(x)[1]);
        var z1 = Function.Matrix.Multiply(Function.Matrix.Transpose(w1), x);
        //DisplayMatrix(z1);
        var a1 = Function.sigmoid(z1);

        var z2 = Function.Matrix.Multiply(Function.Matrix.Transpose(w2), a1);
        var a2 = Function.sigmoid(z2);

        return(a2);
    }
Пример #3
0
    private float loss(Function.Matrix predict, Function.Matrix groundTruth)
    {
        var   diff   = Function.Matrix.Minus(predict, groundTruth);
        float result = 0f;

        foreach (var col in diff.colVector)
        {
            foreach (var element in col.vec)
            {
                result += element * element;
            }
        }
        var shape = Function.Matrix.Shape(diff);

        result /= shape[0] * shape[1];
        return(result);
    }
Пример #4
0
    internal void DisplayMatrix(Function.Matrix m)
    {
        StringBuilder note = new StringBuilder();

        note.Append("[");
        foreach (var i in m.colVector)
        {
            note.Append("[");
            foreach (var j in i.vec)
            {
                note.Append(j.ToString() + ", ");
            }
            note.Append("]");
        }
        note.Append("]");
        txt.text = note.ToString();
    }
Пример #5
0
    internal void DisplayMatrix(Function.Matrix m)
    {
        int row = Function.Matrix.Shape(m)[0];
        int col = Function.Matrix.Shape(m)[1];

        Debug.Log(row + ", " + col);
        StringBuilder note = new StringBuilder();

        note.Append("[");
        for (int i = 0; i < row; ++i)
        {
            note.Append("[");
            for (int j = 0; j < col; ++j)
            {
                note.Append(m.colVector[j].vec[i].ToString() + ", ");
            }
            note.Append("]");
        }
        note.Append("]");
        text.text = note.ToString();
    }