public void GlorotUniformTest() { var init = new GlorotUniform(); var m = init.Initialize(new Matrix(2, 2)); Assert.IsTrue(Math.Abs(m.FrobeniusNorm()) > 0.01, init.Type().ToString() + " Initializer."); }
/// <summary> /// Turns positive integers (indexes) into dense vectors of fixed size. eg. [[4], [20]] -> [[0.25, 0.1], [0.6, -0.2]]. This layer can only be used as the first layer in a model. /// </summary> /// <param name="shape">The shape of the input.</param> /// <param name="embeddingDim">The dim of the output space.</param> /// <param name="initializers">The weight initializers for this layer.</param> /// <returns></returns> public static Function Embedding(Variable layer, int embeddingDim, Initializer initializers = null) { if (initializers == null) { initializers = new GlorotUniform(); } var embeddingParameters = new Parameter(new int[] { embeddingDim, layer.Shape[0] }, DataType.Float, initializers.Get(), GlobalParameters.Device); return(CNTKLib.Times(embeddingParameters, layer)); }
/// <summary> /// Turns positive integers (indexes) into dense vectors of fixed size. eg. [[4], [20]] -> [[0.25, 0.1], [0.6, -0.2]]. This layer can only be used as the first layer in a model. /// </summary> /// <param name="shape">The shape of the input.</param> /// <param name="embeddingDim">The dim of the output space.</param> /// <param name="initializers">The weight initializers for this layer.</param> /// <returns></returns> public static Function Embedding(int shape, int embeddingDim, Initializer initializers = null) { if (initializers == null) { initializers = new GlorotUniform(); } var input = CNTKLib.InputVariable(new int[] { shape }, true, DataType.Float); var embeddingParameters = new Parameter(new int[] { embeddingDim, shape }, DataType.Float, initializers.Get(), GlobalParameters.Device); return(CNTKLib.Times(embeddingParameters, input)); }