question

JingwenPan-2199 avatar image
0 Votes"
JingwenPan-2199 asked JingwenPan-2199 answered

Compiler error "consume excess memory due to the indexing expression"

Hi, I am trying to construct a Bayesian network that contains 8 parents(which are iKorean, iOthrserv, iMay, dYrsserv, iSept80, iVietnam and iFeb55) pointing to 1 child(which is iRvetserv), and while compiling, I got the error like this:

" [1] This model will consume excess memory due to the indexing expression CPTiRvetserv[iKorean[N]][iOthrserv[N]][iMay[N]][iWWll[N]][dYrsserv[N]][iSept80[N]][iVietnam[N]][iFeb55[N]] since iVietnam[N] and iFeb55[N] have larger depth than the compiler can handle.
[2] This model will consume excess memory due to the indexing expression CPTiRvetserv[iKorean[N]][iOthrserv[N]][iMay[N]][iWWll[N]][dYrsserv[N]][iSept80[N]][iVietnam[N]] since iSept80[N] and iVietnam[N] have larger depth than the compiler can handle.
[3] This model will consume excess memory due to the indexing expression CPTiRvetserv[iKorean[N]][iOthrserv[N]][iMay[N]][iWWll[N]][dYrsserv[N]][iSept80[N]] since dYrsserv[N] and iSept80[N] have larger depth than the compiler can handle.
[4] This model will consume excess memory due to the indexing expression CPTiRvetserv[iKorean[N]][iOthrserv[N]][iMay[N]][iWWll[N]][dYrsserv[N]] since iWWll[N] and dYrsserv[N] have larger depth than the compiler can handle.
[5] This model will consume excess memory due to the indexing expression CPTiRvetserv[iKorean[N]][iOthrserv[N]][iMay[N]][iWWll[N]] since iMay[N] and iWWll[N] have larger depth than the compiler can handle."

And here is my code:

using System;
using Microsoft.ML.Probabilistic.Models; //For modelling Bernoulli distribution
using Microsoft.ML.Probabilistic.Math;
using Microsoft.ML.Probabilistic.Distributions;
using Range = Microsoft.ML.Probabilistic.Models.Range;
using System.Linq;

namespace learningdotnet
{
public class BN2model
{
// Primary random variables
public Variable<int> NumberOfExamples;
public VariableArray<int> iKorean;
public VariableArray<int> iOthrserv;
public VariableArray<int> iMay;
public VariableArray<int> iWWll;
public VariableArray<int> dYrsserv;
public VariableArray<int> iSept80;
public VariableArray<int> iVietnam;
public VariableArray<int> iFeb55;
public VariableArray<int> iRvetserv;

     //parents
     public Variable<Vector> ProbiKorean;
     public Variable<Vector> ProbiOthrserv;
     public Variable<Vector> ProbiMay;
     public Variable<Vector> ProbiWWll;
     public Variable<Vector> ProbdYrsserv;
     public Variable<Vector> ProbiSept80;
     public Variable<Vector> ProbiVietnam;
     public Variable<Vector> ProbiFeb55;
     //child
     public VariableArray<VariableArray<VariableArray<VariableArray<VariableArray<VariableArray<VariableArray<VariableArray<Vector>, Vector[][]>, Vector[][][]>, Vector[][][][]>, Vector[][][][][]>, Vector[][][][][][]>, Vector[][][][][][][]>, Vector[][][][][][][][]> CPTiRvetserv;

     public Variable<Dirichlet> ProbiKoreanPrior;
     public Variable<Dirichlet> ProbiOthrservPrior;
     public Variable<Dirichlet> ProbiMayPrior;
     public Variable<Dirichlet> ProbiWWllPrior;
     public Variable<Dirichlet> ProbdYrsservPrior;
     public Variable<Dirichlet> ProbiSept80Prior;
     public Variable<Dirichlet> ProbiVietnamPrior;
     public Variable<Dirichlet> ProbiFeb55Prior;
     public VariableArray<VariableArray<VariableArray<VariableArray<VariableArray<VariableArray<VariableArray<VariableArray<Dirichlet>, Dirichlet[][]>, Dirichlet[][][]>, Dirichlet[][][][]>, Dirichlet[][][][][]>, Dirichlet[][][][][][]>, Dirichlet[][][][][][][]>, Dirichlet[][][][][][][][]> CPTiRvetservPrior;

     //parameters to be learnt
     public Dirichlet ProbiKoreanPosterior;
     public Dirichlet ProbiOthrservPosterior;
     public Dirichlet ProbiMayPosterior;
     public Dirichlet ProbiWWllPosterior;
     public Dirichlet ProbdYrsservPosterior;
     public Dirichlet ProbiSept80Posterior;
     public Dirichlet ProbiVietnamPosterior;
     public Dirichlet ProbiFeb55Posterior;
     public Dirichlet[][][][][][][][] CPTiRvetservPosterior;

     public InferenceEngine Engine = new InferenceEngine();

     public BN2model()
     {
         // Set up the ranges
         NumberOfExamples = Variable.New<int>().Named("NofE");
         Range N = new Range(NumberOfExamples).Named("N");

         // Variables have just 2 states (go to this attribute/not go to this attribute)
         Range R1 = new Range(2).Named("R1"); //iKorean
         Range R2 = new Range(2).Named("R2"); //iOthrserv
         Range R3 = new Range(2).Named("R3"); //iMay
         Range R4 = new Range(2).Named("R4"); //iWWll
         Range R5 = new Range(2).Named("R5"); //dYrsserv
         Range R6 = new Range(2).Named("R6"); //iSept80
         Range R7 = new Range(2).Named("R7"); //iVietnam
         Range R8 = new Range(2).Named("R8"); //iFeb55
         Range R9 = new Range(8).Named("R9"); //iRvetserv
         // Define the priors and the parameters
         ProbiKoreanPrior = Variable.New<Dirichlet>().Named("ProbiKoreanPrior");
         ProbiKorean = Variable<Vector>.Random(ProbiKoreanPrior).Named("ProbiKorean");
         ProbiKorean.SetValueRange(R1);

         ProbiOthrservPrior = Variable.New<Dirichlet>().Named("ProbiOthrservPrior");
         ProbiOthrserv = Variable<Vector>.Random(ProbiOthrservPrior).Named("ProbiOthrserv");
         ProbiOthrserv.SetValueRange(R2);

         ProbiMayPrior = Variable.New<Dirichlet>().Named("ProbiMayPrior");
         ProbiMay = Variable<Vector>.Random(ProbiMayPrior).Named("ProbiMay");
         ProbiMay.SetValueRange(R3);

         ProbiWWllPrior = Variable.New<Dirichlet>().Named("ProbiWWllPrior");
         ProbiWWll = Variable<Vector>.Random(ProbiWWllPrior).Named("ProbiWWll");
         ProbiWWll.SetValueRange(R4);

         ProbdYrsservPrior = Variable.New<Dirichlet>().Named("ProbdYrsservPrior");
         ProbdYrsserv = Variable<Vector>.Random(ProbdYrsservPrior).Named("ProbdYrsserv");
         ProbdYrsserv.SetValueRange(R5);

         ProbiSept80Prior = Variable.New<Dirichlet>().Named("ProbiSept80Prior");
         ProbiSept80 = Variable<Vector>.Random(ProbiSept80Prior).Named("ProbiSept80");
         ProbiSept80.SetValueRange(R6);

         ProbiVietnamPrior = Variable.New<Dirichlet>().Named("ProbiVietnamPrior");
         ProbiVietnam = Variable<Vector>.Random(ProbiVietnamPrior).Named("ProbiVietnam");
         ProbiVietnam.SetValueRange(R7);

         ProbiFeb55Prior = Variable.New<Dirichlet>().Named("ProbiFeb55Prior");
         ProbiFeb55 = Variable<Vector>.Random(ProbiFeb55Prior).Named("ProbiFeb55");
         ProbiFeb55.SetValueRange(R8);

         // iRvetserv probability table conditioned on iKorean,iOthrserv,iMay,iWWll,dYrsserv,iSept80,iVietnam,iFeb55
         CPTiRvetservPrior = Variable.Array(Variable.Array(Variable.Array(Variable.Array(Variable.Array(Variable.Array(Variable.Array(Variable.Array<Dirichlet>(R8), R7), R6), R5), R4), R3), R2), R1).Named("CPTiRvetservPrior");
         CPTiRvetserv = Variable.Array(Variable.Array(Variable.Array(Variable.Array(Variable.Array(Variable.Array(Variable.Array(Variable.Array<Vector>(R8), R7), R6), R5), R4), R3), R2), R1).Named("CPTiRvetserv");
         CPTiRvetserv[R1][R2][R3][R4][R5][R6][R7][R8] = Variable<Vector>.Random(CPTiRvetservPrior[R1][R2][R3][R4][R5][R6][R7][R8]);
         //[R8][R7][R6][R5][R4][R3][R2][R1]
         CPTiRvetserv.SetValueRange(R9);

         // define Bayesian network structure
         iKorean = Variable.Array<int>(N).Named("iKorean");
         iKorean[N] = Variable.Discrete(ProbiKorean).ForEach(N);

         iOthrserv = Variable.Array<int>(N).Named("iOthrserv");
         iOthrserv[N] = Variable.Discrete(ProbiOthrserv).ForEach(N);

         iMay = Variable.Array<int>(N).Named("iMay");
         iMay[N] = Variable.Discrete(ProbiMay).ForEach(N);

         iWWll = Variable.Array<int>(N).Named("iWWll");
         iWWll[N] = Variable.Discrete(ProbiWWll).ForEach(N);

         dYrsserv = Variable.Array<int>(N).Named("dYrsserv");
         dYrsserv[N] = Variable.Discrete(ProbdYrsserv).ForEach(N);

         iSept80 = Variable.Array<int>(N).Named("iSept80");
         iSept80[N] = Variable.Discrete(ProbiSept80).ForEach(N);

         iVietnam = Variable.Array<int>(N).Named("iVietnam");
         iVietnam[N] = Variable.Discrete(ProbiVietnam).ForEach(N);

         iFeb55 = Variable.Array<int>(N).Named("iFeb55");
         iFeb55[N] = Variable.Discrete(ProbiFeb55).ForEach(N);

         iRvetserv = AddChildFromEightParents(iKorean, iOthrserv, iMay, iWWll, dYrsserv, iSept80, iVietnam, iFeb55, CPTiRvetserv);

     }

     public static VariableArray<int> AddChildFromEightParents(
         VariableArray<int> p1,
         VariableArray<int> p2,
         VariableArray<int> p3,
         VariableArray<int> p4,
         VariableArray<int> p5,
         VariableArray<int> p6,
         VariableArray<int> p7,
         VariableArray<int> p8,
         VariableArray<VariableArray<VariableArray<VariableArray<VariableArray<VariableArray<VariableArray<VariableArray<Vector>, Vector[][]>, Vector[][][]>, Vector[][][][]>, Vector[][][][][]>, Vector[][][][][][]>, Vector[][][][][][][]>, Vector[][][][][][][][]> cpt)
     {
         var n = p1.Range;
         var child = Variable.Array<int>(n);

         using (Variable.ForEach(n))
         using (Variable.Switch(p1[n]))
         using (Variable.Switch(p2[n]))
         using (Variable.Switch(p3[n]))
         using (Variable.Switch(p4[n]))
         using (Variable.Switch(p5[n]))
         using (Variable.Switch(p6[n]))
         using (Variable.Switch(p7[n]))
         using (Variable.Switch(p8[n]))
             child[n] = Variable.Discrete(cpt[p1[n]][p2[n]][p3[n]][p4[n]][p5[n]][p6[n]][p7[n]][p8[n]]); 
         return child;
     }

     public void LearnParameters(
         int[] ikorean,
         int[] iothrserv,
         int[] imay,
         int[] iwwll,
         int[] dyrsserv,
         int[] isept80,
         int[] ivietnam,
         int[] ifeb55,
         Dirichlet probikoreanPrior,
         Dirichlet probiothrservPrior,
         Dirichlet probimayPrior,
         Dirichlet probiwwllPrior,
         Dirichlet probdyrsservPrior,
         Dirichlet probisept80Prior,
         Dirichlet probivietnamPrior,
         Dirichlet probifeb55Prior,
         Dirichlet[][][][][][][][] cpt)
     {
         NumberOfExamples.ObservedValue = ikorean.Length;
         iKorean.ObservedValue = ikorean;
         iOthrserv.ObservedValue = iothrserv;
         iMay.ObservedValue = imay;
         iWWll.ObservedValue = iwwll;
         dYrsserv.ObservedValue = dyrsserv;
         iSept80.ObservedValue = isept80;
         iVietnam.ObservedValue = ivietnam;
         iFeb55.ObservedValue = ifeb55;

         ProbiKoreanPrior.ObservedValue = probikoreanPrior;
         ProbiOthrservPrior.ObservedValue = probiothrservPrior;
         ProbiMayPrior.ObservedValue = probimayPrior;
         ProbiWWllPrior.ObservedValue = probiwwllPrior;
         ProbdYrsservPrior.ObservedValue = probdyrsservPrior;
         ProbiSept80Prior.ObservedValue = probisept80Prior;
         ProbiVietnamPrior.ObservedValue = probivietnamPrior;
         ProbiFeb55Prior.ObservedValue = probifeb55Prior;
         CPTiRvetservPrior.ObservedValue = cpt;

         // Inference
         ProbiKoreanPosterior = Engine.Infer<Dirichlet>(ProbiKorean);
         ProbiOthrservPosterior = Engine.Infer<Dirichlet>(ProbiOthrserv);
         ProbiMayPosterior = Engine.Infer<Dirichlet>(ProbiMay);
         ProbiWWllPosterior = Engine.Infer<Dirichlet>(ProbiWWll);
         ProbdYrsservPosterior = Engine.Infer<Dirichlet>(ProbdYrsserv);
         ProbiSept80Posterior = Engine.Infer<Dirichlet>(ProbiSept80);
         ProbiVietnamPosterior = Engine.Infer<Dirichlet>(ProbiVietnam);
         ProbiFeb55Posterior = Engine.Infer<Dirichlet>(ProbiFeb55);

         CPTiRvetservPosterior = Engine.Infer<Dirichlet[][][][][][][][]>(CPTiRvetserv);
     }

     public void LearnParameters(
         int[] ikorean,
         int[] iothrserv,
         int[] imay,
         int[] iwwll,
         int[] dyrsserv,
         int[] isept80,
         int[] ivietnam,
         int[] ifeb55)
     {
         // Set all priors to uniform
         Dirichlet probikoreanPrior = Dirichlet.Uniform(2);
         Dirichlet probiothrservPrior = Dirichlet.Uniform(2);
         Dirichlet probimayPrior = Dirichlet.Uniform(2);
         Dirichlet probiwwllPrior = Dirichlet.Uniform(2);
         Dirichlet probdyrsservPrior = Dirichlet.Uniform(2);
         Dirichlet probisept80Prior = Dirichlet.Uniform(2);
         Dirichlet probivietnamPrior = Dirichlet.Uniform(2);
         Dirichlet probifeb55Prior = Dirichlet.Uniform(2);

         Dirichlet[] arr1 = Enumerable.Repeat(Dirichlet.Uniform(2), 2).ToArray();
         Dirichlet[][] arr2 = Enumerable.Repeat(arr1, 2).ToArray();
         Dirichlet[][][] arr3 = Enumerable.Repeat(arr2, 2).ToArray();
         Dirichlet[][][][] arr4 = Enumerable.Repeat(arr3, 2).ToArray();
         Dirichlet[][][][][] arr5 = Enumerable.Repeat(arr4, 2).ToArray();
         Dirichlet[][][][][][] arr6 = Enumerable.Repeat(arr5, 2).ToArray();
         Dirichlet[][][][][][][] arr7 = Enumerable.Repeat(arr6, 2).ToArray();
         Dirichlet[][][][][][][][] cpt = Enumerable.Repeat(arr7, 2).ToArray();

         LearnParameters(ikorean, iothrserv, imay, iwwll, dyrsserv, isept80, ivietnam, ifeb55,
                         probikoreanPrior, probiothrservPrior, probimayPrior, probiwwllPrior,
                         probdyrsservPrior, probisept80Prior, probivietnamPrior, probifeb55Prior, cpt);
     }
 }

 public class BN2
 {
     public static void infer()
     {
         // Set random seed for repeatable example
         Rand.Restart(12347);

         // Create a new model
         BN2model model = new BN2model();
         // Each variable just takes two states - true (index 0) and false (index 1).

         // -------------------------------------------------------------
         // Learn posterior distributions for the parameters
         // -------------------------------------------------------------
         Console.WriteLine("\n*********************************************");
         Console.WriteLine("Learning parameters from data (uniform prior)");
         Console.WriteLine("*********************************************");
         int[] ikorean = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
         int[] iothrserv = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
         int[] imay = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
         int[] iwwll = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
         int[] dyrsserv = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0 };
         int[] isept80 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 };
         int[] ivietnam = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 };
         int[] ifeb55 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

         // Now see if we can recover the parameters from the data - assume uniform priors
         model.LearnParameters(ikorean,iothrserv,imay,iwwll,dyrsserv,isept80,ivietnam,ifeb55);

         // The posteriors are distributions over the probabilities and CPTs. Print out the means of these
         // distributions, and compare with the ground truth
         Console.WriteLine("Prob. iKorean:                               Inferred: {1:0.00}", model.ProbiKoreanPosterior.GetMean()[0]);
         Console.WriteLine("Prob. iOthrserv:                   Inferred: {1:0.00}", model.ProbiOthrservPosterior.GetMean()[0]);
         Console.WriteLine("Prob. iMay:               Inferred: {1:0.00}", model.ProbiMayPosterior.GetMean()[0]);
         Console.WriteLine("Prob. iWWII:                   Inferred: {1:0.00}", model.ProbiWWllPosterior.GetMean()[0]);
         Console.WriteLine("Prob. dYrsserv:               Inferred: {1:0.00}", model.ProbdYrsservPosterior.GetMean()[0]);
         Console.WriteLine("Prob. iSept80:          Inferred: {1:0.00}", model.ProbiSept80Posterior.GetMean()[0]);
         Console.WriteLine("Prob. iVietnam       Inferred: {1:0.00}", model.ProbiVietnamPosterior.GetMean()[0]);
         Console.WriteLine("Prob. iFeb55:      Inferred: {1:0.00}", model.ProbiFeb55Posterior.GetMean()[0]);
         Console.WriteLine("Prob. iRvetserv|iKorean,iOthrserv,iMay,iWWII,dYrsserv,iSept80,iVietnam,iFeb55:  Inferred: {1:0.00}", model.CPTiRvetservPosterior[0][0][0][0][0][0][0][0].GetMean()[0]);

     }
 }

}

I wonder how should I fix this error. Thank you so much for help!

Jingwen

dotnet-csharpdotnet-ml-big-data
· 2
5 |1600 characters needed characters left characters exceeded

Up to 10 attachments (including images) can be used with a maximum of 3.0 MiB each and 30.0 MiB total.

Hi @JingwenPan-2199 ,

I noticed that you asked another similar question on the forum:

https://docs.microsoft.com/en-us/answers/questions/682263/training-bayesian-network-with-infernet-but-doesn3.html

Are they the same problem?

Best Regards,
Jiale Xue

0 Votes 0 ·

Hi @JialeXueMSFT-4441,

They are completely different questions, although the ways of constructing those Bayesian networks are similar, modified from Microsoft tutorial example WetGrassSprinklerRain. This question asked about the compiling error when executing this line:

child[n] = Variable.Discrete(cpt[p1[n]][p2[n]][p3[n]][p4[n]][p5[n]][p6[n]][p7[n]][p8[n]]);

The other one might be more general and I asked that one because I didn't infer the right probabilities I think I should get. Sorry that I am new to Infer.NET so I have quite amount of questions to ask. Thank you so much for help!

Jingwen

0 Votes 0 ·

1 Answer

JingwenPan-2199 avatar image
0 Votes"
JingwenPan-2199 answered

Solved. The warning didn't cause any problem. The error referred to this line "Console.WriteLine("Prob. iKorean: Inferred: {1:0.00}", model.ProbiKoreanPosterior.GetMean()[0]);" ,which should be "Console.WriteLine("Prob. iKorean: Inferred: {0:0.00}", model.ProbiKoreanPosterior.GetMean()[0]);".

5 |1600 characters needed characters left characters exceeded

Up to 10 attachments (including images) can be used with a maximum of 3.0 MiB each and 30.0 MiB total.