Esempio n. 1
0
        public void TestBackpropagate()
        {
            var WI = new[, ] {
                { 0.0368690499741906, 0.0135390551358178, -0.0377502766147956, 0.0336466886725494, -0.0270974517460435 },
                { 0.016440156808328, 0.0169175251931499, 0.0922190173492855, -0.031504701977365, -0.0114259869379112 },
                { -0.0127991043556477, 0.0487416296958652, -0.0701314578625054, -0.0536020711779604, -0.0154984786713023 },
                { 0.0657846277420338, 0.00954156336818894, -0.0136355384782122, -0.0162582306732695, 0.0366232909898382 },
                { 0.0211230152850612, 0.0597162170148065, 0.057514813056921, -0.0456053966403033, 0.0368811796125402 },
                { 0.0958493649940236, -0.0770609196168654, -0.0213859166583912, -0.0380667455206005, -0.059526237547177 },
                { 0.0255941354323151, -0.0347667583891967, 0.0813340035180254, -0.0742663991517696, 0.064415111748695 },
                { -0.09638258432801, 0.0478759082722831, -0.00176863414317772, 0.0383402774754634, -0.048905799700369 }
            };

            var WO = new[, ] {
                { -0.0702967214259769, 0.0859662250550306, -0.0469181300825058, 0.0750174499931826, -0.0862165990221391, -0.025250033999444, 0.0277256570419882, 0.0687815535668198 },
                { -0.0643791042102404, -0.0336792340193313, -0.0982879727139547, 0.011368115391288, 0.0984938144676824, 0.0220246880883466, -0.00235211108920729, 0.021364244130144 },
                { -0.0938820250303866, 0.0536523073695844, 0.015810846870677, 0.0204317684846147, 0.0960061897505104, 0.0433280812312514, 0.0465293434199548, 0.0599207696318258 },
                { 0.0455908204175489, 0.0266330542632533, 0.0242098380458587, -0.0212760037375968, 0.0244631621634882, 0.0349988715420472, -0.0567920621283315, -0.0829100279057911 },
                { -0.0940704868147478, -0.0859107999996798, 0.093844279644007, -0.0646651228725282, 0.000752150221146719, -0.0685755731391607, -0.0400362076889892, -0.0787345594627478 }
            };
            var expectedOutput = new double[, ] {
                { 1, 0, 0, 0, 0, 0, 0, 0 }
            };
            var oneHot = new double[, ] {
                { 0, 0, 1, 0, 0, 0, 0, 0 }
            };
            var actualOutput = oneHot.DotProduct(WI).DotProduct(WO).GetSoftmax();

            var testSubject = Word2VecTestClass.GetFruitAndJuicePreset();

            testSubject.WI = WI;
            testSubject.WO = WO;
            testSubject.Backpropagate(oneHot, actualOutput, expectedOutput);

            var expectedWI = new[, ] {
                { 0.0368690499741906, 0.0135390551358178, -0.0377502766147956, 0.0336466886725494, -0.0270974517460435 },
                { 0.016440156808328, 0.0169175251931499, 0.0922190173492855, -0.031504701977365, -0.0114259869379112 },
                { -0.027578790001260865, 0.03698981982855939, -0.09493812869218567, -0.04434431484927983, -0.02585083273222276 },
                { 0.0657846277420338, 0.00954156336818894, -0.0136355384782122, -0.0162582306732695, 0.0366232909898382 },
                { 0.0211230152850612, 0.0597162170148065, 0.057514813056921, -0.0456053966403033, 0.0368811796125402 },
                { 0.0958493649940236, -0.0770609196168654, -0.0213859166583912, -0.0380667455206005, -0.059526237547177 },
                { 0.0255941354323151, -0.0347667583891967, 0.0813340035180254, -0.0742663991517696, 0.064415111748695 },
                { -0.09638258432801, 0.0478759082722831, -0.00176863414317772, 0.0383402774754634, -0.048905799700369 }
            };

            var expectedWO = new[, ] {
                { -0.0725349259693216, 0.0862846537452614, -0.0466001629378136, 0.0753380848400864, -0.0858967505047844, -0.0249302825146291, 0.028046172733948, 0.0691026117342084 },
                { -0.05585555959306, -0.0348918761599449, -0.0994988571939456, 0.0101470717509588, 0.0972757653324868, 0.0208070084730793, -0.00357270096292947, 0.0201415883980825 },
                { -0.106146050954199, 0.0553971066657383, 0.0175531171725673, 0.0221886562034776, 0.0977587688524496, 0.0450801286527474, 0.0482855782407944, 0.0616799768944566 },
                { 0.0362173208421463, 0.0279666192412844, 0.0255414700920121, -0.0199331994750246, 0.0258026733134108, 0.036337976324074, -0.0554497568812851, -0.081565450796141 },
                { -0.0967807362519854, -0.0855252136237319, 0.0942293071329041, -0.0642768650540175, 0.00113945587055197, -0.0681883849867855, -0.0396480941556025, -0.078345789044033 }
            };

            Assert.IsTrue(MatrixOps.AreEqual(testSubject.WI, expectedWI));
            Assert.IsTrue(MatrixOps.AreEqual(testSubject.WO, expectedWO));
        }
Esempio n. 2
0
        public void TestFeedFoward()
        {
            var testSubject = Word2VecTestClass.GetFruitAndJuicePreset();

            var initVector = new double[1, testSubject.WI.CountOfRows()];
            var testResult = testSubject.FeedFoward(null, initVector);

            var nextWord = testSubject.ReadNextWord();

            Console.WriteLine(nextWord.TargetWord.Word);
            foreach (var f in nextWord.ContextWords)
            {
                Console.WriteLine(f.Word);
            }

            testResult = testSubject.FeedFoward(nextWord);
            Console.WriteLine(testResult.Print());
            var expect = new[]
            {
                0.12564016936189557,
                0.12439491130889098,
                0.12421460746660097,
                0.12525675156413787,
                0.12494957008987123,
                0.12491166410164599,
                0.1252102034070606,
                0.12542212269989678
            };

            for (var i = 0; i < expect.Length; i++)
            {
                var tr = testResult[0, i];
                var ex = expect[i];
                Assert.IsTrue(System.Math.Abs(tr - ex) < 0.000001);
            }
        }