Compare commits
96 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5302b32929 | ||
|
|
d5586e57fc | ||
|
|
d0acc42d81 | ||
|
|
f3188ac35a | ||
|
|
ad1b6a558b | ||
|
|
7eadd56eaa | ||
|
|
53c1357df7 | ||
|
|
8d862ede26 | ||
|
|
44bbfbed91 | ||
|
|
f65f0b1ddf | ||
|
|
1d6d6b6fbe | ||
|
|
62779ec260 | ||
|
|
be3edb60f9 | ||
|
|
b9403e091b | ||
|
|
2c916d9a87 | ||
|
|
310b71e203 | ||
|
|
fcb1333aed | ||
|
|
c39267b3b4 | ||
|
|
4291ed453c | ||
|
|
ab2ff3177a | ||
|
|
c2a4d40da3 | ||
|
|
aa75d3ad73 | ||
|
|
1f0c224a7d | ||
|
|
eb29a28284 | ||
|
|
7648203767 | ||
|
|
64e1d82d04 | ||
|
|
f7450d1875 | ||
|
|
884a7e358b | ||
|
|
2016977f30 | ||
|
|
f88127c0d2 | ||
|
|
a637eec888 | ||
|
|
ddd6bf9149 | ||
|
|
0b41646bf3 | ||
|
|
16afbcdf83 | ||
|
|
b0add1f8e2 | ||
|
|
03ebe5a039 | ||
|
|
41e8262f20 | ||
|
|
2c6e1cb9f8 | ||
|
|
6c99c6b7eb | ||
|
|
0988ae8bd0 | ||
|
|
2cca6dec75 | ||
|
|
49d74b66a9 | ||
|
|
13c0ad30fe | ||
|
|
95549683c4 | ||
|
|
9649ce382b | ||
|
|
666cbb02d5 | ||
|
|
f0337130cb | ||
|
|
472571aef0 | ||
|
|
13b39c2f72 | ||
|
|
84a11d68ed | ||
|
|
653d2f7b84 | ||
|
|
a7ed3e2c34 | ||
|
|
40a2c3ca8b | ||
|
|
fb66cd682d | ||
|
|
88e8526fa7 | ||
|
|
667346fbdd | ||
|
|
4e564088a1 | ||
|
|
f1c07f53bf | ||
|
|
623b9782e7 | ||
|
|
60c5a48477 | ||
|
|
b4688bda68 | ||
|
|
faf34e0887 | ||
|
|
8f2ef53eab | ||
|
|
2f0339341c | ||
|
|
f8acbaab82 | ||
|
|
2aaaef0838 | ||
|
|
9a2039d392 | ||
|
|
6d76e47849 | ||
|
|
b5c65665b6 | ||
|
|
dd9a56d96b | ||
|
|
9b71ac0487 | ||
|
|
eaff933ff7 | ||
|
|
c3dfe95700 | ||
|
|
7082ae8620 | ||
|
|
6072ad4450 | ||
|
|
33197fde36 | ||
|
|
6d425c04d4 | ||
|
|
57c95132d3 | ||
|
|
2b0ac95740 | ||
|
|
d5f198f2d8 | ||
|
|
4edd8c923d | ||
|
|
1adb96e006 | ||
|
|
3801b8d52d | ||
|
|
dc6b346bda | ||
|
|
5eb264540d | ||
|
|
7ba844f2b5 | ||
|
|
be86733a93 | ||
|
|
d101aa428b | ||
|
|
8c6e40daee | ||
|
|
efafb942eb | ||
|
|
b10a2b6940 | ||
|
|
ede7247a0c | ||
|
|
c3b97af456 | ||
|
|
e1df2156a3 | ||
|
|
f887835646 | ||
|
|
e9c8d846f2 |
432
Blogs/BorealisODENumerical.ipynb
Normal file
432
Blogs/BorealisODENumerical.ipynb
Normal file
@@ -0,0 +1,432 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "view-in-github",
|
||||
"colab_type": "text"
|
||||
},
|
||||
"source": [
|
||||
"<a href=\"https://colab.research.google.com/github/udlbook/udlbook/blob/main/Blogs/BorealisODENumerical.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "JXsO7ce7oqeq"
|
||||
},
|
||||
"source": [
|
||||
"# Numerical methods for ODEs\n",
|
||||
"\n",
|
||||
"This blog contains code that accompanies the RBC Borealis blog on numerical methods for ODEs. Contact udlbookmail@gmail.com if you find any problems."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "AnvAKtP_oqes"
|
||||
},
|
||||
"source": [
|
||||
"Import relevant libraries"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "UF-gJyZggyrl"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"import matplotlib.pyplot as plt"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "szWLVrSSoqet"
|
||||
},
|
||||
"source": [
|
||||
"Define the ODE that we will be experimenting with."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "NkrGZLL6iM3P"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# The ODE that we will experiment with\n",
|
||||
"def ode_lin_homog(t,x):\n",
|
||||
" return 0.5 * x ;\n",
|
||||
"\n",
|
||||
"# The derivative of the ODE function with respect to x (needed for Taylor's method)\n",
|
||||
"def ode_lin_homog_deriv_x(t,x):\n",
|
||||
" return 0.5 ;\n",
|
||||
"\n",
|
||||
"# The derivative of the ODE function with respect to t (needed for Taylor's method)\n",
|
||||
"def ode_lin_homog_deriv_t(t,x):\n",
|
||||
" return 0.0 ;\n",
|
||||
"\n",
|
||||
"# The closed form solution (so we can measure the error)\n",
|
||||
"def ode_lin_homog_soln(t,C=0.5):\n",
|
||||
" return C * np.exp(0.5 * t) ;"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "In1C9wZkoqet"
|
||||
},
|
||||
"source": [
|
||||
"This is a generic method that runs the numerical methods. It takes the initial conditions ($t_0$, $x_0$), the final time $t_1$ and the step size $h$. It also takes the ODE function itself and its derivatives (only used for Taylor's method). Finally, the parameter \"step_function\" is the method used to update (e.g., Euler's methods, Runge-Kutte 4-step)."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "VZfZDJAfmyrf"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def run_numerical(x_0, t_0, t_1, h, ode_func, ode_func_deriv_x, ode_func_deriv_t, ode_soln, step_function):\n",
|
||||
" x = [x_0]\n",
|
||||
" t = [t_0]\n",
|
||||
" while (t[-1] <= t_1):\n",
|
||||
" x = x+[step_function(x[-1],t[-1],h, ode_func, ode_func_deriv_x, ode_func_deriv_t)]\n",
|
||||
" t = t + [t[-1]+h]\n",
|
||||
"\n",
|
||||
" # Returns x,y plot plus total numerical error at last point.\n",
|
||||
" return t, x, np.abs(ode_soln(t[-1])-x[-1])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "Vfkc3-_7oqet"
|
||||
},
|
||||
"source": [
|
||||
"Run the numerical method with step sizes of 2.0, 1.0, 0.5, 0.25, 0.125, 0.0675 and plot the results"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "1tyGbMZhoqeu"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def run_and_plot(ode, ode_deriv_x, ode_deriv_t, ode_solution, step_function):\n",
|
||||
" # Specify the grid of points to draw the ODE\n",
|
||||
" t = np.arange(0.04, 4.0, 0.2)\n",
|
||||
" x = np.arange(0.04, 4.0, 0.2)\n",
|
||||
" T, X = np.meshgrid(t,x)\n",
|
||||
"\n",
|
||||
" # ODE equation at these grid points (used to draw quiver-plot)\n",
|
||||
" dx = ode(T,X)\n",
|
||||
" dt = np.ones(dx.shape)\n",
|
||||
"\n",
|
||||
" # The ground truth solution\n",
|
||||
" t2= np.arange(0,10,0.1)\n",
|
||||
" x2 = ode_solution(t2)\n",
|
||||
"\n",
|
||||
" #####################################x_0, t_0, t_1, h #################################################\n",
|
||||
" t_sim1,x_sim1,error1 = run_numerical(0.5, 0.0, 4.0, 2.0000, ode, ode_deriv_x, ode_deriv_t, ode_solution, step_function)\n",
|
||||
" t_sim2,x_sim2,error2 = run_numerical(0.5, 0.0, 4.0, 1.0000, ode, ode_deriv_x, ode_deriv_t, ode_solution, step_function)\n",
|
||||
" t_sim3,x_sim3,error3 = run_numerical(0.5, 0.0, 4.0, 0.5000, ode, ode_deriv_x, ode_deriv_t, ode_solution, step_function)\n",
|
||||
" t_sim4,x_sim4,error4 = run_numerical(0.5, 0.0, 4.0, 0.2500, ode, ode_deriv_x, ode_deriv_t, ode_solution, step_function)\n",
|
||||
" t_sim5,x_sim5,error5 = run_numerical(0.5, 0.0, 4.0, 0.1250, ode, ode_deriv_x, ode_deriv_t, ode_solution, step_function)\n",
|
||||
" t_sim6,x_sim6,error6 = run_numerical(0.5, 0.0, 4.0, 0.0675, ode, ode_deriv_x, ode_deriv_t, ode_solution, step_function)\n",
|
||||
"\n",
|
||||
" # Plot the ODE and ground truth solution\n",
|
||||
" fig,ax = plt.subplots()\n",
|
||||
" ax.quiver(T,X,dt,dx, scale=35.0)\n",
|
||||
" ax.plot(t2,x2,'r-')\n",
|
||||
"\n",
|
||||
" # Plot the numerical approximations\n",
|
||||
" ax.plot(t_sim1,x_sim1,'.-',markeredgecolor='#773c23ff',markerfacecolor='#d18362', color='#d18362', markersize=10)\n",
|
||||
" ax.plot(t_sim2,x_sim2,'.-',markeredgecolor='#773c23ff',markerfacecolor='#d18362', color='#d18362', markersize=10)\n",
|
||||
" ax.plot(t_sim3,x_sim3,'.-',markeredgecolor='#773c23ff',markerfacecolor='#d18362', color='#d18362', markersize=10)\n",
|
||||
" ax.plot(t_sim4,x_sim4,'.-',markeredgecolor='#773c23ff',markerfacecolor='#d18362', color='#d18362', markersize=10)\n",
|
||||
" ax.plot(t_sim5,x_sim5,'.-',markeredgecolor='#773c23ff',markerfacecolor='#d18362', color='#d18362', markersize=10)\n",
|
||||
" ax.plot(t_sim6,x_sim6,'.-',markeredgecolor='#773c23ff',markerfacecolor='#d18362', color='#d18362', markersize=10)\n",
|
||||
"\n",
|
||||
" ax.set_aspect('equal')\n",
|
||||
" ax.set_xlim(0,4)\n",
|
||||
" ax.set_ylim(0,4)\n",
|
||||
"\n",
|
||||
" plt.show()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "JYrq8QIwvOIy"
|
||||
},
|
||||
"source": [
|
||||
"# Euler Method\n",
|
||||
"\n",
|
||||
"Define the Euler method and set up functions for plotting."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "N73xMnCukVVX"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def euler_step(x_0, t_0, h, ode_func, ode_func_deriv_x=None, ode_func_deriv_t=None):\n",
|
||||
" return x_0 + h * ode_func(t_0, x_0) ;"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "4B1_PGEcsZ9H"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"run_and_plot(ode_lin_homog, None, None, ode_lin_homog_soln, euler_step)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "FfwNihtkvJeX"
|
||||
},
|
||||
"source": [
|
||||
"# Heun's Method"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "srHfNDcDxI1o"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def heun_step(x_0, t_0, h, ode_func, ode_func_deriv_x=None, ode_func_deriv_t=None):\n",
|
||||
" f_x0_t0 = ode_func(t_0, x_0)\n",
|
||||
" return x_0 + h/2 * ( f_x0_t0 + ode_func(t_0+h, x_0+h*f_x0_t0)) ;"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "WOApHz9xoqev"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"run_and_plot(ode_lin_homog, None, None, ode_lin_homog_soln, heun_step)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "0XSzzFDIvRhm"
|
||||
},
|
||||
"source": [
|
||||
"# Modified Euler method"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "fSXprgVJ5Yep"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def modified_euler_step(x_0, t_0, h, ode_func, ode_func_deriv_x=None, ode_func_deriv_t=None):\n",
|
||||
" f_x0_t0 = ode_func(t_0, x_0)\n",
|
||||
" return x_0 + h * ode_func(t_0+h/2, x_0+ h * f_x0_t0/2) ;"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "8LKSrCD2oqev"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"run_and_plot(ode_lin_homog, None, None, ode_lin_homog_soln, modified_euler_step)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "yp8ZBpwooqev"
|
||||
},
|
||||
"source": [
|
||||
"# Second order Taylor's method"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "NtBBgzWLoqev"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def taylor_2nd_order(x_0, t_0, h, ode_func, ode_func_deriv_x, ode_func_deriv_t):\n",
|
||||
" f1 = ode_func(t_0, x_0)\n",
|
||||
" return x_0 + h * ode_func(t_0, x_0) + (h*h/2) * (ode_func_deriv_x(t_0,x_0) * ode_func(t_0, x_0) + ode_func_deriv_t(t_0, x_0))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "ioeeIohUoqev"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"run_and_plot(ode_lin_homog, ode_lin_homog_deriv_x, ode_lin_homog_deriv_t, ode_lin_homog_soln, taylor_2nd_order)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "WcuhV5lL1zAJ"
|
||||
},
|
||||
"source": [
|
||||
"# Fourth Order Runge Kutta"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "0NZN81Bpwu56"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def runge_kutta_4_step(x_0, t_0, h, ode_func, ode_func_deriv_x=None, ode_func_deriv_t=None):\n",
|
||||
" f1 = ode_func(t_0, x_0)\n",
|
||||
" f2 = ode_func(t_0+h/2,x_0+f1 * h/2)\n",
|
||||
" f3 = ode_func(t_0+h/2,x_0+f2 * h/2)\n",
|
||||
" f4 = ode_func(t_0+h, x_0+ f3*h)\n",
|
||||
" return x_0 + (h/6) * (f1 + 2*f2 + 2*f3+f4)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "K-OxE9E6oqew"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"run_and_plot(ode_lin_homog, None, None, ode_lin_homog_soln, runge_kutta_4_step)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "7JifxBhhoqew"
|
||||
},
|
||||
"source": [
|
||||
"# Plot the error as a function of step size"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "ZoEpmlCfsi9P"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Run systematically with a number of different step sizes and store errors for each\n",
|
||||
"def get_errors(ode, ode_deriv_x, ode_deriv_t, ode_solution, step_function):\n",
|
||||
" # Choose the step size h to divide the plotting interval into 1,2,4,8... segments.\n",
|
||||
" # The plots in the article add a few more smaller step sizes, but this takes a while to compute.\n",
|
||||
" # Add them back in if you want the full plot.\n",
|
||||
" all_h = (1./np.array([1,2,4,8,16,32,64,128,256,512,1024,2048,4096])).tolist()\n",
|
||||
" all_err = []\n",
|
||||
"\n",
|
||||
" for i in range(len(all_h)):\n",
|
||||
" t_sim,x_sim,err = run_numerical(0.5, 0.0, 4.0, all_h[i], ode, ode_deriv_x, ode_deriv_t, ode_solution, step_function)\n",
|
||||
" all_err = all_err + [err]\n",
|
||||
"\n",
|
||||
" return all_h, all_err"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "X0O0KK47xF28"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Plot the errors\n",
|
||||
"all_h, all_err_euler = get_errors(ode_lin_homog, ode_lin_homog_deriv_x, ode_lin_homog_deriv_t, ode_lin_homog_soln, euler_step)\n",
|
||||
"all_h, all_err_heun = get_errors(ode_lin_homog, ode_lin_homog_deriv_x, ode_lin_homog_deriv_t, ode_lin_homog_soln, heun_step)\n",
|
||||
"all_h, all_err_mod_euler = get_errors(ode_lin_homog, ode_lin_homog_deriv_x, ode_lin_homog_deriv_t, ode_lin_homog_soln, modified_euler_step)\n",
|
||||
"all_h, all_err_taylor = get_errors(ode_lin_homog, ode_lin_homog_deriv_x, ode_lin_homog_deriv_t, ode_lin_homog_soln, taylor_2nd_order)\n",
|
||||
"all_h, all_err_rk = get_errors(ode_lin_homog, ode_lin_homog_deriv_x, ode_lin_homog_deriv_t, ode_lin_homog_soln, runge_kutta_4_step)\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"fig, ax = plt.subplots()\n",
|
||||
"ax.loglog(all_h, all_err_euler,'ro-')\n",
|
||||
"ax.loglog(all_h, all_err_heun,'bo-')\n",
|
||||
"ax.loglog(all_h, all_err_mod_euler,'go-')\n",
|
||||
"ax.loglog(all_h, all_err_taylor,'co-')\n",
|
||||
"ax.loglog(all_h, all_err_rk,'mo-')\n",
|
||||
"ax.set_ylim(1e-13,1e1)\n",
|
||||
"ax.set_xlim(1e-6,1e1)\n",
|
||||
"ax.set_aspect(0.5)\n",
|
||||
"ax.set_xlabel('Step size, $h$')\n",
|
||||
"ax.set_ylabel('Error')\n",
|
||||
"plt.show()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "BttOqpeo9MsJ"
|
||||
},
|
||||
"source": [
|
||||
"Note that for this ODE, the Heun, Modified Euler and Taylor methods provide EXACTLY the same updates, and so the error curves for all three are identical (subject to difference is numerical rounding errors). This is not in general the case, although the general trend would be the same for each."
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"provenance": [],
|
||||
"include_colab_link": true
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3 (ipykernel)",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.9.10"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 0
|
||||
}
|
||||
@@ -4,7 +4,6 @@
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"provenance": [],
|
||||
"authorship_tag": "ABX9TyNioITtfAcfxEfM3UOfQyb9",
|
||||
"include_colab_link": true
|
||||
},
|
||||
"kernelspec": {
|
||||
@@ -62,7 +61,7 @@
|
||||
"source": [
|
||||
"The number of regions $N$ created by a shallow neural network with $D_i$ inputs and $D$ hidden units is given by Zaslavsky's formula:\n",
|
||||
"\n",
|
||||
"\\begin{equation}N = \\sum_{j=0}^{D_{i}}\\binom{D}{j}=\\sum_{j=0}^{D_{i}} \\frac{D!}{(D-j)!j!} \\end{equation} <br>\n",
|
||||
"\\begin{equation}N = \\sum_{j=0}^{D_{i}}\\binom{D}{j}=\\sum_{j=0}^{D_{i}} \\frac{D!}{(D-j)!j!} \\end{equation} \n",
|
||||
"\n"
|
||||
],
|
||||
"metadata": {
|
||||
@@ -221,7 +220,7 @@
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"# Now let's plot the graph from figure 3.9a (takes ~1min)\n",
|
||||
"# Now let's plot the graph from figure 3.9b (takes ~1min)\n",
|
||||
"dims = np.array([1,5,10,50,100])\n",
|
||||
"regions = np.zeros((dims.shape[0], 200))\n",
|
||||
"params = np.zeros((dims.shape[0], 200))\n",
|
||||
|
||||
@@ -169,7 +169,7 @@
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"# Define parameters (note first dimension of theta and phi is padded to make indices match\n",
|
||||
"# Define parameters (note first dimension of theta and psi is padded to make indices match\n",
|
||||
"# notation in book)\n",
|
||||
"theta = np.zeros([4,2])\n",
|
||||
"psi = np.zeros([4,4])\n",
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"provenance": [],
|
||||
"authorship_tag": "ABX9TyO2DaD75p+LGi7WgvTzjrk1",
|
||||
"include_colab_link": true
|
||||
},
|
||||
"kernelspec": {
|
||||
@@ -31,7 +30,7 @@
|
||||
"source": [
|
||||
"# **Notebook 4.3 Deep neural networks**\n",
|
||||
"\n",
|
||||
"This network investigates converting neural networks to matrix form.\n",
|
||||
"This notebook investigates converting neural networks to matrix form.\n",
|
||||
"\n",
|
||||
"Work through the cells below, running each cell in turn. In various places you will see the words \"TODO\". Follow the instructions at these places and make predictions about what is going to happen or write code to complete the functions.\n",
|
||||
"\n",
|
||||
@@ -150,7 +149,7 @@
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"Now we'll define the same neural network, but this time, we will use matrix form. When you get this right, it will draw the same plot as above."
|
||||
"Now we'll define the same neural network, but this time, we will use matrix form as in equation 4.15. When you get this right, it will draw the same plot as above."
|
||||
],
|
||||
"metadata": {
|
||||
"id": "XCJqo_AjfAra"
|
||||
@@ -176,8 +175,8 @@
|
||||
"n1_in_mat = np.reshape(n1_in,(n_dim_in,n_data))\n",
|
||||
"\n",
|
||||
"# This runs the network for ALL of the inputs, x at once so we can draw graph\n",
|
||||
"h1 = ReLU(np.matmul(beta_0,np.ones((1,n_data))) + np.matmul(Omega_0,n1_in_mat))\n",
|
||||
"n1_out = np.matmul(beta_1,np.ones((1,n_data))) + np.matmul(Omega_1,h1)\n",
|
||||
"h1 = ReLU(beta_0 + np.matmul(Omega_0,n1_in_mat))\n",
|
||||
"n1_out = beta_1 + np.matmul(Omega_1,h1)\n",
|
||||
"\n",
|
||||
"# Draw the network and check that it looks the same as the non-matrix case\n",
|
||||
"plot_neural(n1_in, n1_out)"
|
||||
@@ -247,9 +246,9 @@
|
||||
"n1_in_mat = np.reshape(n1_in,(n_dim_in,n_data))\n",
|
||||
"\n",
|
||||
"# This runs the network for ALL of the inputs, x at once so we can draw graph (hence extra np.ones term)\n",
|
||||
"h1 = ReLU(np.matmul(beta_0,np.ones((1,n_data))) + np.matmul(Omega_0,n1_in_mat))\n",
|
||||
"h2 = ReLU(np.matmul(beta_1,np.ones((1,n_data))) + np.matmul(Omega_1,h1))\n",
|
||||
"n1_out = np.matmul(beta_2,np.ones((1,n_data))) + np.matmul(Omega_2,h2)\n",
|
||||
"h1 = ReLU(beta_0 + np.matmul(Omega_0,n1_in_mat))\n",
|
||||
"h2 = ReLU(beta_1 + np.matmul(Omega_1,h1))\n",
|
||||
"n1_out = beta_2 + np.matmul(Omega_2,h2)\n",
|
||||
"\n",
|
||||
"# Draw the network and check that it looks the same as the non-matrix version\n",
|
||||
"plot_neural(n1_in, n1_out)"
|
||||
@@ -291,10 +290,10 @@
|
||||
"\n",
|
||||
"\n",
|
||||
"# If you set the parameters to the correct sizes, the following code will run\n",
|
||||
"h1 = ReLU(np.matmul(beta_0,np.ones((1,n_data))) + np.matmul(Omega_0,x));\n",
|
||||
"h2 = ReLU(np.matmul(beta_1,np.ones((1,n_data))) + np.matmul(Omega_1,h1));\n",
|
||||
"h3 = ReLU(np.matmul(beta_2,np.ones((1,n_data))) + np.matmul(Omega_2,h2));\n",
|
||||
"y = np.matmul(beta_3,np.ones((1,n_data))) + np.matmul(Omega_3,h3)\n",
|
||||
"h1 = ReLU(beta_0 + np.matmul(Omega_0,x));\n",
|
||||
"h2 = ReLU(beta_1 + np.matmul(Omega_1,h1));\n",
|
||||
"h3 = ReLU(beta_2 + np.matmul(Omega_2,h2));\n",
|
||||
"y = beta_3 + np.matmul(Omega_3,h3)\n",
|
||||
"\n",
|
||||
"if h1.shape[0] is not D_1 or h1.shape[1] is not n_data:\n",
|
||||
" print(\"h1 is wrong shape\")\n",
|
||||
|
||||
@@ -236,11 +236,10 @@
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Let's double check we get the right answer before proceeding\n",
|
||||
"print(\"Correct answer = %3.3f, Your answer = %3.3f\"%(0.2,categorical_distribution(np.array([[0]]),np.array([[0.2],[0.5],[0.3]]))))\n",
|
||||
"print(\"Correct answer = %3.3f, Your answer = %3.3f\"%(0.5,categorical_distribution(np.array([[1]]),np.array([[0.2],[0.5],[0.3]]))))\n",
|
||||
"print(\"Correct answer = %3.3f, Your answer = %3.3f\"%(0.3,categorical_distribution(np.array([[2]]),np.array([[0.2],[0.5],[0.3]]))))\n",
|
||||
"\n"
|
||||
"# Here are three examples\n",
|
||||
"print(categorical_distribution(np.array([[0]]),np.array([[0.2],[0.5],[0.3]])))\n",
|
||||
"print(categorical_distribution(np.array([[1]]),np.array([[0.2],[0.5],[0.3]])))\n",
|
||||
"print(categorical_distribution(np.array([[2]]),np.array([[0.2],[0.5],[0.3]])))"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
@@ -130,7 +130,8 @@
|
||||
"\n",
|
||||
" print('Iter %d, a=%3.3f, b=%3.3f, c=%3.3f, d=%3.3f'%(n_iter, a,b,c,d))\n",
|
||||
"\n",
|
||||
" # Rule #1 If the HEIGHT at point A is less than the HEIGHT at points B, C, and D then halve values of B, C, and D\n",
|
||||
" # Rule #1 If the HEIGHT at point A is less than the HEIGHT at points B, C, and D then move them to they are half\n",
|
||||
" # as far from A as they start\n",
|
||||
" # i.e. bring them closer to the original point\n",
|
||||
" # TODO REPLACE THE BLOCK OF CODE BELOW WITH THIS RULE\n",
|
||||
" if (0):\n",
|
||||
|
||||
@@ -1,18 +1,16 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"colab_type": "text",
|
||||
"id": "view-in-github"
|
||||
"id": "view-in-github",
|
||||
"colab_type": "text"
|
||||
},
|
||||
"source": [
|
||||
"<a href=\"https://colab.research.google.com/github/udlbook/udlbook/blob/main/Notebooks/Chap06/6_2_Gradient_Descent.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "el8l05WQEO46"
|
||||
@@ -111,7 +109,6 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "QU5mdGvpTtEG"
|
||||
@@ -140,7 +137,6 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "eB5DQvU5hYNx"
|
||||
@@ -162,7 +158,6 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "F3trnavPiHpH"
|
||||
@@ -218,7 +213,6 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "s9Duf05WqqSC"
|
||||
@@ -252,7 +246,6 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "RS1nEcYVuEAM"
|
||||
@@ -290,7 +283,6 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "5EIjMM9Fw2eT"
|
||||
@@ -333,11 +325,11 @@
|
||||
" print('Iter %d, a=%3.3f, b=%3.3f, c=%3.3f, d=%3.3f'%(n_iter, a,b,c,d))\n",
|
||||
" print('a %f, b%f, c%f, d%f'%(lossa,lossb,lossc,lossd))\n",
|
||||
"\n",
|
||||
" # Rule #1 If point A is less than points B, C, and D then halve points B,C, and D\n",
|
||||
" # Rule #1 If point A is less than points B, C, and D then halve distance from A to points B,C, and D\n",
|
||||
" if np.argmin((lossa,lossb,lossc,lossd))==0:\n",
|
||||
" b = b/2\n",
|
||||
" c = c/2\n",
|
||||
" d = d/2\n",
|
||||
" b = a+ (b-a)/2\n",
|
||||
" c = a+ (c-a)/2\n",
|
||||
" d = a+ (d-a)/2\n",
|
||||
" continue;\n",
|
||||
"\n",
|
||||
" # Rule #2 If point b is less than point c then\n",
|
||||
@@ -412,8 +404,8 @@
|
||||
],
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"include_colab_link": true,
|
||||
"provenance": []
|
||||
"provenance": [],
|
||||
"include_colab_link": true
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3",
|
||||
|
||||
@@ -1,18 +1,16 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"colab_type": "text",
|
||||
"id": "view-in-github"
|
||||
"id": "view-in-github",
|
||||
"colab_type": "text"
|
||||
},
|
||||
"source": [
|
||||
"<a href=\"https://colab.research.google.com/github/udlbook/udlbook/blob/main/Notebooks/Chap06/6_3_Stochastic_Gradient_Descent.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "el8l05WQEO46"
|
||||
@@ -122,7 +120,6 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "QU5mdGvpTtEG"
|
||||
@@ -150,7 +147,6 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "eB5DQvU5hYNx"
|
||||
@@ -172,7 +168,6 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "F3trnavPiHpH"
|
||||
@@ -228,7 +223,6 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "s9Duf05WqqSC"
|
||||
@@ -279,7 +273,6 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "RS1nEcYVuEAM"
|
||||
@@ -316,7 +309,6 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "5EIjMM9Fw2eT"
|
||||
@@ -359,11 +351,11 @@
|
||||
" print('Iter %d, a=%3.3f, b=%3.3f, c=%3.3f, d=%3.3f'%(n_iter, a,b,c,d))\n",
|
||||
" print('a %f, b%f, c%f, d%f'%(lossa,lossb,lossc,lossd))\n",
|
||||
"\n",
|
||||
" # Rule #1 If point A is less than points B, C, and D then halve points B,C, and D\n",
|
||||
" # Rule #1 If point A is less than points B, C, and D then change B,C,D so they are half their current distance from A\n",
|
||||
" if np.argmin((lossa,lossb,lossc,lossd))==0:\n",
|
||||
" b = b/2\n",
|
||||
" c = c/2\n",
|
||||
" d = d/2\n",
|
||||
" b = a+ (b-a)/2\n",
|
||||
" c = a+ (c-a)/2\n",
|
||||
" d = a+ (d-a)/2\n",
|
||||
" continue;\n",
|
||||
"\n",
|
||||
" # Rule #2 If point b is less than point c then\n",
|
||||
@@ -577,9 +569,8 @@
|
||||
],
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"authorship_tag": "ABX9TyNk5FN4qlw3pk8BwDVWw1jN",
|
||||
"include_colab_link": true,
|
||||
"provenance": []
|
||||
"provenance": [],
|
||||
"include_colab_link": true
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3",
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"provenance": [],
|
||||
"authorship_tag": "ABX9TyM2kkHLr00J4Jeypw41sTkQ",
|
||||
"include_colab_link": true
|
||||
},
|
||||
"kernelspec": {
|
||||
@@ -68,7 +67,7 @@
|
||||
"# Set seed so we always get the same random numbers\n",
|
||||
"np.random.seed(0)\n",
|
||||
"\n",
|
||||
"# Number of layers\n",
|
||||
"# Number of hidden layers\n",
|
||||
"K = 5\n",
|
||||
"# Number of neurons per layer\n",
|
||||
"D = 6\n",
|
||||
@@ -115,7 +114,7 @@
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"Now let's run our random network. The weight matrices $\\boldsymbol\\Omega_{1\\ldots K}$ are the entries of the list \"all_weights\" and the biases $\\boldsymbol\\beta_{1\\ldots K}$ are the entries of the list \"all_biases\"\n",
|
||||
"Now let's run our random network. The weight matrices $\\boldsymbol\\Omega_{0\\ldots K}$ are the entries of the list \"all_weights\" and the biases $\\boldsymbol\\beta_{0\\ldots K}$ are the entries of the list \"all_biases\"\n",
|
||||
"\n",
|
||||
"We know that we will need the preactivations $\\mathbf{f}_{0\\ldots K}$ and the activations $\\mathbf{h}_{1\\ldots K}$ for the forward pass of backpropagation, so we'll store and return these as well.\n"
|
||||
],
|
||||
@@ -142,7 +141,7 @@
|
||||
"\n",
|
||||
" # Run through the layers, calculating all_f[0...K-1] and all_h[1...K]\n",
|
||||
" for layer in range(K):\n",
|
||||
" # Update preactivations and activations at this layer according to eqn 7.16\n",
|
||||
" # Update preactivations and activations at this layer according to eqn 7.17\n",
|
||||
" # Remember to use np.matmul for matrix multiplications\n",
|
||||
" # TODO -- Replace the lines below\n",
|
||||
" all_f[layer] = all_h[layer]\n",
|
||||
@@ -230,8 +229,8 @@
|
||||
"# We'll need the indicator function\n",
|
||||
"def indicator_function(x):\n",
|
||||
" x_in = np.array(x)\n",
|
||||
" x_in[x_in>=0] = 1\n",
|
||||
" x_in[x_in<0] = 0\n",
|
||||
" x_in[x_in>0] = 1\n",
|
||||
" x_in[x_in<=0] = 0\n",
|
||||
" return x_in\n",
|
||||
"\n",
|
||||
"# Main backward pass routine\n",
|
||||
@@ -249,23 +248,23 @@
|
||||
"\n",
|
||||
" # Now work backwards through the network\n",
|
||||
" for layer in range(K,-1,-1):\n",
|
||||
" # TODO Calculate the derivatives of the loss with respect to the biases at layer from all_dl_df[layer]. (eq 7.21)\n",
|
||||
" # TODO Calculate the derivatives of the loss with respect to the biases at layer from all_dl_df[layer]. (eq 7.22)\n",
|
||||
" # NOTE! To take a copy of matrix X, use Z=np.array(X)\n",
|
||||
" # REPLACE THIS LINE\n",
|
||||
" all_dl_dbiases[layer] = np.zeros_like(all_biases[layer])\n",
|
||||
"\n",
|
||||
" # TODO Calculate the derivatives of the loss with respect to the weights at layer from all_dl_df[layer] and all_h[layer] (eq 7.22)\n",
|
||||
" # TODO Calculate the derivatives of the loss with respect to the weights at layer from all_dl_df[layer] and all_h[layer] (eq 7.23)\n",
|
||||
" # Don't forget to use np.matmul\n",
|
||||
" # REPLACE THIS LINE\n",
|
||||
" all_dl_dweights[layer] = np.zeros_like(all_weights[layer])\n",
|
||||
"\n",
|
||||
" # TODO: calculate the derivatives of the loss with respect to the activations from weight and derivatives of next preactivations (second part of last line of eq 7.24)\n",
|
||||
" # TODO: calculate the derivatives of the loss with respect to the activations from weight and derivatives of next preactivations (second part of last line of eq 7.25)\n",
|
||||
" # REPLACE THIS LINE\n",
|
||||
" all_dl_dh[layer] = np.zeros_like(all_h[layer])\n",
|
||||
"\n",
|
||||
"\n",
|
||||
" if layer > 0:\n",
|
||||
" # TODO Calculate the derivatives of the loss with respect to the pre-activation f (use derivative of ReLu function, first part of last line of eq. 7.24)\n",
|
||||
" # TODO Calculate the derivatives of the loss with respect to the pre-activation f (use derivative of ReLu function, first part of last line of eq. 7.25)\n",
|
||||
" # REPLACE THIS LINE\n",
|
||||
" all_dl_df[layer-1] = np.zeros_like(all_f[layer-1])\n",
|
||||
"\n",
|
||||
@@ -300,7 +299,7 @@
|
||||
"delta_fd = 0.000001\n",
|
||||
"\n",
|
||||
"# Test the dervatives of the bias vectors\n",
|
||||
"for layer in range(K):\n",
|
||||
"for layer in range(K+1):\n",
|
||||
" dl_dbias = np.zeros_like(all_dl_dbiases[layer])\n",
|
||||
" # For every element in the bias\n",
|
||||
" for row in range(all_biases[layer].shape[0]):\n",
|
||||
@@ -324,7 +323,7 @@
|
||||
"\n",
|
||||
"\n",
|
||||
"# Test the derivatives of the weights matrices\n",
|
||||
"for layer in range(K):\n",
|
||||
"for layer in range(K+1):\n",
|
||||
" dl_dweight = np.zeros_like(all_dl_dweights[layer])\n",
|
||||
" # For every element in the bias\n",
|
||||
" for row in range(all_weights[layer].shape[0]):\n",
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
"source": [
|
||||
"# **Notebook 10.4: Downsampling and Upsampling**\n",
|
||||
"\n",
|
||||
"This notebook investigates the down sampling and downsampling methods discussed in section 10.4 of the book.\n",
|
||||
"This notebook investigates the upsampling and downsampling methods discussed in section 10.4 of the book.\n",
|
||||
"\n",
|
||||
"Work through the cells below, running each cell in turn. In various places you will see the words \"TODO\". Follow the instructions at these places and make predictions about what is going to happen or write code to complete the functions.\n",
|
||||
"\n",
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"provenance": [],
|
||||
"authorship_tag": "ABX9TyNAcc98STMeyQgh9SbVHWG+",
|
||||
"authorship_tag": "ABX9TyORZF8xy4X1yf4oRhRq8Rtm",
|
||||
"include_colab_link": true
|
||||
},
|
||||
"kernelspec": {
|
||||
@@ -65,10 +65,19 @@
|
||||
"source": [
|
||||
"# Run this once to load the train and test data straight into a dataloader class\n",
|
||||
"# that will provide the batches\n",
|
||||
"\n",
|
||||
"# (It may complain that some files are missing because the files seem to have been\n",
|
||||
"# reorganized on the underlying website, but it still seems to work). If everything is working\n",
|
||||
"# properly, then the whole notebook should run to the end without further problems\n",
|
||||
"# even before you make changes.\n",
|
||||
"batch_size_train = 64\n",
|
||||
"batch_size_test = 1000\n",
|
||||
"\n",
|
||||
"# TODO Change this directory to point towards an existing directory\n",
|
||||
"myDir = '/files/'\n",
|
||||
"\n",
|
||||
"train_loader = torch.utils.data.DataLoader(\n",
|
||||
" torchvision.datasets.MNIST('/files/', train=True, download=True,\n",
|
||||
" torchvision.datasets.MNIST(myDir, train=True, download=True,\n",
|
||||
" transform=torchvision.transforms.Compose([\n",
|
||||
" torchvision.transforms.ToTensor(),\n",
|
||||
" torchvision.transforms.Normalize(\n",
|
||||
@@ -77,7 +86,7 @@
|
||||
" batch_size=batch_size_train, shuffle=True)\n",
|
||||
"\n",
|
||||
"test_loader = torch.utils.data.DataLoader(\n",
|
||||
" torchvision.datasets.MNIST('/files/', train=False, download=True,\n",
|
||||
" torchvision.datasets.MNIST(myDir, train=False, download=True,\n",
|
||||
" transform=torchvision.transforms.Compose([\n",
|
||||
" torchvision.transforms.ToTensor(),\n",
|
||||
" torchvision.transforms.Normalize(\n",
|
||||
|
||||
@@ -109,7 +109,7 @@
|
||||
"# Choose random values for the parameters\n",
|
||||
"omega = np.random.normal(size=(D,D))\n",
|
||||
"beta = np.random.normal(size=(D,1))\n",
|
||||
"phi = np.random.normal(size=(1,2*D))"
|
||||
"phi = np.random.normal(size=(2*D,1))"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "79TSK7oLMobe"
|
||||
|
||||
@@ -86,6 +86,7 @@
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"# TODO Define the distance matrix from figure 15.8d\n",
|
||||
"# The index should be normalized before being used in the distance calculation.\n",
|
||||
"# Replace this line\n",
|
||||
"dist_mat = np.zeros((10,10))\n",
|
||||
"\n",
|
||||
|
||||
@@ -1,18 +1,16 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"colab_type": "text",
|
||||
"id": "view-in-github"
|
||||
"id": "view-in-github",
|
||||
"colab_type": "text"
|
||||
},
|
||||
"source": [
|
||||
"<a href=\"https://colab.research.google.com/github/udlbook/udlbook/blob/main/Notebooks/Chap17/17_3_Importance_Sampling.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "t9vk9Elugvmi"
|
||||
@@ -40,7 +38,6 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "f7a6xqKjkmvT"
|
||||
@@ -126,7 +123,6 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "Jr4UPcqmnXCS"
|
||||
@@ -166,8 +162,8 @@
|
||||
"mean_all = np.zeros_like(n_sample_all)\n",
|
||||
"variance_all = np.zeros_like(n_sample_all)\n",
|
||||
"for i in range(len(n_sample_all)):\n",
|
||||
" print(\"Computing mean and variance for expectation with %d samples\"%(n_sample_all[i]))\n",
|
||||
" mean_all[i],variance_all[i] = compute_mean_variance(n_sample_all[i])"
|
||||
" mean_all[i],variance_all[i] = compute_mean_variance(n_sample_all[i])\n",
|
||||
" print(\"No samples: \", n_sample_all[i], \", Mean: \", mean_all[i], \", Variance: \", variance_all[i])"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -189,7 +185,6 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "XTUpxFlSuOl7"
|
||||
@@ -199,7 +194,6 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "6hxsl3Pxo1TT"
|
||||
@@ -234,7 +228,6 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "G9Xxo0OJsIqD"
|
||||
@@ -283,7 +276,6 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "2sVDqP0BvxqM"
|
||||
@@ -313,8 +305,8 @@
|
||||
"mean_all2 = np.zeros_like(n_sample_all)\n",
|
||||
"variance_all2 = np.zeros_like(n_sample_all)\n",
|
||||
"for i in range(len(n_sample_all)):\n",
|
||||
" print(\"Computing variance for expectation with %d samples\"%(n_sample_all[i]))\n",
|
||||
" mean_all2[i], variance_all2[i] = compute_mean_variance2(n_sample_all[i])"
|
||||
" mean_all2[i], variance_all2[i] = compute_mean_variance2(n_sample_all[i])\n",
|
||||
" print(\"No samples: \", n_sample_all[i], \", Mean: \", mean_all2[i], \", Variance: \", variance_all2[i])"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -348,7 +340,6 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "EtBP6NeLwZqz"
|
||||
@@ -360,7 +351,6 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "_wuF-NoQu1--"
|
||||
@@ -432,8 +422,8 @@
|
||||
"mean_all2b = np.zeros_like(n_sample_all)\n",
|
||||
"variance_all2b = np.zeros_like(n_sample_all)\n",
|
||||
"for i in range(len(n_sample_all)):\n",
|
||||
" print(\"Computing variance for expectation with %d samples\"%(n_sample_all[i]))\n",
|
||||
" mean_all2b[i], variance_all2b[i] = compute_mean_variance2b(n_sample_all[i])"
|
||||
" mean_all2b[i], variance_all2b[i] = compute_mean_variance2b(n_sample_all[i])\n",
|
||||
" print(\"No samples: \", n_sample_all[i], \", Mean: \", mean_all2b[i], \", Variance: \", variance_all2b[i])"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -478,7 +468,6 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "y8rgge9MNiOc"
|
||||
@@ -490,9 +479,8 @@
|
||||
],
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"authorship_tag": "ABX9TyNecz9/CDOggPSmy1LjT/Dv",
|
||||
"include_colab_link": true,
|
||||
"provenance": []
|
||||
"provenance": [],
|
||||
"include_colab_link": true
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3",
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"provenance": [],
|
||||
"authorship_tag": "ABX9TyOlD6kmCxX3SKKuh3oJikKA",
|
||||
"include_colab_link": true
|
||||
},
|
||||
"kernelspec": {
|
||||
@@ -406,6 +405,10 @@
|
||||
" state_values_new[state] = 3.0\n",
|
||||
" break\n",
|
||||
"\n",
|
||||
" # TODO -- Write this function (from equation 19.11, but bear in mind policy is deterministic here)\n",
|
||||
" # Replace this line\n",
|
||||
" state_values_new[state] = 0\n",
|
||||
"\n",
|
||||
" return state_values_new\n",
|
||||
"\n",
|
||||
"# Greedily choose the action that maximizes the value for each state.\n",
|
||||
|
||||
326
Trees/LinearRegression_FitModel.ipynb
Normal file
326
Trees/LinearRegression_FitModel.ipynb
Normal file
File diff suppressed because one or more lines are too long
357
Trees/LinearRegression_FitModel_Answers.ipynb
Normal file
357
Trees/LinearRegression_FitModel_Answers.ipynb
Normal file
File diff suppressed because one or more lines are too long
343
Trees/LinearRegression_FitModel_Quadratic.ipynb
Normal file
343
Trees/LinearRegression_FitModel_Quadratic.ipynb
Normal file
File diff suppressed because one or more lines are too long
277
Trees/LinearRegression_LossFunction.ipynb
Normal file
277
Trees/LinearRegression_LossFunction.ipynb
Normal file
File diff suppressed because one or more lines are too long
325
Trees/LinearRegression_LossFunction_Answers.ipynb
Normal file
325
Trees/LinearRegression_LossFunction_Answers.ipynb
Normal file
File diff suppressed because one or more lines are too long
489
Trees/SAT_Construction.ipynb
Normal file
489
Trees/SAT_Construction.ipynb
Normal file
File diff suppressed because one or more lines are too long
271
Trees/SAT_Construction2.ipynb
Normal file
271
Trees/SAT_Construction2.ipynb
Normal file
File diff suppressed because one or more lines are too long
261
Trees/SAT_Construction2_Answers.ipynb
Normal file
261
Trees/SAT_Construction2_Answers.ipynb
Normal file
File diff suppressed because one or more lines are too long
586
Trees/SAT_Construction_Answers.ipynb
Normal file
586
Trees/SAT_Construction_Answers.ipynb
Normal file
File diff suppressed because one or more lines are too long
1061
Trees/SAT_Crossword.ipynb
Normal file
1061
Trees/SAT_Crossword.ipynb
Normal file
File diff suppressed because one or more lines are too long
911
Trees/SAT_Crossword_Answers.ipynb
Normal file
911
Trees/SAT_Crossword_Answers.ipynb
Normal file
File diff suppressed because one or more lines are too long
248
Trees/SAT_Exhaustive.ipynb
Normal file
248
Trees/SAT_Exhaustive.ipynb
Normal file
File diff suppressed because one or more lines are too long
250
Trees/SAT_Exhaustive_Answers.ipynb
Normal file
250
Trees/SAT_Exhaustive_Answers.ipynb
Normal file
File diff suppressed because one or more lines are too long
275
Trees/SAT_Graph_Coloring.ipynb
Normal file
275
Trees/SAT_Graph_Coloring.ipynb
Normal file
File diff suppressed because one or more lines are too long
279
Trees/SAT_Graph_Coloring_Answers.ipynb
Normal file
279
Trees/SAT_Graph_Coloring_Answers.ipynb
Normal file
File diff suppressed because one or more lines are too long
270
Trees/SAT_Sudoku.ipynb
Normal file
270
Trees/SAT_Sudoku.ipynb
Normal file
File diff suppressed because one or more lines are too long
433
Trees/SAT_Sudoku_Answers.ipynb
Normal file
433
Trees/SAT_Sudoku_Answers.ipynb
Normal file
File diff suppressed because one or more lines are too long
251
Trees/SAT_Tseitin.ipynb
Normal file
251
Trees/SAT_Tseitin.ipynb
Normal file
File diff suppressed because one or more lines are too long
310
Trees/SAT_Tseitin_Answers.ipynb
Normal file
310
Trees/SAT_Tseitin_Answers.ipynb
Normal file
File diff suppressed because one or more lines are too long
264
Trees/SAT_Z3.ipynb
Normal file
264
Trees/SAT_Z3.ipynb
Normal file
File diff suppressed because one or more lines are too long
335
Trees/SAT_Z3_Answers.ipynb
Normal file
335
Trees/SAT_Z3_Answers.ipynb
Normal file
File diff suppressed because one or more lines are too long
BIN
Trees/cb_2018_us_state_500k.zip
Normal file
BIN
Trees/cb_2018_us_state_500k.zip
Normal file
Binary file not shown.
Binary file not shown.
2229
UDL_Equations.tex
Normal file
2229
UDL_Equations.tex
Normal file
File diff suppressed because it is too large
Load Diff
BIN
UDL_Errata.pdf
BIN
UDL_Errata.pdf
Binary file not shown.
@@ -33,6 +33,124 @@ const citation = `
|
||||
`;
|
||||
|
||||
const news = [
|
||||
{
|
||||
// date: "03/6/25",
|
||||
// content: (
|
||||
// <HeroNewsItemContent>
|
||||
// New {" "}
|
||||
// <UDLLink href="https://dl4ds.github.io/sp2025/lectures/">
|
||||
// slides and video lectures
|
||||
// </UDLLink>{" "}
|
||||
// that closely follow the book from Thomas Gardos of Boston University.
|
||||
// </HeroNewsItemContent>
|
||||
// ),
|
||||
},
|
||||
{
|
||||
date: "02/19/25",
|
||||
content: (
|
||||
<HeroNewsItemContent>
|
||||
Three new blogs {" "}
|
||||
<UDLLink href="https://rbcborealis.com/research-blogs/odes-and-sdes-for-machine-learning/">
|
||||
[1]
|
||||
</UDLLink>
|
||||
<UDLLink href="https://rbcborealis.com/research-blogs/introduction-ordinary-differential-equations/">
|
||||
[2]
|
||||
</UDLLink>
|
||||
<UDLLink href="https://rbcborealis.com/research-blogs/closed-form-solutions-for-odes/">
|
||||
[3]
|
||||
</UDLLink>{" "}
|
||||
on ODEs and SDEs in machine learning.
|
||||
</HeroNewsItemContent>
|
||||
),
|
||||
},
|
||||
{
|
||||
date: "01/23/25",
|
||||
content: (
|
||||
<HeroNewsItemContent>
|
||||
Added{" "}
|
||||
<UDLLink href="https://github.com/udlbook/udlbook/raw/main/understanding-deep-learning-final.bib">
|
||||
bibfile
|
||||
</UDLLink>{" "} for book and
|
||||
<UDLLink href="https://github.com/udlbook/udlbook/raw/main/UDL_Equations.tex">
|
||||
LaTeX
|
||||
</UDLLink>{" "}
|
||||
for all equations
|
||||
</HeroNewsItemContent>
|
||||
),
|
||||
},
|
||||
{
|
||||
date: "12/17/24",
|
||||
content: (
|
||||
<HeroNewsItemContent>
|
||||
|
||||
<UDLLink href="https://www.youtube.com/playlist?list=PLRdABJkXXytCz19PsZ1PCQBKoZGV069k3">
|
||||
Video lectures
|
||||
</UDLLink>{" "}
|
||||
for chapters 1-12 from Tamer Elsayed of Qatar University.
|
||||
</HeroNewsItemContent>
|
||||
),
|
||||
},
|
||||
{
|
||||
date: "12/05/24",
|
||||
content: (
|
||||
<HeroNewsItemContent>
|
||||
New{" "}
|
||||
<UDLLink href="https://rbcborealis.com/research-blogs/neural-network-gaussian-processes/">
|
||||
blog
|
||||
</UDLLink>{" "}
|
||||
on Neural network Gaussian processes
|
||||
</HeroNewsItemContent>
|
||||
),
|
||||
},
|
||||
|
||||
{
|
||||
date: "11/14/24",
|
||||
content: (
|
||||
<HeroNewsItemContent>
|
||||
New{" "}
|
||||
<UDLLink href=" https://rbcborealis.com/research-blogs/bayesian-neural-networks/">
|
||||
blog
|
||||
</UDLLink>{" "}
|
||||
on Bayesian Neural Networks
|
||||
</HeroNewsItemContent>
|
||||
),
|
||||
},
|
||||
{
|
||||
date: "08/13/24",
|
||||
content: (
|
||||
<HeroNewsItemContent>
|
||||
New{" "}
|
||||
<UDLLink href="https://www.borealisai.com/research-blogs/bayesian-machine-learning-function-space/">
|
||||
blog
|
||||
</UDLLink>{" "}
|
||||
on Bayesian machine learning (function perspective)
|
||||
</HeroNewsItemContent>
|
||||
),
|
||||
},
|
||||
{
|
||||
date: "08/05/24",
|
||||
content: (
|
||||
<HeroNewsItemContent>
|
||||
Added{" "}
|
||||
<UDLLink href="https://udlbook.github.io/udlfigures/">
|
||||
interactive figures
|
||||
</UDLLink>{" "}
|
||||
to explore 1D linear regression, shallow and deep networks, Gabor model.
|
||||
</HeroNewsItemContent>
|
||||
),
|
||||
},
|
||||
{
|
||||
date: "07/30/24",
|
||||
content: (
|
||||
<HeroNewsItemContent>
|
||||
New{" "}
|
||||
<UDLLink href="https://www.borealisai.com/research-blogs/bayesian-machine-learning-parameter-space/">
|
||||
blog
|
||||
</UDLLink>{" "}
|
||||
on Bayesian machine learning (parameter perspective)
|
||||
</HeroNewsItemContent>
|
||||
),
|
||||
},
|
||||
{
|
||||
date: "05/22/24",
|
||||
content: (
|
||||
@@ -184,8 +302,8 @@ export default function HeroSection() {
|
||||
<HeroImgWrap>
|
||||
<Img src={img} alt="Book Cover" />
|
||||
</HeroImgWrap>
|
||||
<HeroLink href="https://github.com/udlbook/udlbook/releases/download/v4.0.1/UnderstandingDeepLearning_05_27_24_C.pdf">
|
||||
Download full PDF (27 May 2024)
|
||||
<HeroLink href="https://github.com/udlbook/udlbook/releases/download/v5.0.1/UnderstandingDeepLearning_03_26_25_C.pdf">
|
||||
Download full PDF (26 March 2025)
|
||||
</HeroLink>
|
||||
<br />
|
||||
<HeroDownloadsImg
|
||||
@@ -201,7 +319,7 @@ export default function HeroSection() {
|
||||
<HeroLink href="https://github.com/udlbook/udlbook/raw/main/UDL_Errata.pdf">
|
||||
Errata
|
||||
</HeroLink>
|
||||
</HeroColumn2>
|
||||
</HeroColumn2> <h1></h1>
|
||||
</HeroRow>
|
||||
</HeroContent>
|
||||
</HeroContainer>
|
||||
|
||||
@@ -280,6 +280,12 @@ export default function InstructorsSection() {
|
||||
</InstructorsLink>{" "}
|
||||
with MIT Press for answer booklet.
|
||||
<InstructorsContent></InstructorsContent>
|
||||
<TopLine>Interactive figures</TopLine>
|
||||
<InstructorsLink href="https://udlbook.github.io/udlfigures/">
|
||||
Interactive figures </InstructorsLink>{" "}
|
||||
to illustrate ideas in class
|
||||
<InstructorsContent></InstructorsContent>
|
||||
|
||||
<TopLine>Full slides</TopLine>
|
||||
<InstructorsContent>
|
||||
Slides for 20 lecture undergraduate deep learning course:
|
||||
@@ -296,6 +302,11 @@ export default function InstructorsSection() {
|
||||
))}
|
||||
</ol>
|
||||
</InstructorsContent>
|
||||
<TopLine>LaTeX for equations</TopLine>
|
||||
A {" "} <InstructorsLink href="https://github.com/udlbook/udlbook/raw/main/UDL_Equations.tex">
|
||||
working Latex file </InstructorsLink>{" "}
|
||||
containing all of the equations
|
||||
<InstructorsContent></InstructorsContent>
|
||||
</Column1>
|
||||
<Column2>
|
||||
<TopLine>Figures</TopLine>
|
||||
@@ -325,6 +336,11 @@ export default function InstructorsSection() {
|
||||
</InstructorsLink>{" "}
|
||||
for editing equations in figures.
|
||||
<InstructorsContent></InstructorsContent>
|
||||
<TopLine>LaTeX Bibfile </TopLine>
|
||||
The {" "} <InstructorsLink href="https://github.com/udlbook/udlbook/raw/main/understanding-deep-learning-final.bib">
|
||||
bibfile </InstructorsLink>{" "}
|
||||
containing all of the references
|
||||
<InstructorsContent></InstructorsContent>
|
||||
</Column2>
|
||||
</InstructorsRow2>
|
||||
</InstructorsWrapper>
|
||||
|
||||
34
src/components/Media/index.jsx
Normal file → Executable file
34
src/components/Media/index.jsx
Normal file → Executable file
@@ -120,23 +120,18 @@ export default function MediaSection() {
|
||||
by Vishal V.
|
||||
</li>
|
||||
<li>
|
||||
Amazon{" "}
|
||||
<MediaLink href="https://www.amazon.com/Understanding-Deep-Learning-Simon-Prince-ebook/product-reviews/B0BXKH8XY6/">
|
||||
reviews
|
||||
</MediaLink>
|
||||
</li>
|
||||
<li>
|
||||
Goodreads{" "}
|
||||
<MediaLink href="https://www.goodreads.com/book/show/123239819-understanding-deep-learning?">
|
||||
reviews{" "}
|
||||
</MediaLink>
|
||||
Book{" "}
|
||||
<MediaLink href="https://www.linkedin.com/pulse/review-understanding-deep-learning-prof-simon-prince-chandrasekharan-6egec/">
|
||||
review
|
||||
</MediaLink>{" "}
|
||||
by Nidhin Chandrasekharan
|
||||
</li>
|
||||
<li>
|
||||
Book{" "}
|
||||
<MediaLink href="https://medium.com/@vishalvignesh/udl-book-review-the-new-deep-learning-textbook-youll-want-to-finish-69e1557b018d">
|
||||
<MediaLink href="https://www.justinmath.com/the-best-neural-nets-textbook/">
|
||||
review
|
||||
</MediaLink>{" "}
|
||||
by Vishal V.
|
||||
by Justin Skycak
|
||||
</li>
|
||||
</ul>
|
||||
</MediaContent>
|
||||
@@ -155,6 +150,21 @@ export default function MediaSection() {
|
||||
))}
|
||||
</ul>
|
||||
</MediaContent>
|
||||
<TopLine>Video lectures</TopLine>
|
||||
<ul>
|
||||
<li>
|
||||
<MediaLink href="https://www.youtube.com/playlist?list=PLRdABJkXXytCz19PsZ1PCQBKoZGV069k3">
|
||||
Video lectures
|
||||
</MediaLink>{" "} for chapters 1-12 from Tamer Elsayed
|
||||
</li>
|
||||
{/* <li>
|
||||
<MediaLink href="https://dl4ds.github.io/sp2025/lectures/">
|
||||
Video lectures and slides
|
||||
</MediaLink>{" "} that closely follow the book from Thomas Gardos of Boston University.
|
||||
</li> */}
|
||||
</ul>
|
||||
|
||||
|
||||
</Column2>
|
||||
</MediaRow2>
|
||||
</MediaWrapper>
|
||||
|
||||
110
src/components/More/index.jsx
Normal file → Executable file
110
src/components/More/index.jsx
Normal file → Executable file
@@ -376,6 +376,51 @@ const aiTheory = [
|
||||
"NTK and generalizability",
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Bayesian ML I",
|
||||
link: "https://www.borealisai.com/research-blogs/bayesian-machine-learning-parameter-space/",
|
||||
details: [
|
||||
"Maximum likelihood",
|
||||
"Maximum a posteriori",
|
||||
"The Bayesian approach",
|
||||
"Example: 1D linear regression",
|
||||
"Practical concerns",
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Bayesian ML II",
|
||||
link: "https://www.borealisai.com/research-blogs/bayesian-machine-learning-function-space/",
|
||||
details: [
|
||||
"Function space",
|
||||
"Gaussian processes",
|
||||
"Inference",
|
||||
"Non-linear regression",
|
||||
"Kernels and the kernel trick",
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Bayesian neural networks",
|
||||
link: "https://rbcborealis.com/research-blogs/bayesian-neural-networks/",
|
||||
details: [
|
||||
"Sampling vs. variational approximation",
|
||||
"MCMC methods",
|
||||
"SWAG and MultiSWAG",
|
||||
"Bayes by backprop",
|
||||
"Monte Carlo dropout",
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Neural network Gaussian processes",
|
||||
link: "https://rbcborealis.com/research-blogs/neural-network-gaussian-processes/",
|
||||
details: [
|
||||
"Shallow networks as GPs",
|
||||
"Neural network Gaussian processes",
|
||||
"NNGP Kernel",
|
||||
"Kernel regression",
|
||||
"Network stability",
|
||||
],
|
||||
},
|
||||
|
||||
];
|
||||
|
||||
const unsupervisedLearning = [
|
||||
@@ -664,6 +709,50 @@ const responsibleAI = [
|
||||
},
|
||||
];
|
||||
|
||||
const ODESDE = [
|
||||
{
|
||||
text: "ODEs and SDEs in machine learning",
|
||||
link: "https://rbcborealis.com/research-blogs/odes-and-sdes-for-machine-learning/",
|
||||
details: [
|
||||
"ODEs",
|
||||
"SDEs",
|
||||
"ODEs and gradient descent",
|
||||
"SDEs in stochastic gradient descent",
|
||||
"ODEs in residual networks",
|
||||
"ODEs and SDES in diffusion models",
|
||||
"Physics-informed machine learning",
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Introduction to ODEs",
|
||||
link: "https://rbcborealis.com/research-blogs/introduction-ordinary-differential-equations/",
|
||||
details: [
|
||||
"What are ODEs?",
|
||||
"Terminology and properties",
|
||||
"Solutions",
|
||||
"Boundary conditions",
|
||||
"Existence of solutions",
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Closed-form solutions for ODEs",
|
||||
link: "https://rbcborealis.com/research-blogs/closed-form-solutions-for-odes/",
|
||||
details: [
|
||||
"Validating proposed solutions",
|
||||
"Class 1: Right-hand side is a function of t only",
|
||||
"Class 2: Linear homogeneous",
|
||||
"Class 3: right-hand side is function of x alone",
|
||||
"Class 4: Right-hand side is a separable function of x and t",
|
||||
"Class 5: Exact ODEs",
|
||||
"Class 6: linear inhomogeneous ODEs",
|
||||
"Class 7: Euler homogeneous",
|
||||
"Vector ODEs",
|
||||
"The matrix exponential"
|
||||
],
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
export default function MoreSection() {
|
||||
return (
|
||||
<>
|
||||
@@ -689,7 +778,7 @@ export default function MoreSection() {
|
||||
</MoreRow>
|
||||
<MoreRow2>
|
||||
<Column1>
|
||||
<TopLine>Book</TopLine>
|
||||
<TopLine>Computer vision book</TopLine>
|
||||
<MoreOuterList>
|
||||
{book.map((item, index) => (
|
||||
<li key={index}>
|
||||
@@ -814,10 +903,27 @@ export default function MoreSection() {
|
||||
</li>
|
||||
))}
|
||||
</MoreOuterList>
|
||||
<TopLine>ODEs and SDEs in machine learning</TopLine>
|
||||
<MoreOuterList>
|
||||
{ODESDE.map((item, index) => (
|
||||
<li key={index}>
|
||||
<MoreLink href={item.link} target="_blank" rel="noreferrer">
|
||||
{item.text}
|
||||
</MoreLink>
|
||||
<MoreInnerP>
|
||||
<MoreInnerList>
|
||||
{item.details.map((detail, index) => (
|
||||
<li key={index}>{detail}</li>
|
||||
))}
|
||||
</MoreInnerList>
|
||||
</MoreInnerP>
|
||||
</li>
|
||||
))}
|
||||
</MoreOuterList>
|
||||
</Column1>
|
||||
|
||||
<Column2>
|
||||
<TopLine>AI Theory</TopLine>
|
||||
<TopLine>ML Theory</TopLine>
|
||||
<MoreOuterList>
|
||||
{aiTheory.map((item, index) => (
|
||||
<li key={index}>
|
||||
|
||||
8672
understanding-deep-learning-final.bib
Normal file
8672
understanding-deep-learning-final.bib
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user