Thank you so much for this tutorial!! It is so helpful. For anyone interested out there. I experimented changing the width and length of the NN architecture. I obtained the best results by increasing the width of the NN. Changing the length did not help to obtain better results.
Wow, this is a really wonderful resource and tutorial. Thanks so much posting it. Is it possible to provide a link to the Colab notebook, so that others can work through the code? Thanks again.
is "t[:batch_time]" in get_batch correct? shouldn't we get the corresponding time points from `t` instead of a constant first `batch_time` elements from t?
Here is the reason. The NN is approximating the dynamic system which has an analytical form of y'=A*y^3. Where A in this eqaution is equal to the transpose of the A she is using. By scalar cubing the input y --> y^3 the NN's parameters are only learning the approximation for A. The reason I can only assume is to remove some of the non-linearity that the NN has to approximate. This seems a bit inpractical in a general sense because you don't always know the analytic form of the model. If we just had the data points from the solution of y'=A*y^3, we wouldn't have that intuition to cube the input before passing it to the NN. Hope this helps.
@@themightyquinn100 I agree with that explanation. I tried removing the y^3 and the results were bad. I even considered a deeper and wider architecture for the network, but did not help.
Thank you so much for this tutorial!! It is so helpful. For anyone interested out there. I experimented changing the width and length of the NN architecture. I obtained the best results by increasing the width of the NN. Changing the length did not help to obtain better results.
Thanks for your video 🙏
Wow, this is a really wonderful resource and tutorial. Thanks so much posting it. Is it possible to provide a link to the Colab notebook, so that others can work through the code? Thanks again.
is "t[:batch_time]" in get_batch correct? shouldn't we get the corresponding time points from `t` instead of a constant first `batch_time` elements from t?
Why in the forward method of ODEFunc do you have self.net(y**3)? Why not just self.net(y) since y is the input to the network?
Here is the reason. The NN is approximating the dynamic system which has an analytical form of y'=A*y^3. Where A in this eqaution is equal to the transpose of the A she is using. By scalar cubing the input y --> y^3 the NN's parameters are only learning the approximation for A. The reason I can only assume is to remove some of the non-linearity that the NN has to approximate. This seems a bit inpractical in a general sense because you don't always know the analytic form of the model. If we just had the data points from the solution of y'=A*y^3, we wouldn't have that intuition to cube the input before passing it to the NN. Hope this helps.
@@themightyquinn100 I agree with that explanation. I tried removing the y^3 and the results were bad. I even considered a deeper and wider architecture for the network, but did not help.
Can we have access to the notebook, please?
You can find all slides and codes at mp2893.com/course.html
@@mp2893 Thanks a lot