Dear colleagues,
We designed a DBN with memory t=2. We would like to train this DBN with temporal sequences of variable length.
That is, do we have to set the number of time-slices before the training and learning the parameters with EM? Does the number of time-slices have to be fixed for training and/or testing?
I am a bit confused with this issue. When I read the tutorial, it seems that the number of time-slices is fixed from the beginning.
How could we do this with SMILE and SMILearn? Is there any example available that I could use?
Thank you very much in advance.
Kind regards,
Oscar PC.
DBN for different lengths of sequential data
-
- Site Admin
- Posts: 1423
- Joined: Mon Nov 26, 2007 5:51 pm
Re: DBN for different lengths of sequential data
SMILearn's implementation of EM performs the learning on a copy of your network. When running on a DBN, this copy will have its slice count adjusted automatically to keep it in sync with the learning data. The only thing you need to do is to provide correct data/network matching; for DBN this will include proper value in the 'slice' member of DSL_datasetMatch.oscarpc wrote:Does the number of time-slices have to be fixed for training and/or testing?
Re: DBN for different lengths of sequential data
Thank you very much for your help.
Kind regards,
Oscar PC.
Kind regards,
Oscar PC.
Re: DBN for different lengths of sequential data
Dear colleagues,
Thank you so much for your prompt help with all my issues. As a new user, I really appreciate it. I like your software a lot.
As I continue programming, I encounter new problems. Sorry to bother you again.
Now that I have created my DBN, I have learnt its parameters with EM & set the evidences for inference, I would like to access the inference probability. That is, if I provided evidences for 4 slices, I would like to predict what is happening in the next node, the 5th.
Therefore, I need to access the probability of my last node in my DBN. How can I do that?
I read on previous posts that I have to access to the 2-dimensional DSL_Dmatrix associated with the node I want to read (DM in my case):
DSL_Dmatrix* Matrix=theNet.GetNode(handle_DM)->Value()->GetMatrix();
Once I have the matrix, I was trying to access it as Matrix[slice][outcome_index], but it doesn't work.
I also read that I can use the Matrix->operator [](), but I don't know how to use it. It says that operator accepts DSL_intArray or plain integers.
Could you please provide an example of how can I read the probabilities by using operator or what you think is more convenient to use?
In addition, I was wondering if DSL_sysCoordinates is also useful for this purpose
DSL_sysCoordinates theCoordinates(*theNet.GetNode(handle_DM)->Value());
theCoordinates.LinkTo(*theNet.GetNode(handle_DM)->Value());
Thank you so much in advance for your help.
Kind regards,
Oscar PC.
Thank you so much for your prompt help with all my issues. As a new user, I really appreciate it. I like your software a lot.
As I continue programming, I encounter new problems. Sorry to bother you again.
Now that I have created my DBN, I have learnt its parameters with EM & set the evidences for inference, I would like to access the inference probability. That is, if I provided evidences for 4 slices, I would like to predict what is happening in the next node, the 5th.
Therefore, I need to access the probability of my last node in my DBN. How can I do that?
I read on previous posts that I have to access to the 2-dimensional DSL_Dmatrix associated with the node I want to read (DM in my case):
DSL_Dmatrix* Matrix=theNet.GetNode(handle_DM)->Value()->GetMatrix();
Once I have the matrix, I was trying to access it as Matrix[slice][outcome_index], but it doesn't work.
I also read that I can use the Matrix->operator [](), but I don't know how to use it. It says that operator accepts DSL_intArray or plain integers.
Could you please provide an example of how can I read the probabilities by using operator or what you think is more convenient to use?
In addition, I was wondering if DSL_sysCoordinates is also useful for this purpose
DSL_sysCoordinates theCoordinates(*theNet.GetNode(handle_DM)->Value());
theCoordinates.LinkTo(*theNet.GetNode(handle_DM)->Value());
Thank you so much in advance for your help.
Kind regards,
Oscar PC.
-
- Site Admin
- Posts: 1423
- Joined: Mon Nov 26, 2007 5:51 pm
Re: DBN for different lengths of sequential data
To use DSL_Dmatrix with multi-dimensional coordinates, try the following:
The 'plain integers' option involves the use of an array of pointers to integers and doesn't have any advantages if you don't plan to map one DSL_Dmatrix onto another.
Alternatively, you can can calculate the linear index into the matrix yourself if you know the outcome count of a node:
Code: Select all
DSL_intArray coords;
coords.Add(slice);
coords.Add(outcome);
double p = (*Matrix)[coords];
Alternatively, you can can calculate the linear index into the matrix yourself if you know the outcome count of a node:
Code: Select all
double p = (*Matrix)[outcome + slice * outcomeCount];