Compare commits
228 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
de0a8946a6 | ||
|
|
12672832f5 | ||
|
|
51444a4bbb | ||
|
|
987df8cd88 | ||
|
|
9873b8b20d | ||
|
|
bc0ca18695 | ||
|
|
d66ba78862 | ||
|
|
a8fe82b5e1 | ||
|
|
ac540f1294 | ||
|
|
080bdd319d | ||
|
|
60d50aa9d2 | ||
|
|
d45cba5c95 | ||
|
|
e9f75027bb | ||
|
|
9de32ff327 | ||
|
|
871304357c | ||
|
|
c385687d8a | ||
|
|
207ff5e636 | ||
|
|
cc9c695ff7 | ||
|
|
75646c2c8e | ||
|
|
5552890706 | ||
|
|
01755deefe | ||
|
|
afb9ead4d8 | ||
|
|
57151930de | ||
|
|
ca85255c74 | ||
|
|
3003437b04 | ||
|
|
5e726fcf4e | ||
|
|
6a8273459f | ||
|
|
1c2e19aa3b | ||
|
|
e818dfe054 | ||
|
|
4a08818706 | ||
|
|
16b72a8a9e | ||
|
|
44a3e5f678 | ||
|
|
a644267053 | ||
|
|
69a2b00c9d | ||
|
|
9f0570e26f | ||
|
|
e3a8bb9ac4 | ||
|
|
49da623d86 | ||
|
|
0c771fd677 | ||
|
|
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 | ||
|
|
b7869e8b41 | ||
|
|
747ec9efe1 | ||
|
|
58dfb0390c | ||
|
|
3aeb8db4cd | ||
|
|
305a055079 | ||
|
|
87cf590af9 | ||
|
|
ccedbb72e7 | ||
|
|
b423a67855 | ||
|
|
3c8dab14e6 | ||
|
|
ab73ae785b | ||
|
|
df86bbba04 | ||
|
|
a9868e6da8 | ||
|
|
fed3962bce | ||
|
|
c5fafbca97 | ||
|
|
5f16e0f9bc | ||
|
|
121c81a04e | ||
|
|
e968741846 | ||
|
|
37011065d7 | ||
|
|
afd20d0364 | ||
|
|
0d135f1ee7 | ||
|
|
54a020304e | ||
|
|
ccbbc4126e | ||
|
|
d3273c99e2 | ||
|
|
f9e45c976c | ||
|
|
b005cec9c1 | ||
|
|
b8a91ad34d | ||
|
|
a2a86c27bc | ||
|
|
d80d04c2d4 | ||
|
|
c1f0181653 | ||
|
|
6e18234d24 | ||
|
|
5730c05547 | ||
|
|
ccb80c16b8 | ||
|
|
87387b2b4c | ||
|
|
06eaec9749 | ||
|
|
9aeda14efa | ||
|
|
d1df6426b2 | ||
|
|
43b8fa3685 | ||
|
|
ca6e4b29ac | ||
|
|
267d6ccb7f | ||
|
|
735947b728 | ||
|
|
251aef1876 | ||
|
|
07ff6c06b1 | ||
|
|
29e4cec04e | ||
|
|
c3ce38410c | ||
|
|
646e60ed95 | ||
|
|
5e61bcf694 | ||
|
|
54399a3c68 | ||
|
|
3926ff41ea | ||
|
|
9c34bfed02 | ||
|
|
9176623331 | ||
|
|
5534df187e | ||
|
|
9b58b2862f | ||
|
|
2070ac4400 | ||
|
|
393e4907dc | ||
|
|
e850676722 | ||
|
|
796f17ed90 | ||
|
|
dc0301a86e | ||
|
|
813f628e4e | ||
|
|
3ae7d68f6e | ||
|
|
a96a14999f | ||
|
|
f91e878eef | ||
|
|
9b89499b75 | ||
|
|
7d6ac5e34f | ||
|
|
55dbe7e0c4 | ||
|
|
1cf21ea61a | ||
|
|
e4191beb79 | ||
|
|
10b9dea9a4 | ||
|
|
414eeb3557 | ||
|
|
f126809572 | ||
|
|
2a30c49d22 | ||
|
|
bb32fe0cdf | ||
|
|
1ee756cf9a | ||
|
|
742d922ce7 | ||
|
|
c02eea499c | ||
|
|
cb94b61abd | ||
|
|
447bb82e2f | ||
|
|
77da5694bb | ||
|
|
96c7e41c9d | ||
|
|
625d1e29bb | ||
|
|
3cf0c4c418 | ||
|
|
03c92541ad | ||
|
|
def3e5234b | ||
|
|
815adb9b21 | ||
|
|
5ba28e5b56 | ||
|
|
8566a7322f | ||
|
|
c867e67e8c | ||
|
|
cba27b3da4 | ||
|
|
1c706bd058 | ||
|
|
72514994bf | ||
|
|
872926c17e | ||
|
|
0dfeb169be | ||
|
|
89a0532283 | ||
|
|
af5a719496 | ||
|
|
56c31efc90 |
10
.editorconfig
Normal file
10
.editorconfig
Normal file
@@ -0,0 +1,10 @@
|
||||
root = true
|
||||
|
||||
[*.{js,jsx,ts,tsx,md,mdx,json,cjs,mjs,css}]
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
end_of_line = lf
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
max_line_length = 100
|
||||
18
.eslintrc.cjs
Normal file
18
.eslintrc.cjs
Normal file
@@ -0,0 +1,18 @@
|
||||
module.exports = {
|
||||
root: true,
|
||||
env: { browser: true, es2020: true, node: true },
|
||||
extends: [
|
||||
"eslint:recommended",
|
||||
"plugin:react/recommended",
|
||||
"plugin:react/jsx-runtime",
|
||||
"plugin:react-hooks/recommended",
|
||||
],
|
||||
ignorePatterns: ["build", ".eslintrc.cjs"],
|
||||
parserOptions: { ecmaVersion: "latest", sourceType: "module" },
|
||||
settings: { react: { version: "18.2" } },
|
||||
plugins: ["react-refresh"],
|
||||
rules: {
|
||||
"react/jsx-no-target-blank": "off",
|
||||
"react-refresh/only-export-components": ["warn", { allowConstantExport: true }],
|
||||
},
|
||||
};
|
||||
13
.gitignore
vendored
13
.gitignore
vendored
@@ -9,15 +9,22 @@
|
||||
/coverage
|
||||
|
||||
# production
|
||||
/build
|
||||
/dist
|
||||
|
||||
# misc
|
||||
.DS_Store
|
||||
# ENV
|
||||
.env.local
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
|
||||
# debug
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
# IDE
|
||||
.idea
|
||||
.vscode
|
||||
|
||||
# macOS
|
||||
.DS_Store
|
||||
|
||||
7
.prettierignore
Normal file
7
.prettierignore
Normal file
@@ -0,0 +1,7 @@
|
||||
# ignore these directories when formatting the repo
|
||||
/Blogs
|
||||
/CM20315
|
||||
/CM20315_2023
|
||||
/Notebooks
|
||||
/PDFFigures
|
||||
/Slides
|
||||
14
.prettierrc.cjs
Normal file
14
.prettierrc.cjs
Normal file
@@ -0,0 +1,14 @@
|
||||
/** @type {import("prettier").Config} */
|
||||
const prettierConfig = {
|
||||
trailingComma: "all",
|
||||
tabWidth: 4,
|
||||
useTabs: false,
|
||||
semi: true,
|
||||
singleQuote: false,
|
||||
bracketSpacing: true,
|
||||
printWidth: 100,
|
||||
endOfLine: "lf",
|
||||
plugins: [require.resolve("prettier-plugin-organize-imports")],
|
||||
};
|
||||
|
||||
module.exports = prettierConfig;
|
||||
@@ -31,7 +31,7 @@
|
||||
"source": [
|
||||
"# Gradient flow\n",
|
||||
"\n",
|
||||
"This notebook replicates some of the results in the the Borealis AI [blog](https://www.borealisai.com/research-blogs/gradient-flow/) on gradient flow. \n"
|
||||
"This notebook replicates some of the results in the Borealis AI [blog](https://www.borealisai.com/research-blogs/gradient-flow/) on gradient flow. \n"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "ucrRRJ4dq8_d"
|
||||
|
||||
@@ -166,7 +166,7 @@
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"Routines to calculate the empirical and analytical NTK (i.e. the NTK with infinite hidden units) for the the shallow network"
|
||||
"Routines to calculate the empirical and analytical NTK (i.e. the NTK with infinite hidden units) for the shallow network"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "mxW8E5kYIzlj"
|
||||
|
||||
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
|
||||
}
|
||||
1127
Blogs/Borealis_NNGP.ipynb
Normal file
1127
Blogs/Borealis_NNGP.ipynb
Normal file
File diff suppressed because one or more lines are too long
@@ -128,7 +128,7 @@
|
||||
"\n",
|
||||
"In part (b) of the practical we calculate the volume of a hypersphere of radius 0.5 (i.e., of diameter 1) as a function of the radius. You will find that the volume decreases to almost nothing in high dimensions. All of the volume is in the corners of the unit hypercube (which always has volume 1). Double weird.\n",
|
||||
"\n",
|
||||
"Note that you you can check your answer by doing the calculation for 2D using the standard formula for the area of a circle and making sure it matches."
|
||||
"Note that you can check your answer by doing the calculation for 2D using the standard formula for the area of a circle and making sure it matches."
|
||||
],
|
||||
"metadata": {
|
||||
"id": "b2FYKV1SL4Z7"
|
||||
|
||||
@@ -199,7 +199,7 @@
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"The left is model output and the right is the model output after the sigmoid has been applied, so it now lies in the range [0,1] and represents the probability, that y=1. The black dots show the training data. We'll compute the the likelihood and the negative log likelihood."
|
||||
"The left is model output and the right is the model output after the sigmoid has been applied, so it now lies in the range [0,1] and represents the probability, that y=1. The black dots show the training data. We'll compute the likelihood and the negative log likelihood."
|
||||
],
|
||||
"metadata": {
|
||||
"id": "MvVX6tl9AEXF"
|
||||
|
||||
@@ -218,7 +218,7 @@
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"The left is model output and the right is the model output after the softmax has been applied, so it now lies in the range [0,1] and represents the probability, that y=0 (red), 1 (green) and 2 (blue) The dots at the bottom show the training data with the same color scheme. So we want the red curve to be high where there are red dots, the green curve to be high where there are green dotsmand the blue curve to be high where there are blue dots We'll compute the the likelihood and the negative log likelihood."
|
||||
"The left is model output and the right is the model output after the softmax has been applied, so it now lies in the range [0,1] and represents the probability, that y=0 (red), 1 (green) and 2 (blue) The dots at the bottom show the training data with the same color scheme. So we want the red curve to be high where there are red dots, the green curve to be high where there are green dotsmand the blue curve to be high where there are blue dots We'll compute the likelihood and the negative log likelihood."
|
||||
],
|
||||
"metadata": {
|
||||
"id": "MvVX6tl9AEXF"
|
||||
|
||||
@@ -128,7 +128,7 @@
|
||||
"\n",
|
||||
"In part (b) of the practical we calculate the volume of a hypersphere of radius 0.5 (i.e., of diameter 1) as a function of the radius. You will find that the volume decreases to almost nothing in high dimensions. All of the volume is in the corners of the unit hypercube (which always has volume 1). Double weird.\n",
|
||||
"\n",
|
||||
"Note that you you can check your answer by doing the calculation for 2D using the standard formula for the area of a circle and making sure it matches."
|
||||
"Note that you can check your answer by doing the calculation for 2D using the standard formula for the area of a circle and making sure it matches."
|
||||
],
|
||||
"metadata": {
|
||||
"id": "b2FYKV1SL4Z7"
|
||||
|
||||
@@ -214,7 +214,7 @@
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"# Compute the derivative of the the loss with respect to the function output f_val\n",
|
||||
"# Compute the derivative of the loss with respect to the function output f_val\n",
|
||||
"def dl_df(f_val,y):\n",
|
||||
" # Compute sigmoid of network output\n",
|
||||
" sig_f_val = sig(f_val)\n",
|
||||
|
||||
@@ -295,7 +295,7 @@
|
||||
"\n",
|
||||
"Throughout the book, we'll be using some special functions (see Appendix B.1.3). The most important of these are the logarithm and exponential functions. Let's investigate their properties.\n",
|
||||
"\n",
|
||||
"We'll start with the exponential function $y=\\exp[x]=e^x$ which maps the real line $[-\\infty,+\\infty]$ to non-negative numbers $[0,+\\infty]$."
|
||||
"We'll start with the exponential function $y=\\exp[x]=e^x$ which maps the real line $(-\\infty,+\\infty)$ to positive numbers $(0,+\\infty)$."
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -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",
|
||||
|
||||
@@ -211,7 +211,7 @@
|
||||
"id": "MvVX6tl9AEXF"
|
||||
},
|
||||
"source": [
|
||||
"The left is model output and the right is the model output after the softmax has been applied, so it now lies in the range [0,1] and represents the probability, that y=0 (red), 1 (green) and 2 (blue). The dots at the bottom show the training data with the same color scheme. So we want the red curve to be high where there are red dots, the green curve to be high where there are green dots, and the blue curve to be high where there are blue dots We'll compute the the likelihood and the negative log likelihood."
|
||||
"The left is model output and the right is the model output after the softmax has been applied, so it now lies in the range [0,1] and represents the probability, that y=0 (red), 1 (green) and 2 (blue). The dots at the bottom show the training data with the same color scheme. So we want the red curve to be high where there are red dots, the green curve to be high where there are green dots, and the blue curve to be high where there are blue dots We'll compute the likelihood and the negative log likelihood."
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -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"
|
||||
@@ -309,7 +301,7 @@
|
||||
"source": [
|
||||
"def loss_function_1D(dist_prop, data, model, phi_start, search_direction):\n",
|
||||
" # Return the loss after moving this far\n",
|
||||
" return compute_loss(data[0,:], data[1,:], model, phi_start+ search_direction * dist_prop)\n",
|
||||
" return compute_loss(data[0,:], data[1,:], model, phi_start - search_direction * dist_prop)\n",
|
||||
"\n",
|
||||
"def line_search(data, model, phi, gradient, thresh=.00001, max_dist = 0.1, max_iter = 15, verbose=False):\n",
|
||||
" # Initialize four points along the range we are going to search\n",
|
||||
@@ -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",
|
||||
@@ -373,7 +365,7 @@
|
||||
"def gradient_descent_step(phi, data, model):\n",
|
||||
" # TODO -- update Phi with the gradient descent step (equation 6.3)\n",
|
||||
" # 1. Compute the gradient (you wrote this function above)\n",
|
||||
" # 2. Find the best step size alpha using line search function (above) -- use negative gradient as going downhill\n",
|
||||
" # 2. Find the best step size alpha using line search function (above)\n",
|
||||
" # 3. Update the parameters phi based on the gradient and the step size alpha.\n",
|
||||
"\n",
|
||||
" return phi"
|
||||
@@ -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,8 +141,8 @@
|
||||
"\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",
|
||||
" # Remmember to use np.matmul for matrix multiplications\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",
|
||||
" all_h[layer+1] = all_f[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",
|
||||
|
||||
@@ -325,7 +325,7 @@
|
||||
" for layer in range(1,K):\n",
|
||||
" aggregate_dl_df[layer][:,c_data] = np.squeeze(all_dl_df[layer])\n",
|
||||
"\n",
|
||||
"for layer in range(1,K):\n",
|
||||
"for layer in reversed(range(1,K)):\n",
|
||||
" print(\"Layer %d, std of dl_dh = %3.3f\"%(layer, np.std(aggregate_dl_df[layer].ravel())))\n"
|
||||
],
|
||||
"metadata": {
|
||||
@@ -337,8 +337,8 @@
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"# You can see that the values of the hidden units are increasing on average (the variance is across all hidden units at the layer\n",
|
||||
"# and the 1000 training examples\n",
|
||||
"# You can see that the gradients of the hidden units are increasing on average (the standard deviation is across all hidden units at the layer\n",
|
||||
"# and the 100 training examples\n",
|
||||
"\n",
|
||||
"# TODO\n",
|
||||
"# Change this to 50 layers with 80 hidden units per layer\n",
|
||||
|
||||
@@ -1,28 +1,10 @@
|
||||
{
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 0,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"provenance": [],
|
||||
"gpuType": "T4",
|
||||
"authorship_tag": "ABX9TyOuKMUcKfOIhIL2qTX9jJCy",
|
||||
"include_colab_link": true
|
||||
},
|
||||
"kernelspec": {
|
||||
"name": "python3",
|
||||
"display_name": "Python 3"
|
||||
},
|
||||
"language_info": {
|
||||
"name": "python"
|
||||
},
|
||||
"accelerator": "GPU"
|
||||
},
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "view-in-github",
|
||||
"colab_type": "text"
|
||||
"colab_type": "text",
|
||||
"id": "view-in-github"
|
||||
},
|
||||
"source": [
|
||||
"<a href=\"https://colab.research.google.com/github/udlbook/udlbook/blob/main/Notebooks/Chap08/8_1_MNIST_1D_Performance.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
|
||||
@@ -30,6 +12,9 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "L6chybAVFJW2"
|
||||
},
|
||||
"source": [
|
||||
"# **Notebook 8.1: MNIST_1D_Performance**\n",
|
||||
"\n",
|
||||
@@ -38,25 +23,27 @@
|
||||
"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",
|
||||
"Contact me at udlbookmail@gmail.com if you find any mistakes or have any suggestions."
|
||||
],
|
||||
"metadata": {
|
||||
"id": "L6chybAVFJW2"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"# Run this if you're in a Colab to install MNIST 1D repository\n",
|
||||
"%pip install git+https://github.com/greydanus/mnist1d"
|
||||
],
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "ifVjS4cTOqKz"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Run this if you're in a Colab to install MNIST 1D repository\n",
|
||||
"%pip install git+https://github.com/greydanus/mnist1d"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "qyE7G1StPIqO"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import torch, torch.nn as nn\n",
|
||||
"from torch.utils.data import TensorDataset, DataLoader\n",
|
||||
@@ -64,44 +51,42 @@
|
||||
"import numpy as np\n",
|
||||
"import matplotlib.pyplot as plt\n",
|
||||
"import mnist1d"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "qyE7G1StPIqO"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"Let's generate a training and test dataset using the MNIST1D code. The dataset gets saved as a .pkl file so it doesn't have to be regenerated each time."
|
||||
],
|
||||
"metadata": {
|
||||
"id": "F7LNq72SP6jO"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"Let's generate a training and test dataset using the MNIST1D code. The dataset gets saved as a .pkl file so it doesn't have to be regenerated each time."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "YLxf7dJfPaqw"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"!mkdir ./sample_data\n",
|
||||
"\n",
|
||||
"args = mnist1d.data.get_dataset_args()\n",
|
||||
"data = mnist1d.data.get_dataset(args, path='./sample_data/mnist1d_data.pkl', download=False, regenerate=False)\n",
|
||||
"data = mnist1d.data.get_dataset(args, path='./mnist1d_data.pkl', download=False, regenerate=False)\n",
|
||||
"\n",
|
||||
"# The training and test input and outputs are in\n",
|
||||
"# data['x'], data['y'], data['x_test'], and data['y_test']\n",
|
||||
"print(\"Examples in training set: {}\".format(len(data['y'])))\n",
|
||||
"print(\"Examples in test set: {}\".format(len(data['y_test'])))\n",
|
||||
"print(\"Length of each example: {}\".format(data['x'].shape[-1]))"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "YLxf7dJfPaqw"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "FxaB5vc0uevl"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"D_i = 40 # Input dimensions\n",
|
||||
"D_k = 100 # Hidden dimensions\n",
|
||||
@@ -122,15 +107,15 @@
|
||||
"\n",
|
||||
"# Call the function you just defined\n",
|
||||
"model.apply(weights_init)\n"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "FxaB5vc0uevl"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "_rX6N3VyyQTY"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# choose cross entropy loss function (equation 5.24)\n",
|
||||
"loss_function = torch.nn.CrossEntropyLoss()\n",
|
||||
@@ -139,9 +124,9 @@
|
||||
"# object that decreases learning rate by half every 10 epochs\n",
|
||||
"scheduler = StepLR(optimizer, step_size=10, gamma=0.5)\n",
|
||||
"x_train = torch.tensor(data['x'].astype('float32'))\n",
|
||||
"y_train = torch.tensor(data['y'].transpose().astype('long'))\n",
|
||||
"y_train = torch.tensor(data['y'].transpose().astype('int64'))\n",
|
||||
"x_test= torch.tensor(data['x_test'].astype('float32'))\n",
|
||||
"y_test = torch.tensor(data['y_test'].astype('long'))\n",
|
||||
"y_test = torch.tensor(data['y_test'].astype('int64'))\n",
|
||||
"\n",
|
||||
"# load the data into a class that creates the batches\n",
|
||||
"data_loader = DataLoader(TensorDataset(x_train,y_train), batch_size=100, shuffle=True, worker_init_fn=np.random.seed(1))\n",
|
||||
@@ -186,15 +171,15 @@
|
||||
"\n",
|
||||
" # tell scheduler to consider updating learning rate\n",
|
||||
" scheduler.step()"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "_rX6N3VyyQTY"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "yI-l6kA_EH9G"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Plot the results\n",
|
||||
"fig, ax = plt.subplots()\n",
|
||||
@@ -215,25 +200,38 @@
|
||||
"ax.set_title('Train loss %3.2f, Test loss %3.2f'%(losses_train[-1],losses_test[-1]))\n",
|
||||
"ax.legend()\n",
|
||||
"plt.show()"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "yI-l6kA_EH9G"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "q-yT6re6GZS4"
|
||||
},
|
||||
"source": [
|
||||
"**TODO**\n",
|
||||
"\n",
|
||||
"Play with the model -- try changing the number of layers, hidden units, learning rate, batch size, momentum or anything else you like. See if you can improve the test results.\n",
|
||||
"\n",
|
||||
"Is it a good idea to optimize the hyperparameters in this way? Will the final result be a good estimate of the true test performance?"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "q-yT6re6GZS4"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"accelerator": "GPU",
|
||||
"colab": {
|
||||
"authorship_tag": "ABX9TyOuKMUcKfOIhIL2qTX9jJCy",
|
||||
"gpuType": "T4",
|
||||
"include_colab_link": true,
|
||||
"provenance": []
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"name": "python"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 0
|
||||
}
|
||||
|
||||
@@ -293,7 +293,8 @@
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"# Plot the noise, bias and variance as a function of capacity\n",
|
||||
"hidden_variables = [1,2,3,4,5,6,7,8,9,10,11,12]\n",
|
||||
"n_hidden = 12\n",
|
||||
"hidden_variables = list(range(1, n_hidden + 1))\n",
|
||||
"bias = np.zeros((len(hidden_variables),1)) ;\n",
|
||||
"variance = np.zeros((len(hidden_variables),1)) ;\n",
|
||||
"\n",
|
||||
@@ -321,7 +322,7 @@
|
||||
"ax.plot(hidden_variables, variance, 'k-')\n",
|
||||
"ax.plot(hidden_variables, bias, 'r-')\n",
|
||||
"ax.plot(hidden_variables, variance+bias, 'g-')\n",
|
||||
"ax.set_xlim(0,12)\n",
|
||||
"ax.set_xlim(0,n_hidden)\n",
|
||||
"ax.set_ylim(0,0.5)\n",
|
||||
"ax.set_xlabel(\"Model capacity\")\n",
|
||||
"ax.set_ylabel(\"Variance\")\n",
|
||||
@@ -333,15 +334,6 @@
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [],
|
||||
"metadata": {
|
||||
"id": "WKUyOAywL_b2"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -99,7 +99,7 @@
|
||||
"# data['x'], data['y'], data['x_test'], and data['y_test']\n",
|
||||
"print(\"Examples in training set: {}\".format(len(data['y'])))\n",
|
||||
"print(\"Examples in test set: {}\".format(len(data['y_test'])))\n",
|
||||
"print(\"Length of each example: {}\".format(data['x'].shape[-1]))"
|
||||
"print(\"Dimensionality of each example: {}\".format(data['x'].shape[-1]))"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "PW2gyXL5UkLU"
|
||||
@@ -147,7 +147,7 @@
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"def fit_model(model, data):\n",
|
||||
"def fit_model(model, data, n_epoch):\n",
|
||||
"\n",
|
||||
" # choose cross entropy loss function (equation 5.24)\n",
|
||||
" loss_function = torch.nn.CrossEntropyLoss()\n",
|
||||
@@ -164,9 +164,6 @@
|
||||
" # load the data into a class that creates the batches\n",
|
||||
" data_loader = DataLoader(TensorDataset(x_train,y_train), batch_size=100, shuffle=True, worker_init_fn=np.random.seed(1))\n",
|
||||
"\n",
|
||||
" # loop over the dataset n_epoch times\n",
|
||||
" n_epoch = 1000\n",
|
||||
"\n",
|
||||
" for epoch in range(n_epoch):\n",
|
||||
" # loop over batches\n",
|
||||
" for i, batch in enumerate(data_loader):\n",
|
||||
@@ -203,6 +200,18 @@
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"def count_parameters(model):\n",
|
||||
" return sum(p.numel() for p in model.parameters() if p.requires_grad)"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "AQNCmFNV6JpV"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
@@ -226,19 +235,27 @@
|
||||
"# This code will take a while (~30 mins on GPU) to run! Go and make a cup of coffee!\n",
|
||||
"\n",
|
||||
"hidden_variables = np.array([2,4,6,8,10,14,18,22,26,30,35,40,45,50,55,60,70,80,90,100,120,140,160,180,200,250,300,400]) ;\n",
|
||||
"\n",
|
||||
"errors_train_all = np.zeros_like(hidden_variables)\n",
|
||||
"errors_test_all = np.zeros_like(hidden_variables)\n",
|
||||
"total_weights_all = np.zeros_like(hidden_variables)\n",
|
||||
"\n",
|
||||
"# loop over the dataset n_epoch times\n",
|
||||
"n_epoch = 1000\n",
|
||||
"\n",
|
||||
"# For each hidden variable size\n",
|
||||
"for c_hidden in range(len(hidden_variables)):\n",
|
||||
" print(f'Training model with {hidden_variables[c_hidden]:3d} hidden variables')\n",
|
||||
" # Get a model\n",
|
||||
" model = get_model(hidden_variables[c_hidden]) ;\n",
|
||||
" # Count and store number of weights\n",
|
||||
" total_weights_all[c_hidden] = count_parameters(model)\n",
|
||||
" # Train the model\n",
|
||||
" errors_train, errors_test = fit_model(model, data)\n",
|
||||
" errors_train, errors_test = fit_model(model, data, n_epoch)\n",
|
||||
" # Store the results\n",
|
||||
" errors_train_all[c_hidden] = errors_train\n",
|
||||
" errors_test_all[c_hidden]= errors_test"
|
||||
" errors_test_all[c_hidden]= errors_test\n",
|
||||
"\n"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "K4OmBZGHWXpk"
|
||||
@@ -249,12 +266,29 @@
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"import matplotlib.pyplot as plt\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"# Assuming data['y'] is available and contains the training examples\n",
|
||||
"num_training_examples = len(data['y'])\n",
|
||||
"\n",
|
||||
"# Find the index where total_weights_all is closest to num_training_examples\n",
|
||||
"closest_index = np.argmin(np.abs(np.array(total_weights_all) - num_training_examples))\n",
|
||||
"\n",
|
||||
"# Get the corresponding value of hidden variables\n",
|
||||
"hidden_variable_at_num_training_examples = hidden_variables[closest_index]\n",
|
||||
"\n",
|
||||
"# Plot the results\n",
|
||||
"fig, ax = plt.subplots()\n",
|
||||
"ax.plot(hidden_variables, errors_train_all, 'r-', label='train')\n",
|
||||
"ax.plot(hidden_variables, errors_test_all, 'b-', label='test')\n",
|
||||
"ax.set_ylim(0,100);\n",
|
||||
"ax.set_xlabel('No hidden variables'); ax.set_ylabel('Error')\n",
|
||||
"\n",
|
||||
"# Add a vertical line at the point where total weights equal the number of training examples\n",
|
||||
"ax.axvline(x=hidden_variable_at_num_training_examples, color='g', linestyle='--', label='N(weights) = N(train)')\n",
|
||||
"\n",
|
||||
"ax.set_ylim(0, 100)\n",
|
||||
"ax.set_xlabel('No. hidden variables')\n",
|
||||
"ax.set_ylabel('Error')\n",
|
||||
"ax.legend()\n",
|
||||
"plt.show()\n"
|
||||
],
|
||||
@@ -263,6 +297,24 @@
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [],
|
||||
"metadata": {
|
||||
"id": "KT4X8_hE5NFb"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [],
|
||||
"metadata": {
|
||||
"id": "iGKZSfVF2r4z"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -134,7 +134,7 @@
|
||||
"source": [
|
||||
"# Volume of a hypersphere\n",
|
||||
"\n",
|
||||
"In the second part of this notebook we calculate the volume of a hypersphere of radius 0.5 (i.e., of diameter 1) as a function of the radius. Note that you you can check your answer by doing the calculation for 2D using the standard formula for the area of a circle and making sure it matches."
|
||||
"In the second part of this notebook we calculate the volume of a hypersphere of radius 0.5 (i.e., of diameter 1) as a function of the radius. Note that you can check your answer by doing the calculation for 2D using the standard formula for the area of a circle and making sure it matches."
|
||||
],
|
||||
"metadata": {
|
||||
"id": "b2FYKV1SL4Z7"
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"provenance": [],
|
||||
"authorship_tag": "ABX9TyPJzymRTuvoWggIskM2Kamc",
|
||||
"include_colab_link": true
|
||||
},
|
||||
"kernelspec": {
|
||||
@@ -458,14 +457,14 @@
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"def dldphi0(phi, lambda_):\n",
|
||||
"def dregdphi0(phi, lambda_):\n",
|
||||
" # TODO compute the derivative with respect to phi0\n",
|
||||
" # Replace this line:]\n",
|
||||
" deriv = 0\n",
|
||||
"\n",
|
||||
" return deriv\n",
|
||||
"\n",
|
||||
"def dldphi1(phi, lambda_):\n",
|
||||
"def dregdphi1(phi, lambda_):\n",
|
||||
" # TODO compute the derivative with respect to phi1\n",
|
||||
" # Replace this line:]\n",
|
||||
" deriv = 0\n",
|
||||
@@ -475,8 +474,8 @@
|
||||
"\n",
|
||||
"\n",
|
||||
"def compute_gradient2(data_x, data_y, phi, lambda_):\n",
|
||||
" dl_dphi0 = gabor_deriv_phi0(data_x, data_y, phi[0],phi[1])+dldphi0(np.squeeze(phi), lambda_)\n",
|
||||
" dl_dphi1 = gabor_deriv_phi1(data_x, data_y, phi[0],phi[1])+dldphi1(np.squeeze(phi), lambda_)\n",
|
||||
" dl_dphi0 = gabor_deriv_phi0(data_x, data_y, phi[0],phi[1])+dregdphi0(np.squeeze(phi), lambda_)\n",
|
||||
" dl_dphi1 = gabor_deriv_phi1(data_x, data_y, phi[0],phi[1])+dregdphi1(np.squeeze(phi), lambda_)\n",
|
||||
" # Return the gradient\n",
|
||||
" return np.array([[dl_dphi0],[dl_dphi1]])\n",
|
||||
"\n",
|
||||
|
||||
@@ -342,7 +342,7 @@
|
||||
"[\\mathbf{h}^*;1]\\biggr],\n",
|
||||
"\\end{align}\n",
|
||||
"\n",
|
||||
"where the notation $[\\mathbf{h}^{*T},1]$ is a row vector containing $\\mathbf{h}^{T}$ with a one appended to the end and $[\\mathbf{h};1 ]$ is a column vector containing $\\mathbf{h}$ with a one appended to the end.\n",
|
||||
"where the notation $[\\mathbf{h}^{*T},1]$ is a row vector containing $\\mathbf{h}^{*T}$ with a one appended to the end and $[\\mathbf{h}^{*};1 ]$ is a column vector containing $\\mathbf{h}^{*}$ with a one appended to the end.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"To compute this, we reformulated the integrand using the relations from appendices C.3.3 and C.3.4 as the product of a normal distribution in $\\boldsymbol\\phi$ and a constant with respect\n",
|
||||
|
||||
@@ -107,10 +107,7 @@
|
||||
" # Initialize the parameters with He initialization\n",
|
||||
" if isinstance(layer_in, nn.Linear):\n",
|
||||
" nn.init.kaiming_uniform_(layer_in.weight)\n",
|
||||
" layer_in.bias.data.fill_(0.0)\n",
|
||||
"\n",
|
||||
"# Call the function you just defined\n",
|
||||
"model.apply(weights_init)"
|
||||
" layer_in.bias.data.fill_(0.0)\n"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "JfIFWFIL33eF"
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"provenance": [],
|
||||
"authorship_tag": "ABX9TyMbSR8fzpXvO6TIQdO7bI0H",
|
||||
"include_colab_link": true
|
||||
},
|
||||
"kernelspec": {
|
||||
@@ -31,7 +30,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",
|
||||
@@ -71,9 +70,9 @@
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"def subsample(x_in):\n",
|
||||
"def downsample(x_in):\n",
|
||||
" x_out = np.zeros(( int(np.ceil(x_in.shape[0]/2)), int(np.ceil(x_in.shape[1]/2)) ))\n",
|
||||
" # TO DO -- write the subsampling routine\n",
|
||||
" # TODO -- write the downsampling routine\n",
|
||||
" # Replace this line\n",
|
||||
" x_out = x_out\n",
|
||||
"\n",
|
||||
@@ -91,8 +90,8 @@
|
||||
"source": [
|
||||
"print(\"Original:\")\n",
|
||||
"print(orig_4_4)\n",
|
||||
"print(\"Subsampled:\")\n",
|
||||
"print(subsample(orig_4_4))"
|
||||
"print(\"Downsampled:\")\n",
|
||||
"print(downsample(orig_4_4))"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "O_i0y72_JwGZ"
|
||||
@@ -127,24 +126,24 @@
|
||||
"image = Image.open('test_image.png')\n",
|
||||
"# convert image to numpy array\n",
|
||||
"data = asarray(image)\n",
|
||||
"data_subsample = subsample(data);\n",
|
||||
"data_downsample = downsample(data);\n",
|
||||
"\n",
|
||||
"plt.figure(figsize=(5,5))\n",
|
||||
"plt.imshow(data, cmap='gray')\n",
|
||||
"plt.show()\n",
|
||||
"\n",
|
||||
"plt.figure(figsize=(5,5))\n",
|
||||
"plt.imshow(data_subsample, cmap='gray')\n",
|
||||
"plt.imshow(data_downsample, cmap='gray')\n",
|
||||
"plt.show()\n",
|
||||
"\n",
|
||||
"data_subsample2 = subsample(data_subsample)\n",
|
||||
"data_downsample2 = downsample(data_downsample)\n",
|
||||
"plt.figure(figsize=(5,5))\n",
|
||||
"plt.imshow(data_subsample2, cmap='gray')\n",
|
||||
"plt.imshow(data_downsample2, cmap='gray')\n",
|
||||
"plt.show()\n",
|
||||
"\n",
|
||||
"data_subsample3 = subsample(data_subsample2)\n",
|
||||
"data_downsample3 = downsample(data_downsample2)\n",
|
||||
"plt.figure(figsize=(5,5))\n",
|
||||
"plt.imshow(data_subsample3, cmap='gray')\n",
|
||||
"plt.imshow(data_downsample3, cmap='gray')\n",
|
||||
"plt.show()"
|
||||
],
|
||||
"metadata": {
|
||||
@@ -301,7 +300,7 @@
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"# Define 2 by 2 original patch\n",
|
||||
"orig_2_2 = np.array([[2, 4], [4,8]])\n",
|
||||
"orig_2_2 = np.array([[6, 8], [8,4]])\n",
|
||||
"print(orig_2_2)"
|
||||
],
|
||||
"metadata": {
|
||||
@@ -345,11 +344,11 @@
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"# Let's re-upsample, sub-sampled rick\n",
|
||||
"data_duplicate = duplicate(data_subsample3);\n",
|
||||
"# Let's re-upsample, downsampled rick\n",
|
||||
"data_duplicate = duplicate(data_downsample3);\n",
|
||||
"\n",
|
||||
"plt.figure(figsize=(5,5))\n",
|
||||
"plt.imshow(data_subsample3, cmap='gray')\n",
|
||||
"plt.imshow(data_downsample3, cmap='gray')\n",
|
||||
"plt.show()\n",
|
||||
"\n",
|
||||
"plt.figure(figsize=(5,5))\n",
|
||||
@@ -388,7 +387,7 @@
|
||||
"# The input x_high_res is the original high res image, from which you can deduce the position of the maximum index\n",
|
||||
"def max_unpool(x_in, x_high_res):\n",
|
||||
" x_out = np.zeros(( x_in.shape[0]*2, x_in.shape[1]*2 ))\n",
|
||||
" # TO DO -- write the subsampling routine\n",
|
||||
" # TODO -- write the unpooling routine\n",
|
||||
" # Replace this line\n",
|
||||
" x_out = x_out\n",
|
||||
"\n",
|
||||
@@ -417,7 +416,7 @@
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"# Let's re-upsample, sub-sampled rick\n",
|
||||
"# Let's re-upsample, down-sampled rick\n",
|
||||
"data_max_unpool= max_unpool(data_maxpool3,data_maxpool2);\n",
|
||||
"\n",
|
||||
"plt.figure(figsize=(5,5))\n",
|
||||
@@ -489,7 +488,7 @@
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"# Let's re-upsample, sub-sampled rick\n",
|
||||
"# Let's re-upsample, down-sampled rick\n",
|
||||
"data_bilinear = bilinear(data_meanpool3);\n",
|
||||
"\n",
|
||||
"plt.figure(figsize=(5,5))\n",
|
||||
|
||||
@@ -1,26 +1,10 @@
|
||||
{
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 0,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"provenance": [],
|
||||
"authorship_tag": "ABX9TyNAcc98STMeyQgh9SbVHWG+",
|
||||
"include_colab_link": true
|
||||
},
|
||||
"kernelspec": {
|
||||
"name": "python3",
|
||||
"display_name": "Python 3"
|
||||
},
|
||||
"language_info": {
|
||||
"name": "python"
|
||||
}
|
||||
},
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "view-in-github",
|
||||
"colab_type": "text"
|
||||
"colab_type": "text",
|
||||
"id": "view-in-github"
|
||||
},
|
||||
"source": [
|
||||
"<a href=\"https://colab.research.google.com/github/udlbook/udlbook/blob/main/Notebooks/Chap10/10_5_Convolution_For_MNIST.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
|
||||
@@ -28,6 +12,9 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "t9vk9Elugvmi"
|
||||
},
|
||||
"source": [
|
||||
"# **Notebook 10.5: Convolution for MNIST**\n",
|
||||
"\n",
|
||||
@@ -37,14 +24,18 @@
|
||||
"\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",
|
||||
"If you are using Google Colab, you can change your runtime to an instance with GPU support to speed up training, e.g. a T4 GPU. If you do this, the cell below should output ``device(type='cuda')``\n",
|
||||
"\n",
|
||||
"Contact me at udlbookmail@gmail.com if you find any mistakes or have any suggestions.\n"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "t9vk9Elugvmi"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "YrXWAH7sUWvU"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import torch\n",
|
||||
"import torchvision\n",
|
||||
@@ -52,23 +43,34 @@
|
||||
"import torch.nn.functional as F\n",
|
||||
"import torch.optim as optim\n",
|
||||
"import matplotlib.pyplot as plt\n",
|
||||
"import random"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "YrXWAH7sUWvU"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
"import random\n",
|
||||
"device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n",
|
||||
"device"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "wScBGXXFVadm"
|
||||
},
|
||||
"outputs": [],
|
||||
"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 (No change needed if using Google Colab)\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,22 +79,22 @@
|
||||
" 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",
|
||||
" (0.1307,), (0.3081,))\n",
|
||||
" ])),\n",
|
||||
" batch_size=batch_size_test, shuffle=True)"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "wScBGXXFVadm"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "8bKADvLHbiV5"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Let's draw some of the training data\n",
|
||||
"examples = enumerate(test_loader)\n",
|
||||
@@ -107,24 +109,24 @@
|
||||
" plt.xticks([])\n",
|
||||
" plt.yticks([])\n",
|
||||
"plt.show()"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "8bKADvLHbiV5"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"Define the network. This is a more typical way to define a network than the sequential structure. We define a class for the network, and define the parameters in the constructor. Then we use a function called forward to actually run the network. It's easy to see how you might use residual connections in this format."
|
||||
],
|
||||
"metadata": {
|
||||
"id": "_sFvRDGrl4qe"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"Define the network. This is a more typical way to define a network than the sequential structure. We define a class for the network, and define the parameters in the constructor. Then we use a function called forward to actually run the network. It's easy to see how you might use residual connections in this format."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "EQkvw2KOPVl7"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from os import X_OK\n",
|
||||
"# TODO Change this class to implement\n",
|
||||
@@ -165,52 +167,54 @@
|
||||
"\n",
|
||||
"\n",
|
||||
"\n"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "EQkvw2KOPVl7"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "qWZtkCZcU_dg"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# He initialization of weights\n",
|
||||
"def weights_init(layer_in):\n",
|
||||
" if isinstance(layer_in, nn.Linear):\n",
|
||||
" nn.init.kaiming_uniform_(layer_in.weight)\n",
|
||||
" layer_in.bias.data.fill_(0.0)"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "qWZtkCZcU_dg"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "FslroPJJffrh"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Create network\n",
|
||||
"model = Net()\n",
|
||||
"model = Net().to(device)\n",
|
||||
"# Initialize model weights\n",
|
||||
"model.apply(weights_init)\n",
|
||||
"# Define optimizer\n",
|
||||
"optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "FslroPJJffrh"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "xKQd9PzkQ766"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Main training routine\n",
|
||||
"def train(epoch):\n",
|
||||
" model.train()\n",
|
||||
" # Get each\n",
|
||||
" for batch_idx, (data, target) in enumerate(train_loader):\n",
|
||||
" data = data.to(device)\n",
|
||||
" target = target.to(device)\n",
|
||||
" optimizer.zero_grad()\n",
|
||||
" output = model(data)\n",
|
||||
" loss = F.nll_loss(output, target)\n",
|
||||
@@ -220,15 +224,15 @@
|
||||
" if batch_idx % 10 == 0:\n",
|
||||
" print('Train Epoch: {} [{}/{}]\\tLoss: {:.6f}'.format(\n",
|
||||
" epoch, batch_idx * len(data), len(train_loader.dataset), loss.item()))"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "xKQd9PzkQ766"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "Byn-f7qWRLxX"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Run on test data\n",
|
||||
"def test():\n",
|
||||
@@ -237,6 +241,8 @@
|
||||
" correct = 0\n",
|
||||
" with torch.no_grad():\n",
|
||||
" for data, target in test_loader:\n",
|
||||
" data = data.to(device)\n",
|
||||
" target = target.to(device)\n",
|
||||
" output = model(data)\n",
|
||||
" test_loss += F.nll_loss(output, target, size_average=False).item()\n",
|
||||
" pred = output.data.max(1, keepdim=True)[1]\n",
|
||||
@@ -245,15 +251,15 @@
|
||||
" print('\\nTest set: Avg. loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\\n'.format(\n",
|
||||
" test_loss, correct, len(test_loader.dataset),\n",
|
||||
" 100. * correct / len(test_loader.dataset)))"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "Byn-f7qWRLxX"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "YgLaex1pfhqz"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Get initial performance\n",
|
||||
"test()\n",
|
||||
@@ -262,15 +268,15 @@
|
||||
"for epoch in range(1, n_epochs + 1):\n",
|
||||
" train(epoch)\n",
|
||||
" test()"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "YgLaex1pfhqz"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "o7fRUAy9Se1B"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Run network on data we got before and show predictions\n",
|
||||
"output = model(example_data)\n",
|
||||
@@ -285,12 +291,23 @@
|
||||
" plt.xticks([])\n",
|
||||
" plt.yticks([])\n",
|
||||
"plt.show()"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "o7fRUAy9Se1B"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"authorship_tag": "ABX9TyORZF8xy4X1yf4oRhRq8Rtm",
|
||||
"include_colab_link": true,
|
||||
"provenance": []
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"name": "python"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 0
|
||||
}
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"# K is width, D is number of hidden units in each layer\n",
|
||||
"# K is depth, D is number of hidden units in each layer\n",
|
||||
"def init_params(K, D):\n",
|
||||
" # Set seed so we always get the same random numbers\n",
|
||||
" np.random.seed(1)\n",
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"# **Notebook 12.1: Multhead Self-Attention**\n",
|
||||
"# **Notebook 12.2: Multihead Self-Attention**\n",
|
||||
"\n",
|
||||
"This notebook builds a multihead self-attention mechanism as in figure 12.6\n",
|
||||
"\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"
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"provenance": [],
|
||||
"authorship_tag": "ABX9TyM0StKV3FIZ3MZqfflqC0Rv",
|
||||
"include_colab_link": true
|
||||
},
|
||||
"kernelspec": {
|
||||
@@ -339,7 +338,7 @@
|
||||
" print(\"Initial generator loss = \", compute_generator_loss(z, theta, phi0, phi1))\n",
|
||||
" for iter in range(n_iter):\n",
|
||||
" # Get gradient\n",
|
||||
" dl_dtheta = compute_generator_gradient(x_real, x_syn, phi0, phi1)\n",
|
||||
" dl_dtheta = compute_generator_gradient(z, theta, phi0, phi1)\n",
|
||||
" # Take a gradient step (uphill, since we are trying to make synthesized data less well classified by discriminator)\n",
|
||||
" theta = theta + alpha * dl_dtheta ;\n",
|
||||
"\n",
|
||||
|
||||
@@ -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_1_Latent_Variable_Models.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"
|
||||
@@ -43,7 +41,6 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "IyVn-Gi-p7wf"
|
||||
@@ -55,7 +52,7 @@
|
||||
"Pr(z) = \\text{Norm}_{z}[0,1]\n",
|
||||
"\\end{equation}\n",
|
||||
"\n",
|
||||
"As in figure 17.2, we'll assume that the output is two dimensional, we we need to define a function that maps from the 1D latent variable to two dimensions. Usually, we would use a neural network, but in this case, we'll just define an arbitrary relationship.\n",
|
||||
"As in figure 17.2, we'll assume that the output is two dimensional, we need to define a function that maps from the 1D latent variable to two dimensions. Usually, we would use a neural network, but in this case, we'll just define an arbitrary relationship.\n",
|
||||
"\n",
|
||||
"\\begin{align}\n",
|
||||
"x_{1} &=& 0.5\\cdot\\exp\\Bigl[\\sin\\bigl[2+ 3.675 z \\bigr]\\Bigr]\\\\\n",
|
||||
@@ -79,7 +76,6 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "KB9FU34onW1j"
|
||||
@@ -145,7 +141,6 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "sQg2gKR5zMrF"
|
||||
@@ -223,7 +218,6 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "0X4NwixzqxtZ"
|
||||
@@ -254,7 +248,6 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "25xqXnmFo-PH"
|
||||
@@ -281,7 +274,7 @@
|
||||
"# We can't integrate this function in closed form\n",
|
||||
"# So let's approximate it as a sum over the z values (z = np.arange(-3,3,0.01))\n",
|
||||
"# You will need the functions get_likelihood() and get_prior()\n",
|
||||
"# To make this a valid probability distribution, you need to divide\n",
|
||||
"# To make this a valid probability distribution, you need to multiply\n",
|
||||
"# By the z-increment (0.01)\n",
|
||||
"# Replace this line\n",
|
||||
"pr_x1_x2 = np.zeros_like(x1_mesh)\n",
|
||||
@@ -292,7 +285,6 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "W264N7By_h9y"
|
||||
@@ -320,7 +312,6 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "D7N7oqLe-eJO"
|
||||
@@ -388,9 +379,8 @@
|
||||
],
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"authorship_tag": "ABX9TyOSEQVqxE5KrXmsZVh9M3gq",
|
||||
"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/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"
|
||||
@@ -61,7 +58,7 @@
|
||||
"by drawing $I$ samples $y_i$ and using the formula:\n",
|
||||
"\n",
|
||||
"\\begin{equation}\n",
|
||||
"\\mathbb{E}_{y}\\Bigl[\\exp\\bigl[- (y-1)^4\\bigr]\\Bigr] \\approx \\frac{1}{I} \\sum_{i=1}^I \\exp\\bigl[-(y-1)^4 \\bigr]\n",
|
||||
"\\mathbb{E}_{y}\\Bigl[\\exp\\bigl[- (y-1)^4\\bigr]\\Bigr] \\approx \\frac{1}{I} \\sum_{i=1}^I \\exp\\bigl[-(y_i-1)^4 \\bigr]\n",
|
||||
"\\end{equation}"
|
||||
]
|
||||
},
|
||||
@@ -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": {
|
||||
@@ -393,7 +392,7 @@
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"# Update the state values for the current policy, by making the values at at adjacent\n",
|
||||
"# Update the state values for the current policy, by making the values at adjacent\n",
|
||||
"# states compatible with the Bellman equation (equation 19.11)\n",
|
||||
"def policy_evaluation(policy, state_values, rewards, transition_probabilities_given_action, gamma):\n",
|
||||
"\n",
|
||||
@@ -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",
|
||||
|
||||
@@ -437,7 +437,7 @@
|
||||
" new_state = np.random.choice(a=np.arange(0,transition_probabilities_given_action.shape[0]),p = transition_probabilities_given_action[:,state,action])\n",
|
||||
" # Return the reward\n",
|
||||
" reward = reward_structure[new_state]\n",
|
||||
" is_terminal = new_state in [terminal_states]\n",
|
||||
" is_terminal = new_state in terminal_states\n",
|
||||
"\n",
|
||||
" return new_state, reward, action, is_terminal"
|
||||
]
|
||||
|
||||
@@ -265,7 +265,7 @@
|
||||
"\n",
|
||||
"In this icy environment the penguin is at one of the discrete cells in the gridworld. The agent starts each episode on a randomly chosen cell. The environment state dynamics are captured by the transition probabilities $Pr(s_{t+1} |s_t, a_t)$ where $s_t$ is the current state, $a_t$ is the action chosen, and $s_{t+1}$ is the next state at decision stage t. At each decision stage, the penguin can move in one of four directions: $a=0$ means try to go upward, $a=1$, right, $a=2$ down and $a=3$ left.\n",
|
||||
"\n",
|
||||
"However, the ice is slippery, so we don't always go the direction we want to: every time the agent chooses an action, with 0.25 probability, the environment changes the action taken to a differenct action, which is uniformly sampled from the other available actions.\n",
|
||||
"However, the ice is slippery, so we don't always go the direction we want to: every time the agent chooses an action, with 0.25 probability, the environment changes the action taken to a different action, which is uniformly sampled from the other available actions.\n",
|
||||
"\n",
|
||||
"The rewards are deterministic; the penguin will receive a reward of +3 if it reaches the fish, -2 if it slips into a hole and 0 otherwise.\n",
|
||||
"\n",
|
||||
@@ -470,7 +470,7 @@
|
||||
"\n",
|
||||
" # Return the reward -- here the reward is for arriving at the state\n",
|
||||
" reward = reward_structure[new_state]\n",
|
||||
" is_terminal = new_state in [terminal_states]\n",
|
||||
" is_terminal = new_state in terminal_states\n",
|
||||
"\n",
|
||||
" return new_state, reward, action, is_terminal"
|
||||
]
|
||||
|
||||
@@ -44,7 +44,8 @@
|
||||
},
|
||||
"source": [
|
||||
"# Run this if you're in a Colab to install MNIST 1D repository\n",
|
||||
"!pip install git+https://github.com/greydanus/mnist1d"
|
||||
"!pip install git+https://github.com/greydanus/mnist1d\n",
|
||||
"!git clone https://github.com/greydanus/mnist1d"
|
||||
],
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
@@ -95,6 +96,12 @@
|
||||
"id": "I-vm_gh5xTJs"
|
||||
},
|
||||
"source": [
|
||||
"from mnist1d.data import get_dataset, get_dataset_args\n",
|
||||
"from mnist1d.utils import set_seed, to_pickle, from_pickle\n",
|
||||
"\n",
|
||||
"import sys ; sys.path.append('./mnist1d/notebooks')\n",
|
||||
"from train import get_model_args, train_model\n",
|
||||
"\n",
|
||||
"args = mnist1d.get_dataset_args()\n",
|
||||
"data = mnist1d.get_dataset(args=args) # by default, this will download a pre-made dataset from the GitHub repo\n",
|
||||
"\n",
|
||||
@@ -210,7 +217,7 @@
|
||||
" # we would return [1,1,0,0,1]\n",
|
||||
" # Remember that these are torch tensors and not numpy arrays\n",
|
||||
" # Replace this function:\n",
|
||||
" mask = torch.ones_like(scores)\n",
|
||||
" mask = torch.ones_like(absolute_weights)\n",
|
||||
"\n",
|
||||
"\n",
|
||||
" return mask"
|
||||
@@ -237,7 +244,6 @@
|
||||
"def find_lottery_ticket(model, dataset, args, sparsity_schedule, criteria_fn=None, **kwargs):\n",
|
||||
"\n",
|
||||
" criteria_fn = lambda init_params, final_params: final_params.abs()\n",
|
||||
"\n",
|
||||
" init_params = model.get_layer_vecs()\n",
|
||||
" stats = {'train_losses':[], 'test_losses':[], 'train_accs':[], 'test_accs':[]}\n",
|
||||
" models = []\n",
|
||||
@@ -253,7 +259,7 @@
|
||||
" model.set_layer_masks(masks)\n",
|
||||
"\n",
|
||||
" # training process\n",
|
||||
" results = mnist1d.train_model(dataset, model, args)\n",
|
||||
" results = train_model(dataset, model, args)\n",
|
||||
" model = results['checkpoints'][-1]\n",
|
||||
"\n",
|
||||
" # store stats\n",
|
||||
@@ -291,7 +297,8 @@
|
||||
},
|
||||
"source": [
|
||||
"# train settings\n",
|
||||
"model_args = mnist1d.get_model_args()\n",
|
||||
"from train import get_model_args, train_model\n",
|
||||
"model_args = get_model_args()\n",
|
||||
"model_args.total_steps = 1501\n",
|
||||
"model_args.hidden_size = 500\n",
|
||||
"model_args.print_every = 5000 # print never\n",
|
||||
|
||||
@@ -137,7 +137,7 @@
|
||||
"id": "CfZ-srQtmff2"
|
||||
},
|
||||
"source": [
|
||||
"Why might the distributions for blue and yellow populations be different? It could be that the behaviour of the populations is identical, but the credit rating algorithm is biased; it may favor one population over another or simply be more noisy for one group. Alternatively, it could be that that the populations genuinely behave differently. In practice, the differences in blue and yellow distributions are probably attributable to a combination of these factors.\n",
|
||||
"Why might the distributions for blue and yellow populations be different? It could be that the behaviour of the populations is identical, but the credit rating algorithm is biased; it may favor one population over another or simply be more noisy for one group. Alternatively, it could be that the populations genuinely behave differently. In practice, the differences in blue and yellow distributions are probably attributable to a combination of these factors.\n",
|
||||
"\n",
|
||||
"Let’s assume that we can’t retrain the credit score prediction algorithm; our job is to adjudicate whether each individual is refused the loan ($\\hat{y}=0$)\n",
|
||||
" or granted it ($\\hat{y}=1$). Since we only have the credit score\n",
|
||||
@@ -382,7 +382,7 @@
|
||||
"source": [
|
||||
"# Equal opportunity:\n",
|
||||
"\n",
|
||||
"The thresholds are chosen so that so that the true positive rate is is the same for both population. Of the people who pay back the loan, the same proportion are offered credit in each group. In terms of the two ROC curves, it means choosing thresholds so that the vertical position on each curve is the same without regard for the horizontal position."
|
||||
"The thresholds are chosen so that so that the true positive rate is the same for both population. Of the people who pay back the loan, the same proportion are offered credit in each group. In terms of the two ROC curves, it means choosing thresholds so that the vertical position on each curve is the same without regard for the horizontal position."
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
7
Notebooks/LICENSE (MIT)
Normal file
7
Notebooks/LICENSE (MIT)
Normal file
@@ -0,0 +1,7 @@
|
||||
Copyright 2023 Simon Prince
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
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
570
Trees/SAT_Construction_Answers.ipynb
Normal file
570
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.
20
index.html
Normal file
20
index.html
Normal file
@@ -0,0 +1,20 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||
<link
|
||||
href="https://fonts.googleapis.com/css2?family=Encode+Sans+Expanded:wght@400;700&display=swap"
|
||||
rel="stylesheet"
|
||||
/>
|
||||
|
||||
<title>Understanding Deep Learning</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
<script type="module" src="/src/index.jsx"></script>
|
||||
</body>
|
||||
</html>
|
||||
8
jsconfig.json
Normal file
8
jsconfig.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"baseUrl": "./",
|
||||
"paths": {
|
||||
"@/*": ["src/*"]
|
||||
}
|
||||
}
|
||||
}
|
||||
429
notebooks/DeepNN/DeepNetworks_Answers.ipynb
Normal file
429
notebooks/DeepNN/DeepNetworks_Answers.ipynb
Normal file
File diff suppressed because one or more lines are too long
22795
package-lock.json
generated
Executable file → Normal file
22795
package-lock.json
generated
Executable file → Normal file
File diff suppressed because it is too large
Load Diff
64
package.json
64
package.json
@@ -1,50 +1,36 @@
|
||||
{
|
||||
"name": "react-website-smooth-scroll",
|
||||
"name": "udlbook-website",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"homepage": "https://udlbook.github.io/udlbook",
|
||||
"dependencies": {
|
||||
"@fortawesome/fontawesome-svg-core": "^6.5.1",
|
||||
"@testing-library/jest-dom": "^5.15.1",
|
||||
"@testing-library/react": "^11.2.7",
|
||||
"@testing-library/user-event": "^12.8.3",
|
||||
"react": "^17.0.2",
|
||||
"react-dom": "^17.0.2",
|
||||
"react-icons": "^5.0.1",
|
||||
"react-router-dom": "^6.0.2",
|
||||
"react-scripts": "4.0.3",
|
||||
"react-scroll": "^1.8.4",
|
||||
"styled-components": "^5.3.3",
|
||||
"url-loader": "^4.1.1",
|
||||
"web-vitals": "^1.1.2"
|
||||
},
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"start": "react-scripts --openssl-legacy-provider start",
|
||||
"build": "react-scripts --openssl-legacy-provider build",
|
||||
"test": "react-scripts test",
|
||||
"eject": "react-scripts eject",
|
||||
"dev": "vite",
|
||||
"build": "vite build",
|
||||
"preview": "vite preview",
|
||||
"lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0",
|
||||
"predeploy": "npm run build",
|
||||
"deploy": "gh-pages -d build"
|
||||
"deploy": "gh-pages -d dist",
|
||||
"clean": "rm -rf node_modules dist",
|
||||
"format": "prettier --write ."
|
||||
},
|
||||
"eslintConfig": {
|
||||
"extends": [
|
||||
"react-app",
|
||||
"react-app/jest"
|
||||
]
|
||||
},
|
||||
"browserslist": {
|
||||
"production": [
|
||||
">0.2%",
|
||||
"not dead",
|
||||
"not op_mini all"
|
||||
],
|
||||
"development": [
|
||||
"last 1 chrome version",
|
||||
"last 1 firefox version",
|
||||
"last 1 safari version"
|
||||
]
|
||||
"dependencies": {
|
||||
"react": "^18.3.1",
|
||||
"react-dom": "^18.3.1",
|
||||
"react-icons": "^5.2.1",
|
||||
"react-router-dom": "^6.23.1",
|
||||
"react-scroll": "^1.8.4",
|
||||
"styled-components": "^6.1.11"
|
||||
},
|
||||
"devDependencies": {
|
||||
"gh-pages": "^6.1.1"
|
||||
"@vitejs/plugin-react-swc": "^3.5.0",
|
||||
"eslint": "^8.57.0",
|
||||
"eslint-plugin-react": "^7.34.2",
|
||||
"eslint-plugin-react-hooks": "^4.6.2",
|
||||
"eslint-plugin-react-refresh": "^0.4.7",
|
||||
"gh-pages": "^6.1.1",
|
||||
"prettier": "^3.3.1",
|
||||
"prettier-plugin-organize-imports": "^3.2.4",
|
||||
"vite": "^5.2.12"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta name="theme-color" content="#000000" />
|
||||
<meta
|
||||
name="description"
|
||||
content="Web site created using create-react-app"
|
||||
/>
|
||||
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
|
||||
<!--
|
||||
manifest.json provides metadata used when your web app is installed on a
|
||||
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
|
||||
-->
|
||||
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
|
||||
<!--
|
||||
Notice the use of %PUBLIC_URL% in the tags above.
|
||||
It will be replaced with the URL of the `public` folder during the build.
|
||||
Only files inside the `public` folder can be referenced from the HTML.
|
||||
|
||||
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
|
||||
work correctly both with client-side routing and a non-root public URL.
|
||||
Learn how to configure a non-root public URL by running `npm run build`.
|
||||
-->
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Encode+Sans+Expanded:wght@400;700&display=swap" rel="stylesheet">
|
||||
<title>Understanding Deep Learning</title>
|
||||
</head>
|
||||
<body>
|
||||
<noscript>You need to enable JavaScript to run this app.</noscript>
|
||||
<div id="root"></div>
|
||||
<!--
|
||||
This HTML file is a template.
|
||||
If you open it directly in the browser, you will see an empty page.
|
||||
|
||||
You can add webfonts, meta tags, or analytics to this file.
|
||||
The build step will place the bundled scripts into the <body> tag.
|
||||
|
||||
To begin the development, run `npm start` or `yarn start`.
|
||||
To create a production bundle, use `npm run build` or `yarn build`.
|
||||
-->
|
||||
</body>
|
||||
</html>
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 5.2 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 9.4 KiB |
@@ -1,25 +0,0 @@
|
||||
{
|
||||
"short_name": "React App",
|
||||
"name": "Create React App Sample",
|
||||
"icons": [
|
||||
{
|
||||
"src": "favicon.ico",
|
||||
"sizes": "64x64 32x32 24x24 16x16",
|
||||
"type": "image/x-icon"
|
||||
},
|
||||
{
|
||||
"src": "logo192.png",
|
||||
"type": "image/png",
|
||||
"sizes": "192x192"
|
||||
},
|
||||
{
|
||||
"src": "logo512.png",
|
||||
"type": "image/png",
|
||||
"sizes": "512x512"
|
||||
}
|
||||
],
|
||||
"start_url": ".",
|
||||
"display": "standalone",
|
||||
"theme_color": "#000000",
|
||||
"background_color": "#ffffff"
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
# https://www.robotstxt.org/robotstxt.html
|
||||
User-agent: *
|
||||
Disallow:
|
||||
@@ -1,6 +0,0 @@
|
||||
*{
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
padding: 0 ;
|
||||
font-family: 'Encode Sans Expanded', sans-serif;
|
||||
}
|
||||
19
src/App.js
19
src/App.js
@@ -1,19 +0,0 @@
|
||||
import './App.css';
|
||||
import {BrowserRouter as Router, Routes, Route} from 'react-router-dom'
|
||||
import Home from './pages';
|
||||
|
||||
|
||||
|
||||
|
||||
function App() {
|
||||
return (
|
||||
<Router>
|
||||
<Routes>
|
||||
<Route exact path="/udlbook/" element ={<Home/>} />
|
||||
</Routes>
|
||||
|
||||
</Router>
|
||||
);
|
||||
}
|
||||
|
||||
export default App;
|
||||
12
src/App.jsx
Executable file
12
src/App.jsx
Executable file
@@ -0,0 +1,12 @@
|
||||
import Index from "@/pages";
|
||||
import { BrowserRouter as Router, Route, Routes } from "react-router-dom";
|
||||
|
||||
export default function App() {
|
||||
return (
|
||||
<Router>
|
||||
<Routes>
|
||||
<Route exact path="/udlbook" element={<Index />} />
|
||||
</Routes>
|
||||
</Router>
|
||||
);
|
||||
}
|
||||
34
src/README.md
Normal file
34
src/README.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# Understanding Deep Learning
|
||||
|
||||
Understanding Deep Learning - Simon J.D. Prince
|
||||
|
||||
## Website
|
||||
|
||||
```shell
|
||||
# Install dependencies
|
||||
npm install
|
||||
|
||||
# Run the website in development mode
|
||||
npm dev
|
||||
|
||||
# Build the website
|
||||
npm build
|
||||
|
||||
# Preview the built website
|
||||
npm preview
|
||||
|
||||
# Format the code
|
||||
npm run format
|
||||
|
||||
# Lint the code
|
||||
npm run lint
|
||||
|
||||
# Clean the repository
|
||||
npm run clean
|
||||
|
||||
# Prepare to deploy the website
|
||||
npm run predeploy
|
||||
|
||||
# Deploy the website
|
||||
npm run deploy
|
||||
```
|
||||
@@ -1,23 +0,0 @@
|
||||
import styled from 'styled-components'
|
||||
import {Link} from 'react-scroll'
|
||||
|
||||
|
||||
export const Button= styled(Link)`
|
||||
border-radius: 50px;
|
||||
background: ${({primary}) => (primary ? '#01BF71' : '#010606')};
|
||||
white-space: nowrap;
|
||||
padding: ${({big}) => (big? ' 14px 48px': '12px 30px')};
|
||||
color: ${({dark}) => (dark ? '#010106': '#fff')};
|
||||
font-size: $${({fontBig}) => (fontBig ? '20px' : '16px')};
|
||||
outline: none;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
transition: all 0.2s ease-in-out;
|
||||
&:hover {
|
||||
transition: all 0.2s ease-in-out;
|
||||
background: ${({primary}) => (primary ? '#fff' : '#01BF71')}
|
||||
}
|
||||
`
|
||||
@@ -1,9 +1,9 @@
|
||||
import styled from 'styled-components'
|
||||
import {Link} from 'react-router-dom'
|
||||
import { Link } from "react-router-dom";
|
||||
import styled from "styled-components";
|
||||
|
||||
export const FooterContainer = styled.footer`
|
||||
background-color: #101522;
|
||||
`
|
||||
`;
|
||||
|
||||
export const FooterWrap = styled.div`
|
||||
padding: 48x 24px;
|
||||
@@ -13,7 +13,7 @@ export const FooterWrap = styled.div`
|
||||
align-items: center;
|
||||
max-width: 1100px;
|
||||
margin: 0 auto;
|
||||
`
|
||||
`;
|
||||
|
||||
export const FooterLinksContainer = styled.div`
|
||||
display: flex;
|
||||
@@ -22,14 +22,15 @@ export const FooterLinksContainer = styled.div`
|
||||
@media screen and (max-width: 820px) {
|
||||
padding-top: 32px;
|
||||
}
|
||||
`
|
||||
`;
|
||||
|
||||
export const FooterLinksWrapper = styled.div`
|
||||
display: flex;
|
||||
|
||||
@media screen and (max-width: 820px) {
|
||||
flex-direction: column;
|
||||
}
|
||||
`
|
||||
`;
|
||||
|
||||
export const FooterLinkItems = styled.div`
|
||||
display: flex;
|
||||
@@ -46,12 +47,12 @@ export const FooterLinkItems = styled.div`
|
||||
padding: 10px;
|
||||
width: 100%;
|
||||
}
|
||||
`
|
||||
`;
|
||||
|
||||
export const FooterLinkTitle = styled.h1`
|
||||
font-size: 14px;
|
||||
margin-bottom: 16px;
|
||||
`
|
||||
`;
|
||||
|
||||
export const FooterLink = styled(Link)`
|
||||
color: #ffffff;
|
||||
@@ -63,12 +64,12 @@ export const FooterLink = styled(Link)`
|
||||
color: #01bf71;
|
||||
transition: 0.3s ease-in-out;
|
||||
}
|
||||
`
|
||||
`;
|
||||
|
||||
export const SocialMedia = styled.section`
|
||||
max-width: 1000px;
|
||||
width: 100%;
|
||||
`
|
||||
`;
|
||||
|
||||
export const SocialMediaWrap = styled.div`
|
||||
display: flex;
|
||||
@@ -80,7 +81,7 @@ export const SocialMediaWrap = styled.div`
|
||||
@media screen and (max-width: 820px) {
|
||||
flex-direction: column;
|
||||
}
|
||||
`
|
||||
`;
|
||||
|
||||
export const SocialAttrWrap = styled.div`
|
||||
color: #fff;
|
||||
@@ -93,7 +94,7 @@ export const SocialAttrWrap = styled.div`
|
||||
@media screen and (max-width: 820px) {
|
||||
flex-direction: column;
|
||||
}
|
||||
`
|
||||
`;
|
||||
|
||||
export const SocialLogo = styled(Link)`
|
||||
color: #fff;
|
||||
@@ -105,15 +106,16 @@ export const SocialLogo = styled(Link)`
|
||||
align-items: center;
|
||||
margin-bottom: 16px;
|
||||
font-weight: bold;
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
font-size: 20px;
|
||||
}
|
||||
`
|
||||
`;
|
||||
|
||||
export const WebsiteRights = styled.small`
|
||||
color: #fff;
|
||||
margin-bottom: 8px;
|
||||
`
|
||||
`;
|
||||
|
||||
export const SocialIcons = styled.div`
|
||||
display: flex;
|
||||
@@ -121,17 +123,18 @@ export const SocialIcons = styled.div`
|
||||
align-items: center;
|
||||
width: 60px;
|
||||
margin-bottom: 8px;
|
||||
`
|
||||
`;
|
||||
|
||||
export const SocialIconLink = styled.a`
|
||||
color: #fff;
|
||||
font-size: 24px;
|
||||
`
|
||||
margin-right: 8px;
|
||||
`;
|
||||
|
||||
export const FooterImgWrap = styled.div`
|
||||
max-width: 555px;
|
||||
height: 100%;
|
||||
`
|
||||
`;
|
||||
|
||||
export const FooterImg = styled.img`
|
||||
width: 100%;
|
||||
@@ -1,42 +0,0 @@
|
||||
import React from 'react'
|
||||
import { FaLinkedin} from 'react-icons/fa'
|
||||
import { FooterContainer, FooterWrap, FooterImg } from './FooterElements'
|
||||
import { SocialMedia, SocialMediaWrap, SocialIcons, SocialIconLink, WebsiteRights, SocialLogo } from './FooterElements'
|
||||
import { animateScroll as scroll } from 'react-scroll'
|
||||
import twitterImg from '../../images/square-x-twitter.svg'
|
||||
|
||||
const Footer = () => {
|
||||
const toggleHome = () => {
|
||||
scroll.scrollToTop();
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<FooterContainer>
|
||||
<FooterWrap>
|
||||
<SocialMedia>
|
||||
<SocialMediaWrap>
|
||||
<SocialLogo to='/udlbook/' onClick={toggleHome}>
|
||||
Understanding Deep Learning
|
||||
</SocialLogo>
|
||||
<WebsiteRights>©{new Date().getFullYear()} Simon J.D. Prince</WebsiteRights>
|
||||
<WebsiteRights>
|
||||
Images by StorySet on FreePik: <a href="https://www.freepik.com/free-vector/hand-coding-concept-illustration_21864184.htm#query=coding&position=17&from_view=search&track=sph&uuid=5896d847-38e4-4cb9-8fe1-103041c7c933"> [1] </a> <a href="https://www.freepik.com/free-vector/mathematics-concept-illustration_10733824.htm#query=professor&position=13&from_view=search&track=sph&uuid=5b1a188a-64c5-45af-aae2-8573bc1bed3c">[2]</a> <a href="https://www.freepik.com/free-vector/content-concept-illustration_7171429.htm#query=media&position=3&from_view=search&track=sph&uuid=c7e35cf2-d85d-4bba-91a6-1cd883dcf153"> [3]</a> <a href="https://www.freepik.com/free-vector/library-concept-illustration_9148008.htm#query=library&position=40&from_view=search&track=sph&uuid=abecc792-b6b2-4ec0-b318-5e6cc73ba649"> [4]</a>
|
||||
</WebsiteRights>
|
||||
<SocialIcons>
|
||||
<SocialIconLink href="https://twitter.com/SimonPrinceAI" target="_blank" aria-label="Twitter">
|
||||
<FooterImg src={twitterImg} alt="twitter"/>
|
||||
</SocialIconLink>
|
||||
<SocialIconLink href="https://www.linkedin.com/in/simon-prince-615bb9165/" target="_blank" aria-label="LinkedIn">
|
||||
<FaLinkedin/>
|
||||
</SocialIconLink>
|
||||
</SocialIcons>
|
||||
</SocialMediaWrap>
|
||||
</SocialMedia>
|
||||
</FooterWrap>
|
||||
</FooterContainer>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
export default Footer
|
||||
84
src/components/Footer/index.jsx
Executable file
84
src/components/Footer/index.jsx
Executable file
@@ -0,0 +1,84 @@
|
||||
import {
|
||||
FooterContainer,
|
||||
FooterWrap,
|
||||
SocialIconLink,
|
||||
SocialIcons,
|
||||
SocialLogo,
|
||||
SocialMedia,
|
||||
SocialMediaWrap,
|
||||
WebsiteRights,
|
||||
} from "@/components/Footer/FooterElements";
|
||||
import { FaGithub, FaLinkedin } from "react-icons/fa";
|
||||
import { FaSquareXTwitter } from "react-icons/fa6";
|
||||
import { animateScroll as scroll } from "react-scroll";
|
||||
|
||||
const images = [
|
||||
"https://freepik.com/free-vector/hand-coding-concept-illustration_21864184.htm#query=coding&position=17&from_view=search&track=sph&uuid=5896d847-38e4-4cb9-8fe1-103041c7c933",
|
||||
"https://freepik.com/free-vector/mathematics-concept-illustration_10733824.htm#query=professor&position=13&from_view=search&track=sph&uuid=5b1a188a-64c5-45af-aae2-8573bc1bed3c",
|
||||
"https://freepik.com/free-vector/content-concept-illustration_7171429.htm#query=media&position=3&from_view=search&track=sph&uuid=c7e35cf2-d85d-4bba-91a6-1cd883dcf153",
|
||||
"https://freepik.com/free-vector/library-concept-illustration_9148008.htm#query=library&position=40&from_view=search&track=sph&uuid=abecc792-b6b2-4ec0-b318-5e6cc73ba649",
|
||||
];
|
||||
|
||||
const socials = [
|
||||
{
|
||||
href: "https://twitter.com/SimonPrinceAI",
|
||||
icon: FaSquareXTwitter,
|
||||
alt: "Twitter",
|
||||
},
|
||||
{
|
||||
href: "https://linkedin.com/in/simon-prince-615bb9165/",
|
||||
icon: FaLinkedin,
|
||||
alt: "LinkedIn",
|
||||
},
|
||||
{
|
||||
href: "https://github.com/udlbook/udlbook",
|
||||
icon: FaGithub,
|
||||
alt: "GitHub",
|
||||
},
|
||||
];
|
||||
|
||||
export default function Footer() {
|
||||
const scrollToHome = () => {
|
||||
scroll.scrollToTop();
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
<FooterContainer>
|
||||
<FooterWrap>
|
||||
<SocialMedia>
|
||||
<SocialMediaWrap>
|
||||
<SocialLogo to="/udlbook" onClick={scrollToHome}>
|
||||
Understanding Deep Learning
|
||||
</SocialLogo>
|
||||
<WebsiteRights>
|
||||
© {new Date().getFullYear()} Simon J.D. Prince
|
||||
</WebsiteRights>
|
||||
<WebsiteRights>
|
||||
Images by StorySet on FreePik:{" "}
|
||||
{images.map((image, index) => (
|
||||
<a key={index} href={image}>
|
||||
[{index + 1}]
|
||||
</a>
|
||||
))}
|
||||
</WebsiteRights>
|
||||
<SocialIcons>
|
||||
{socials.map((social, index) => (
|
||||
<SocialIconLink
|
||||
key={index}
|
||||
href={social.href}
|
||||
target="_blank"
|
||||
aria-label={social.alt}
|
||||
alt={social.alt}
|
||||
>
|
||||
<social.icon />
|
||||
</SocialIconLink>
|
||||
))}
|
||||
</SocialIcons>
|
||||
</SocialMediaWrap>
|
||||
</SocialMedia>
|
||||
</FooterWrap>
|
||||
</FooterContainer>
|
||||
</>
|
||||
);
|
||||
}
|
||||
@@ -8,10 +8,7 @@ export const HeroContainer = styled.div`
|
||||
padding: 0 0px;
|
||||
position: static;
|
||||
z-index: 1;
|
||||
}
|
||||
`
|
||||
|
||||
|
||||
`;
|
||||
|
||||
export const HeroContent = styled.div`
|
||||
z-index: 3;
|
||||
@@ -23,7 +20,8 @@ export const HeroContent = styled.div`
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
`
|
||||
`;
|
||||
|
||||
export const HeroH1 = styled.h1`
|
||||
color: #fff;
|
||||
font-size: 48px;
|
||||
@@ -36,8 +34,7 @@ export const HeroH1 = styled.h1`
|
||||
@media screen and (max-width: 480px) {
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
`
|
||||
`;
|
||||
|
||||
export const HeroP = styled.p`
|
||||
margin-top: 24px;
|
||||
@@ -46,7 +43,6 @@ export const HeroP = styled.p`
|
||||
text-align: center;
|
||||
max-width: 600px;
|
||||
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
font-size: 24px;
|
||||
}
|
||||
@@ -54,48 +50,51 @@ export const HeroP = styled.p`
|
||||
@media screen and (max-width: 480px) {
|
||||
font-size: 18px;
|
||||
}
|
||||
`
|
||||
`;
|
||||
|
||||
export const HeroBtnWrapper = styled.div`
|
||||
margin-top: 32px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
`
|
||||
|
||||
`;
|
||||
|
||||
export const HeroRow = styled.div`
|
||||
display: grid;
|
||||
grid-auto-columns: minmax(auto, 1fr);
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 20px;
|
||||
align-items: top;
|
||||
grid-template-areas: 'col1 col2' };
|
||||
grid-template-areas: "col1 col2";
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
grid-template-areas: 'col2' 'col1';
|
||||
grid-template-columns: 1fr;
|
||||
grid-template-areas:
|
||||
"col2"
|
||||
"col1";
|
||||
}
|
||||
`
|
||||
|
||||
`;
|
||||
|
||||
export const HeroNewsItem = styled.div`
|
||||
margin-left: 4px;
|
||||
color: #000000;
|
||||
font-size: 16px;
|
||||
// line-height: 16px;
|
||||
margin-bottom: 16px;
|
||||
display: flex;
|
||||
justify-content: start;
|
||||
`;
|
||||
|
||||
`
|
||||
export const HeroNewsItemDate = styled.div`
|
||||
width: 20%;
|
||||
margin-right: 20px;
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 480px) {
|
||||
font-size: 12px;
|
||||
}
|
||||
`
|
||||
`;
|
||||
|
||||
export const HeroNewsItemContent = styled.div`
|
||||
width: 80%;
|
||||
@@ -108,23 +107,24 @@ export const HeroNewsItemContent = styled.div`
|
||||
@media screen and (max-width: 480px) {
|
||||
font-size: 12px;
|
||||
}
|
||||
`
|
||||
|
||||
|
||||
`;
|
||||
|
||||
export const HeroColumn1 = styled.div`
|
||||
margin-bottom: 15px;
|
||||
margin-left: 12px;
|
||||
margin-top: 60px;
|
||||
padding: 10px 15px;
|
||||
padding: 0 15px;
|
||||
grid-area: col1;
|
||||
align-items:left;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
`
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
margin-left: 0;
|
||||
margin-top: 20px;
|
||||
padding: 0;
|
||||
}
|
||||
`;
|
||||
|
||||
export const HeroColumn2 = styled.div`
|
||||
margin-bottom: 15px;
|
||||
@@ -133,17 +133,22 @@ export const HeroColumn2 = styled.div`
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
`
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
padding: 0;
|
||||
}
|
||||
`;
|
||||
|
||||
export const TextWrapper = styled.div`
|
||||
max-width: 540px;
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
`
|
||||
`;
|
||||
|
||||
export const HeroImgWrap = styled.div`
|
||||
max-width: 555px;
|
||||
height: 100%;
|
||||
`
|
||||
`;
|
||||
|
||||
export const Img = styled.img`
|
||||
width: 100%;
|
||||
@@ -159,7 +164,7 @@ export const HeroDownloadsImg = styled.img`
|
||||
margin-left: 0;
|
||||
padding-right: 0;
|
||||
margin-bottom: 10px;
|
||||
`
|
||||
`;
|
||||
|
||||
export const HeroLink = styled.a`
|
||||
color: #fff;
|
||||
@@ -176,11 +181,13 @@ export const HeroLink = styled.a`
|
||||
width: 100%;
|
||||
height: 2px;
|
||||
background-color: #fff;
|
||||
content: '';
|
||||
opacity: .3;
|
||||
content: "";
|
||||
opacity: 0.3;
|
||||
-webkit-transform: scaleX(1);
|
||||
transition-property: opacity, -webkit-transform;
|
||||
transition-duration: .3s;
|
||||
transition-property:
|
||||
opacity,
|
||||
-webkit-transform;
|
||||
transition-duration: 0.3s;
|
||||
}
|
||||
|
||||
&:hover:before {
|
||||
@@ -189,34 +196,6 @@ export const HeroLink = styled.a`
|
||||
}
|
||||
`;
|
||||
|
||||
// color: #fff;
|
||||
// text-decoration: none;
|
||||
// padding: 0.1rem 0rem;
|
||||
// height: 100%;
|
||||
// cursor: pointer;
|
||||
// position:relative ;
|
||||
|
||||
// &:before{
|
||||
// position: absolute;
|
||||
// margin: 0 auto;
|
||||
// top: 100%;
|
||||
// left: 0;
|
||||
// width: 100%;
|
||||
// height: 2px;
|
||||
// background-color: #000;
|
||||
// content: '';
|
||||
// opacity: .3;
|
||||
// -webkit-transform: scaleX(1);
|
||||
// transition-property: opacity, -webkit-transform;
|
||||
// transition-duration: .3s;
|
||||
// }
|
||||
|
||||
// &:hover:before {
|
||||
// opacity: 1;
|
||||
// -webkit-transform: scaleX(1.05);
|
||||
// }
|
||||
// `;
|
||||
|
||||
export const UDLLink = styled.a`
|
||||
text-decoration: none;
|
||||
color: #000;
|
||||
@@ -232,21 +211,20 @@ export const UDLLink = styled.a`
|
||||
width: 100%;
|
||||
height: 2px;
|
||||
background-color: #000;
|
||||
content: '';
|
||||
opacity: .3;
|
||||
content: "";
|
||||
opacity: 0.3;
|
||||
-webkit-transform: scaleX(1);
|
||||
transition-property: opacity, -webkit-transform;
|
||||
transition-duration: .3s;
|
||||
transition-property:
|
||||
opacity,
|
||||
-webkit-transform;
|
||||
transition-duration: 0.3s;
|
||||
}
|
||||
|
||||
&:hover:before {
|
||||
opacity: 1;
|
||||
-webkit-transform: scaleX(1.05);
|
||||
}
|
||||
`
|
||||
|
||||
|
||||
|
||||
`;
|
||||
|
||||
export const HeroNewsTitle = styled.div`
|
||||
margin-left: 0px;
|
||||
@@ -263,7 +241,7 @@ export const HeroNewsTitle = styled.div`
|
||||
@media screen and (max-width: 480px) {
|
||||
font-size: 18px;
|
||||
}
|
||||
`
|
||||
`;
|
||||
|
||||
export const HeroCitationTitle = styled.div`
|
||||
margin-left: 0px;
|
||||
@@ -281,24 +259,36 @@ export const HeroCitationTitle = styled.div`
|
||||
@media screen and (max-width: 480px) {
|
||||
font-size: 18px;
|
||||
}
|
||||
`
|
||||
`;
|
||||
|
||||
export const HeroNewsBlock = styled.div``;
|
||||
|
||||
export const HeroNewsBlock = styled.div`
|
||||
|
||||
`
|
||||
export const HeroCitationBlock = styled.div`
|
||||
font-size: 14px;
|
||||
margin-bottom: 0px;
|
||||
margin-top: 0px;
|
||||
|
||||
`
|
||||
|
||||
|
||||
|
||||
`;
|
||||
|
||||
export const HeroFollowBlock = styled.div`
|
||||
@media screen and (max-width: 768px) {
|
||||
font-size: 14px;
|
||||
}
|
||||
`
|
||||
`;
|
||||
|
||||
export const HeroNewsMoreButton = styled.button`
|
||||
background: #fff;
|
||||
color: #000;
|
||||
font-size: 16px;
|
||||
padding: 10px 24px;
|
||||
border: none;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
margin-top: 20px;
|
||||
margin-bottom: 20px;
|
||||
align-self: center;
|
||||
|
||||
&:hover {
|
||||
background: #000;
|
||||
color: #fff;
|
||||
}
|
||||
`;
|
||||
@@ -1,94 +0,0 @@
|
||||
import React from 'react'
|
||||
import { HeroContainer, HeroNewsBlock, HeroCitationBlock, HeroCitationTitle, HeroFollowBlock, HeroDownloadsImg, HeroLink, HeroRow, HeroColumn1, HeroColumn2, HeroContent, Img, HeroImgWrap, HeroNewsTitle, HeroNewsItem, HeroNewsItemDate, HeroNewsItemContent, UDLLink} from './HeroElements'
|
||||
import img from '../../images/F23.prince.learning.turquoise.jpg'
|
||||
|
||||
const HeroSection = () => {
|
||||
|
||||
|
||||
const citation = `
|
||||
@book{prince2023understanding,
|
||||
author = "Simon J.D. Prince",
|
||||
title = "Understanding Deep Learning",
|
||||
publisher = "The MIT Press",
|
||||
year = 2023,
|
||||
url = "http://udlbook.com"}
|
||||
`
|
||||
|
||||
return (
|
||||
<HeroContainer id="home">
|
||||
<HeroContent>
|
||||
<HeroRow>
|
||||
<HeroColumn1>
|
||||
<HeroNewsBlock>
|
||||
<HeroNewsTitle>RECENT NEWS:</HeroNewsTitle>
|
||||
|
||||
<HeroNewsItem>
|
||||
<HeroNewsItemDate>03/12/24</HeroNewsItemDate>
|
||||
<HeroNewsItemContent> Book now available again.</HeroNewsItemContent>
|
||||
</HeroNewsItem>
|
||||
|
||||
<HeroNewsItem>
|
||||
<HeroNewsItemDate>02/21/24</HeroNewsItemDate>
|
||||
<HeroNewsItemContent>New blog about the <UDLLink href="https://www.borealisai.com/research-blogs/the-neural-tangent-kernel/">Neural Tangent Kernel.</UDLLink></HeroNewsItemContent>
|
||||
</HeroNewsItem>
|
||||
<HeroNewsItem>
|
||||
<HeroNewsItemDate>02/15/24</HeroNewsItemDate>
|
||||
<HeroNewsItemContent> First printing of book has sold out in most places. Second printing available mid-March.</HeroNewsItemContent>
|
||||
</HeroNewsItem>
|
||||
|
||||
|
||||
<HeroNewsItem>
|
||||
<HeroNewsItemDate>01/29/24</HeroNewsItemDate>
|
||||
<HeroNewsItemContent> New blog about <UDLLink href="https://www.borealisai.com/research-blogs/gradient-flow/"> gradient flow </UDLLink> published.</HeroNewsItemContent>
|
||||
</HeroNewsItem>
|
||||
|
||||
<HeroNewsItem>
|
||||
<HeroNewsItemDate>12/26/23</HeroNewsItemDate>
|
||||
<HeroNewsItemContent> Machine Learning Street Talk <UDLLink href="https://www.youtube.com/watch?v=sJXn4Cl4oww"> podcast </UDLLink> discussing book.</HeroNewsItemContent>
|
||||
</HeroNewsItem>
|
||||
|
||||
<HeroNewsItem>
|
||||
<HeroNewsItemDate>12/19/23</HeroNewsItemDate>
|
||||
<HeroNewsItemContent>Deeper Insights <UDLLink href="https://podcasts.apple.com/us/podcast/understanding-deep-learning-with-simon-prince/id1669436318?i=1000638269385">podcast</UDLLink> discussing book.</HeroNewsItemContent>
|
||||
</HeroNewsItem>
|
||||
|
||||
<HeroNewsItem>
|
||||
<HeroNewsItemDate>12/06/23</HeroNewsItemDate>
|
||||
<HeroNewsItemContent> I did an <UDLLink href="https://www.borealisai.com/news/understanding-deep-learning/">interview</UDLLink> discussing the book with Borealis AI.</HeroNewsItemContent>
|
||||
</HeroNewsItem>
|
||||
|
||||
<HeroNewsItem>
|
||||
<HeroNewsItemDate>12/05/23</HeroNewsItemDate>
|
||||
<HeroNewsItemContent> Book released by <UDLLink href="https://mitpress.mit.edu/9780262048644/understanding-deep-learning/">The MIT Press</UDLLink>.</HeroNewsItemContent>
|
||||
</HeroNewsItem>
|
||||
</HeroNewsBlock>
|
||||
<HeroCitationTitle>CITATION:</HeroCitationTitle>
|
||||
<HeroCitationBlock>
|
||||
<pre>
|
||||
<code>
|
||||
<React.Fragment>{citation}</React.Fragment>
|
||||
</code>
|
||||
</pre>
|
||||
</HeroCitationBlock>
|
||||
<HeroFollowBlock>
|
||||
Follow me on <UDLLink href="https://twitter.com/SimonPrinceAI">Twitter</UDLLink> or <UDLLink
|
||||
href="https://www.linkedin.com/in/simon-prince-615bb9165/">LinkedIn</UDLLink> for updates.
|
||||
</HeroFollowBlock>
|
||||
</HeroColumn1>
|
||||
<HeroColumn2>
|
||||
<HeroImgWrap>
|
||||
<Img src={img} alt="book cover"/>
|
||||
</HeroImgWrap>
|
||||
<HeroLink href="https://github.com/udlbook/udlbook/releases/download/v2.05/UnderstandingDeepLearning_04_18_24_C.pdf">Download full pdf (18 Apr 2024)</HeroLink>
|
||||
<HeroDownloadsImg src="https://img.shields.io/github/downloads/udlbook/udlbook/total" alt="download stats shield"/>
|
||||
<HeroLink href="https://mitpress.mit.edu/9780262048644/understanding-deep-learning/">Buy the book</HeroLink>
|
||||
<HeroLink href="https://github.com/udlbook/udlbook/raw/main/UDL_Answer_Booklet_Students.pdf">Answers to selected questions</HeroLink>
|
||||
<HeroLink href="https://github.com/udlbook/udlbook/raw/main/UDL_Errata.pdf">Errata</HeroLink>
|
||||
</HeroColumn2>
|
||||
</HeroRow>
|
||||
</HeroContent>
|
||||
</HeroContainer>
|
||||
)
|
||||
}
|
||||
|
||||
export default HeroSection
|
||||
327
src/components/HeroSection/index.jsx
Executable file
327
src/components/HeroSection/index.jsx
Executable file
@@ -0,0 +1,327 @@
|
||||
import {
|
||||
HeroCitationBlock,
|
||||
HeroCitationTitle,
|
||||
HeroColumn1,
|
||||
HeroColumn2,
|
||||
HeroContainer,
|
||||
HeroContent,
|
||||
HeroDownloadsImg,
|
||||
HeroFollowBlock,
|
||||
HeroImgWrap,
|
||||
HeroLink,
|
||||
HeroNewsBlock,
|
||||
HeroNewsItem,
|
||||
HeroNewsItemContent,
|
||||
HeroNewsItemDate,
|
||||
HeroNewsMoreButton,
|
||||
HeroNewsTitle,
|
||||
HeroRow,
|
||||
Img,
|
||||
UDLLink,
|
||||
} from "@/components/HeroSection/HeroElements";
|
||||
import img from "@/images/book_cover.jpg";
|
||||
import { useState } from "react";
|
||||
|
||||
const citation = `
|
||||
@book{prince2023understanding,
|
||||
author = "Simon J.D. Prince",
|
||||
title = "Understanding Deep Learning",
|
||||
publisher = "The MIT Press",
|
||||
year = 2023,
|
||||
url = "http://udlbook.com"
|
||||
}
|
||||
`;
|
||||
|
||||
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: (
|
||||
<HeroNewsItemContent>
|
||||
New{" "}
|
||||
<UDLLink href="https://borealisai.com/research-blogs/neural-tangent-kernel-applications/">
|
||||
blog
|
||||
</UDLLink>{" "}
|
||||
about the applications of the neural tangent kernel.
|
||||
</HeroNewsItemContent>
|
||||
),
|
||||
},
|
||||
{
|
||||
date: "05/10/24",
|
||||
content: (
|
||||
<HeroNewsItemContent>
|
||||
Positive{" "}
|
||||
<UDLLink href="https://github.com/udlbook/udlbook/blob/main/public/NMI_Review.pdf">
|
||||
review
|
||||
</UDLLink>{" "}
|
||||
in Nature Machine Intelligence.
|
||||
</HeroNewsItemContent>
|
||||
),
|
||||
},
|
||||
// {
|
||||
// date: "03/12/24",
|
||||
// content: <HeroNewsItemContent>Book now available again.</HeroNewsItemContent>,
|
||||
// },
|
||||
{
|
||||
date: "02/21/24",
|
||||
content: (
|
||||
<HeroNewsItemContent>
|
||||
New blog about the{" "}
|
||||
<UDLLink href="https://borealisai.com/research-blogs/the-neural-tangent-kernel/">
|
||||
Neural Tangent Kernel
|
||||
</UDLLink>
|
||||
.
|
||||
</HeroNewsItemContent>
|
||||
),
|
||||
},
|
||||
// {
|
||||
// date: "02/15/24",
|
||||
// content: (
|
||||
// <HeroNewsItemContent>
|
||||
// First printing of book has sold out in most places. Second printing available
|
||||
// mid-March.
|
||||
// </HeroNewsItemContent>
|
||||
// ),
|
||||
// },
|
||||
{
|
||||
date: "01/29/24",
|
||||
content: (
|
||||
<HeroNewsItemContent>
|
||||
New blog about{" "}
|
||||
<UDLLink href="https://borealisai.com/research-blogs/gradient-flow/">
|
||||
gradient flow
|
||||
</UDLLink>{" "}
|
||||
published.
|
||||
</HeroNewsItemContent>
|
||||
),
|
||||
},
|
||||
{
|
||||
date: "12/26/23",
|
||||
content: (
|
||||
<HeroNewsItemContent>
|
||||
Machine Learning Street Talk{" "}
|
||||
<UDLLink href="https://youtube.com/watch?v=sJXn4Cl4oww">podcast</UDLLink> discussing
|
||||
book.
|
||||
</HeroNewsItemContent>
|
||||
),
|
||||
},
|
||||
{
|
||||
date: "12/19/23",
|
||||
content: (
|
||||
<HeroNewsItemContent>
|
||||
Deeper Insights{" "}
|
||||
<UDLLink href="https://podcasts.apple.com/us/podcast/understanding-deep-learning-with-simon-prince/id1669436318?i=1000638269385">
|
||||
podcast
|
||||
</UDLLink>{" "}
|
||||
discussing book.
|
||||
</HeroNewsItemContent>
|
||||
),
|
||||
},
|
||||
{
|
||||
date: "12/06/23",
|
||||
content: (
|
||||
<HeroNewsItemContent>
|
||||
<UDLLink href="https://borealisai.com/news/understanding-deep-learning/">
|
||||
Interview
|
||||
</UDLLink>{" "}
|
||||
with Borealis AI.
|
||||
</HeroNewsItemContent>
|
||||
),
|
||||
},
|
||||
{
|
||||
date: "12/05/23",
|
||||
content: (
|
||||
<HeroNewsItemContent>
|
||||
Book released by{" "}
|
||||
<UDLLink href="https://mitpress.mit.edu/9780262048644/understanding-deep-learning/">
|
||||
The MIT Press
|
||||
</UDLLink>
|
||||
.
|
||||
</HeroNewsItemContent>
|
||||
),
|
||||
},
|
||||
];
|
||||
|
||||
export default function HeroSection() {
|
||||
const [showMoreNews, setShowMoreNews] = useState(false);
|
||||
|
||||
const toggleShowMore = () => {
|
||||
setShowMoreNews((p) => !p);
|
||||
};
|
||||
|
||||
return (
|
||||
<HeroContainer id="home">
|
||||
<HeroContent>
|
||||
<HeroRow>
|
||||
<HeroColumn1>
|
||||
<HeroNewsBlock>
|
||||
<HeroNewsTitle>RECENT NEWS:</HeroNewsTitle>
|
||||
{(showMoreNews ? news : news.slice(0, 7)).map((item, index) => (
|
||||
<HeroNewsItem key={index}>
|
||||
<HeroNewsItemDate>{item.date}</HeroNewsItemDate>
|
||||
{item.content}
|
||||
</HeroNewsItem>
|
||||
))}
|
||||
<HeroNewsMoreButton onClick={toggleShowMore}>
|
||||
{showMoreNews ? "Show less" : "Show more"}
|
||||
</HeroNewsMoreButton>
|
||||
</HeroNewsBlock>
|
||||
<HeroCitationTitle>CITATION:</HeroCitationTitle>
|
||||
<HeroCitationBlock>
|
||||
<pre>
|
||||
<code>{citation}</code>
|
||||
</pre>
|
||||
</HeroCitationBlock>
|
||||
<HeroFollowBlock>
|
||||
Follow me on{" "}
|
||||
<UDLLink href="https://twitter.com/SimonPrinceAI">Twitter</UDLLink> or{" "}
|
||||
<UDLLink href="https://linkedin.com/in/simon-prince-615bb9165/">
|
||||
LinkedIn
|
||||
</UDLLink>{" "}
|
||||
for updates.
|
||||
</HeroFollowBlock>
|
||||
</HeroColumn1>
|
||||
<HeroColumn2>
|
||||
<HeroImgWrap>
|
||||
<Img src={img} alt="Book Cover" />
|
||||
</HeroImgWrap>
|
||||
<HeroLink href="https://github.com/udlbook/udlbook/releases/download/v5.0.2/UnderstandingDeepLearning_05_29_25_C.pdf">
|
||||
Download full PDF (29 May 2025)
|
||||
</HeroLink>
|
||||
<br />
|
||||
<HeroDownloadsImg
|
||||
src="https://img.shields.io/github/downloads/udlbook/udlbook/total"
|
||||
alt="download stats shield"
|
||||
/>
|
||||
<HeroLink href="https://mitpress.mit.edu/9780262048644/understanding-deep-learning/">
|
||||
Buy the book
|
||||
</HeroLink>
|
||||
<HeroLink href="https://github.com/udlbook/udlbook/raw/main/UDL_Answer_Booklet_Students.pdf">
|
||||
Answers to selected questions
|
||||
</HeroLink>
|
||||
<HeroLink href="https://github.com/udlbook/udlbook/raw/main/UDL_Errata.pdf">
|
||||
Errata
|
||||
</HeroLink>
|
||||
</HeroColumn2> <h1></h1>
|
||||
</HeroRow>
|
||||
</HeroContent>
|
||||
</HeroContainer>
|
||||
);
|
||||
}
|
||||
@@ -1,15 +1,14 @@
|
||||
import styled from "styled-components";
|
||||
|
||||
|
||||
export const InstructorsContainer = styled.div`
|
||||
color: #fff;
|
||||
/* background: #f9f9f9; */
|
||||
background: ${({lightBg}) => (lightBg ? '#57c6d1': '#010606')};
|
||||
background: ${({ lightBg }) => (lightBg ? "#57c6d1" : "#010606")};
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
padding: 100px 0;
|
||||
}
|
||||
`
|
||||
`;
|
||||
|
||||
export const InstructorsWrapper = styled.div`
|
||||
display: grid;
|
||||
@@ -20,7 +19,7 @@ export const InstructorsWrapper = styled.div`
|
||||
margin-left: auto;
|
||||
padding: 0 24px;
|
||||
justify-content: center;
|
||||
`
|
||||
`;
|
||||
|
||||
export const InstructorsRow = styled.div`
|
||||
display: grid;
|
||||
@@ -29,9 +28,10 @@ export const InstructorsRow = styled.div`
|
||||
grid-template-areas: ${({ imgStart }) => (imgStart ? `'col2 col1'` : `'col1 col2'`)};
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
grid-template-areas: ${({imgStart}) => (imgStart ? `'col1' 'col2'` : `'col1 col1' 'col2 col2'`)};
|
||||
grid-template-areas: ${({ imgStart }) =>
|
||||
imgStart ? `'col1' 'col2'` : `'col1 col1' 'col2 col2'`};
|
||||
}
|
||||
`
|
||||
`;
|
||||
|
||||
export const InstructorsRow2 = styled.div`
|
||||
display: grid;
|
||||
@@ -40,28 +40,28 @@ export const InstructorsRow2 = styled.div`
|
||||
grid-template-areas: ${({ imgStart }) => (imgStart ? `'col2 col1'` : `'col1 col2'`)};
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
grid-template-areas: ${({imgStart}) => (imgStart ? `'col1' 'col2'` : `'col1 col1' 'col2 col2'`)};
|
||||
grid-template-areas: ${({ imgStart }) =>
|
||||
imgStart ? `'col1' 'col2'` : `'col1 col1' 'col2 col2'`};
|
||||
}
|
||||
`
|
||||
|
||||
`;
|
||||
|
||||
export const Column1 = styled.div`
|
||||
margin-bottom: 15px;
|
||||
padding: 0 15px;
|
||||
grid-area: col1;
|
||||
`
|
||||
`;
|
||||
|
||||
export const Column2 = styled.div`
|
||||
margin-bottom: 15px;
|
||||
padding: 0 15px;
|
||||
grid-area: col2;
|
||||
`
|
||||
`;
|
||||
|
||||
export const TextWrapper = styled.div`
|
||||
max-width: 540px;
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
`
|
||||
`;
|
||||
|
||||
export const TopLine = styled.p`
|
||||
color: #773c23;
|
||||
@@ -71,41 +71,37 @@ export const TopLine = styled.p`
|
||||
letter-spacing: 1.4px;
|
||||
text-transform: uppercase;
|
||||
margin-bottom: 16px;
|
||||
`
|
||||
`;
|
||||
|
||||
export const Heading = styled.h1`
|
||||
|
||||
margin-bottom: 24px;
|
||||
font-size: 48px;
|
||||
line-height: 1.1;
|
||||
font-weight: 600;
|
||||
color: ${({lightText}) => (lightText ? '#f7f8fa' : '#010606')};
|
||||
color: ${({ lightText }) => (lightText ? "#f7f8fa" : "#010606")};
|
||||
|
||||
@media screen and (max-width: 480px)
|
||||
{
|
||||
@media screen and (max-width: 480px) {
|
||||
font-size: 32px;
|
||||
}
|
||||
`
|
||||
|
||||
`;
|
||||
|
||||
export const Subtitle = styled.p`
|
||||
max-width: 440px;
|
||||
margin-bottom: 35px;
|
||||
font-size: 18px;
|
||||
line-height: 24px;
|
||||
color: ${({darkText})=> (darkText ? '#010606' : '#fff')};
|
||||
|
||||
`
|
||||
color: ${({ darkText }) => (darkText ? "#010606" : "#fff")};
|
||||
`;
|
||||
|
||||
export const BtnWrap = styled.div`
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
`
|
||||
`;
|
||||
|
||||
export const ImgWrap = styled.div`
|
||||
max-width: 555px;
|
||||
height: 100%;
|
||||
`
|
||||
`;
|
||||
|
||||
export const Img = styled.img`
|
||||
width: 100%;
|
||||
@@ -115,7 +111,6 @@ export const Img = styled.img`
|
||||
padding-right: 0;
|
||||
`;
|
||||
|
||||
|
||||
export const InstructorsContent = styled.div`
|
||||
z-index: 3;
|
||||
width: 100%;
|
||||
@@ -127,6 +122,7 @@ export const InstructorsContent = styled.div`
|
||||
flex-direction: column;
|
||||
align-items: left;
|
||||
list-style-position: inside;
|
||||
|
||||
@media screen and (max-width: 1050px) {
|
||||
font-size: 12px;
|
||||
}
|
||||
@@ -134,7 +130,7 @@ export const InstructorsContent = styled.div`
|
||||
@media screen and (max-width: 768px) {
|
||||
font-size: 10px;
|
||||
}
|
||||
`
|
||||
`;
|
||||
|
||||
export const InstructorsLink = styled.a`
|
||||
text-decoration: none;
|
||||
@@ -151,15 +147,17 @@ export const InstructorsLink = styled.a`
|
||||
width: 100%;
|
||||
height: 2px;
|
||||
background-color: #555;
|
||||
content: '';
|
||||
opacity: .3;
|
||||
content: "";
|
||||
opacity: 0.3;
|
||||
-webkit-transform: scaleX(1);
|
||||
transition-property: opacity, -webkit-transform;
|
||||
transition-duration: .3s;
|
||||
transition-property:
|
||||
opacity,
|
||||
-webkit-transform;
|
||||
transition-duration: 0.3s;
|
||||
}
|
||||
|
||||
&:hover:before {
|
||||
opacity: 1;
|
||||
-webkit-transform: scaleX(1.05);
|
||||
}
|
||||
`
|
||||
`;
|
||||
@@ -1,178 +0,0 @@
|
||||
import React from 'react'
|
||||
import { ImgWrap, Img, InstructorsLink, InstructorsContainer, InstructorsContent, InstructorsRow2, InstructorsWrapper, InstructorsRow, Column1, Column2, TextWrapper, TopLine, Heading, Subtitle} from './InstructorsElements'
|
||||
|
||||
// export const homeObjOne = {
|
||||
// id: 'about',
|
||||
// lightBg: false,
|
||||
// lightText: true,
|
||||
// lightTextDesc: true,
|
||||
// topLine: 'Premium Bank',
|
||||
// headline: 'Unlimited transactions with zero fees',
|
||||
// description:
|
||||
// 'Get access to our exclusive app that allows you to send unlimited transactions without getting charged any fees',
|
||||
// buttonLabel: 'Get Started',
|
||||
// imgStart: false,
|
||||
// img: require('../../images/svg-1.svg').default,
|
||||
// alt: 'Car',
|
||||
// dark: true,
|
||||
// primary: true,
|
||||
// darkText: false
|
||||
// };
|
||||
|
||||
import img from '../../images/instructor.svg'
|
||||
|
||||
|
||||
|
||||
const InstructorsSection = () => {
|
||||
return (
|
||||
<>
|
||||
<InstructorsContainer lightBg={true} id='Instructors'>
|
||||
<InstructorsWrapper>
|
||||
<InstructorsRow imgStart={false}>
|
||||
<Column1>
|
||||
<TextWrapper>
|
||||
<TopLine>Instructors</TopLine>
|
||||
<Heading lightText={false}>Resources for instructors</Heading>
|
||||
<Subtitle darkText={true}>All the figures in vector and image formats, full slides for first twelve chapters, instructor answer booklet</Subtitle>
|
||||
</TextWrapper>
|
||||
</Column1>
|
||||
<Column2>
|
||||
<ImgWrap>
|
||||
<Img src={img} alt='Car'/>
|
||||
</ImgWrap>
|
||||
</Column2>
|
||||
</InstructorsRow>
|
||||
<InstructorsRow2>
|
||||
<Column1>
|
||||
<TopLine>Register</TopLine>
|
||||
<InstructorsLink href="https://mitpress.ublish.com/request?cri=15055">Register</InstructorsLink> with MIT Press for answer booklet.
|
||||
<InstructorsContent>
|
||||
|
||||
</InstructorsContent>
|
||||
|
||||
<TopLine>Full slides</TopLine>
|
||||
<InstructorsContent>
|
||||
Slides for 20 lecture undergraduate deep learning course:
|
||||
</InstructorsContent>
|
||||
<InstructorsContent>
|
||||
<ol>
|
||||
<li>Introduction <InstructorsLink href="https://drive.google.com/uc?export=download&id=17RHb11BrydOvxSFNbRIomE1QKLVI087m">PPTX</InstructorsLink></li>
|
||||
<li>Supervised Learning <InstructorsLink href="https://drive.google.com/uc?export=download&id=1491zkHULC7gDfqlV6cqUxyVYXZ-de-Ub">PPTX</InstructorsLink></li>
|
||||
<li>Shallow Neural Networks <InstructorsLink href="https://drive.google.com/uc?export=download&id=1XkP1c9EhOBowla1rT1nnsDGMf2rZvrt7">PPTX</InstructorsLink></li>
|
||||
<li>Deep Neural Networks <InstructorsLink href="https://drive.google.com/uc?export=download&id=1e2ejfZbbfMKLBv0v-tvBWBdI8gO3SSS1">PPTX</InstructorsLink></li>
|
||||
<li>Loss Functions <InstructorsLink href="https://drive.google.com/uc?export=download&id=1fxQ_a1Q3eFPZ4kPqKbak6_emJK-JfnRH">PPTX</InstructorsLink></li>
|
||||
<li>Fitting Models <InstructorsLink href="https://drive.google.com/uc?export=download&id=17QQ5ZzXBtR_uCNCUU1gPRWWRUeZN9exW">PPTX</InstructorsLink></li>
|
||||
<li>Computing Gradients <InstructorsLink href="https://drive.google.com/uc?export=download&id=1hC8JUCOaFWiw3KGn0rm7nW6mEq242QDK">PPTX</InstructorsLink></li>
|
||||
<li>Initialization <InstructorsLink href="https://drive.google.com/uc?export=download&id=1tSjCeAVg0JCeBcPgDJDbi7Gg43Qkh9_d">PPTX</InstructorsLink></li>
|
||||
<li>Performance <InstructorsLink href="https://drive.google.com/uc?export=download&id=1RVZW3KjEs0vNSGx3B2fdizddlr6I0wLl">PPTX</InstructorsLink></li>
|
||||
<li>Regularization <InstructorsLink href="https://drive.google.com/uc?export=download&id=1LTicIKPRPbZRkkg6qOr1DSuOB72axood">PPTX</InstructorsLink></li>
|
||||
<li>Convolutional Networks <InstructorsLink href="https://drive.google.com/uc?export=download&id=1bGVuwAwrofzZdfvj267elIzkYMIvYFj0">PPTX</InstructorsLink></li>
|
||||
<li>Image Generation <InstructorsLink href="https://drive.google.com/uc?export=download&id=14w31QqWRDix1GdUE-na0_E0kGKBhtKzs">PPTX</InstructorsLink></li>
|
||||
<li>Transformers and LLMs <InstructorsLink href="https://drive.google.com/uc?export=download&id=1af6bTTjAbhDYfrDhboW7Fuv52Gk9ygKr">PPTX</InstructorsLink></li>
|
||||
</ol>
|
||||
</InstructorsContent>
|
||||
</Column1>
|
||||
<Column2>
|
||||
<TopLine>Figures</TopLine>
|
||||
<InstructorsContent>
|
||||
<ol>
|
||||
<li> Introduction: <InstructorsLink href="https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap1PDF.zip">PDF</InstructorsLink> / <InstructorsLink href="https://drive.google.com/uc?export=download&id=1udnl5pUOAc8DcAQ7HQwyzP9pwL95ynnv"> SVG</InstructorsLink> / <InstructorsLink href="https://docs.google.com/presentation/d/1IjTqIUvWCJc71b5vEJYte-Dwujcp7rvG/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true">PPTX </InstructorsLink></li>
|
||||
|
||||
<li> Supervised learning: <InstructorsLink
|
||||
href="https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap2PDF.zip">PDF</InstructorsLink> / <InstructorsLink
|
||||
href="https://drive.google.com/uc?export=download&id=1VSxcU5y1qNFlmd3Lb3uOWyzILuOj1Dla"> SVG</InstructorsLink> / <InstructorsLink href="https://docs.google.com/presentation/d/1Br7R01ROtRWPlNhC_KOommeHAWMBpWtz/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true">PPTX</InstructorsLink></li>
|
||||
<li> Shallow neural networks: <InstructorsLink
|
||||
href="https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap3PDF.zip">PDF</InstructorsLink> / <InstructorsLink
|
||||
href="https://drive.google.com/uc?export=download&id=19kZFWlXhzN82Zx02ByMmSZOO4T41fmqI"> SVG</InstructorsLink> / <InstructorsLink href="https://docs.google.com/presentation/d/1e9M3jB5I9qZ4dCBY90Q3Hwft_i068QVQ/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true">PPTX</InstructorsLink></li>
|
||||
<li> Deep neural networks: <InstructorsLink
|
||||
href="https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap4PDF.zip">PDF</InstructorsLink> / <InstructorsLink
|
||||
href="https://drive.google.com/uc?export=download&id=1ojr0ebsOhzvS04ItAflX2cVmYqHQHZUa"> SVG</InstructorsLink>
|
||||
/
|
||||
<InstructorsLink href="https://docs.google.com/presentation/d/1LTSsmY4mMrJbqXVvoTOCkQwHrRKoYnJj/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true">PPTX</InstructorsLink></li>
|
||||
<li> Loss functions: <InstructorsLink
|
||||
href="https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap5PDF.zip">PDF
|
||||
</InstructorsLink> / <InstructorsLink href="https://drive.google.com/uc?export=download&id=17MJO7fiMpFZVqKeqXTbQ36AMpmR4GizZ">
|
||||
SVG
|
||||
</InstructorsLink> / <InstructorsLink
|
||||
href="https://docs.google.com/presentation/d/1gcpC_3z9oRp87eMkoco-kdLD-MM54Puk/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true">PPTX</InstructorsLink></li>
|
||||
<li> Training models: <InstructorsLink
|
||||
href="https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap6PDF.zip">PDF
|
||||
</InstructorsLink> / <InstructorsLink href="https://drive.google.com/uc?export=download&id=1VPdhFRnCr9_idTrX0UdHKGAw2shUuwhK">
|
||||
SVG
|
||||
</InstructorsLink> / <InstructorsLink
|
||||
href="https://docs.google.com/presentation/d/1AKoeggAFBl9yLC7X5tushAGzCCxmB7EY/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true">PPTX</InstructorsLink></li>
|
||||
<li> Gradients and initialization: <InstructorsLink
|
||||
href="https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap7PDF.zip">PDF</InstructorsLink> / <InstructorsLink
|
||||
href="https://drive.google.com/uc?export=download&id=1TTl4gvrTvNbegnml4CoGoKOOd6O8-PGs"> SVG</InstructorsLink> / <InstructorsLink href="https://docs.google.com/presentation/d/11zhB6PI-Dp6Ogmr4IcI6fbvbqNqLyYcz/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true">PPTX</InstructorsLink></li>
|
||||
<li> Measuring performance: <InstructorsLink
|
||||
href="https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap8PDF.zip">PDF</InstructorsLink> / <InstructorsLink
|
||||
href="https://drive.google.com/uc?export=download&id=19eQOnygd_l0DzgtJxXuYnWa4z7QKJrJx"> SVG</InstructorsLink> / <InstructorsLink href="https://docs.google.com/presentation/d/1SHRmJscDLUuQrG7tmysnScb3ZUAqVMZo/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true">PPTX</InstructorsLink></li>
|
||||
<li> Regularization: <InstructorsLink
|
||||
href="https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap9PDF.zip">PDF
|
||||
</InstructorsLink> / <InstructorsLink href="https://drive.google.com/uc?export=download&id=1LprgnUGL7xAM9-jlGZC9LhMPeefjY0r0">
|
||||
SVG
|
||||
</InstructorsLink> / <InstructorsLink
|
||||
href="https://docs.google.com/presentation/d/1VwIfvjpdfTny6sEfu4ZETwCnw6m8Eg-5/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true">PPTX</InstructorsLink></li>
|
||||
<li> Convolutional networks: <InstructorsLink
|
||||
href="https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap10PDF.zip">PDF</InstructorsLink> / <InstructorsLink
|
||||
href="https://drive.google.com/uc?export=download&id=1-Wb3VzaSvVeRzoUzJbI2JjZE0uwqupM9"> SVG</InstructorsLink> / <InstructorsLink href="https://docs.google.com/presentation/d/1MtfKBC4Y9hWwGqeP6DVwUNbi1j5ncQCg/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true">PPTX</InstructorsLink></li>
|
||||
<li> Residual networks: <InstructorsLink
|
||||
href="https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap11PDF.zip">PDF</InstructorsLink> / <InstructorsLink
|
||||
href="https://drive.google.com/uc?export=download&id=1Mr58jzEVseUAfNYbGWCQyDtEDwvfHRi1"> SVG</InstructorsLink> / <InstructorsLink href="https://docs.google.com/presentation/d/1saY8Faz0KTKAAifUrbkQdLA2qkyEjOPI/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true">PPTX</InstructorsLink></li>
|
||||
<li> Transformers: <InstructorsLink
|
||||
href="https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap12PDF.zip">PDF</InstructorsLink> / <InstructorsLink href="https://drive.google.com/uc?export=download&id=1txzOVNf8-jH4UfJ6SLnrtOfPd1Q3ebzd">
|
||||
SVG</InstructorsLink> / <InstructorsLink
|
||||
href="https://docs.google.com/presentation/d/1GVNvYWa0WJA6oKg89qZre-UZEhABfm0l/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true">PPTX</InstructorsLink></li>
|
||||
<li> Graph neural networks: <InstructorsLink
|
||||
href="https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap13PDF.zip">PDF</InstructorsLink> / <InstructorsLink
|
||||
href="https://drive.google.com/uc?export=download&id=1lQIV6nRp6LVfaMgpGFhuwEXG-lTEaAwe"> SVG</InstructorsLink> / <InstructorsLink href="https://docs.google.com/presentation/d/1YwF3U82c1mQ74c1WqHVTzLZ0j7GgKaWP/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true">PPTX</InstructorsLink></li>
|
||||
<li> Unsupervised learning: <InstructorsLink
|
||||
href="https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap14PDF.zip">PDF</InstructorsLink> / <InstructorsLink
|
||||
href="https://drive.google.com/uc?export=download&id=1aMbI6iCuUvOywqk5pBOmppJu1L1anqsM"> SVG</InstructorsLink> / <InstructorsLink href="https://docs.google.com/presentation/d/1A-lBGv3NHl4L32NvfFgy1EKeSwY-0UeB/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true">
|
||||
PPTX</InstructorsLink></li>
|
||||
<li> GANs: <InstructorsLink
|
||||
href="https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap15PDF.zip">PDF</InstructorsLink> / <InstructorsLink
|
||||
href="https://drive.google.com/uc?export=download&id=1EErnlZCOlXc3HK7m83T2Jh_0NzIUHvtL"> SVG</InstructorsLink> / <InstructorsLink href="https://docs.google.com/presentation/d/10Ernk41ShOTf4IYkMD-l4dJfKATkXH4w/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true">PPTX</InstructorsLink></li>
|
||||
<li> Normalizing flows: <InstructorsLink
|
||||
href="https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap16PDF.zip">PDF</InstructorsLink> / <InstructorsLink
|
||||
href="https://drive.google.com/uc?export=download&id=1SNtNIY7khlHQYMtaOH-FosSH3kWwL4b7"> SVG</InstructorsLink> / <InstructorsLink href="https://docs.google.com/presentation/d/1nLLzqb9pdfF_h6i1HUDSyp7kSMIkSUUA/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true">PPTX</InstructorsLink></li>
|
||||
<li> Variational autoencoders: <InstructorsLink
|
||||
href="https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap17PDF.zip">PDF</InstructorsLink> / <InstructorsLink
|
||||
href="https://drive.google.com/uc?export=download&id=1B9bxtmdugwtg-b7Y4AdQKAIEVWxjx8l3"> SVG</InstructorsLink> / <InstructorsLink href="https://docs.google.com/presentation/d/1lQE4Bu7-LgvV2VlJOt_4dQT-kusYl7Vo/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true">PPTX</InstructorsLink></li>
|
||||
<li> Diffusion models: <InstructorsLink
|
||||
href="https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap18PDF.zip">PDF</InstructorsLink> / <InstructorsLink
|
||||
href="https://drive.google.com/uc?export=download&id=1A-pIGl4PxjVMYOKAUG3aT4a8wD3G-q_r"> SVG</InstructorsLink> /
|
||||
<InstructorsLink href="https://docs.google.com/presentation/d/1x_ufIBtVPzWUvRieKMkpw5SdRjXWwdfR/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true">
|
||||
PPTX</InstructorsLink></li>
|
||||
<li> Deep reinforcement learning: <InstructorsLink
|
||||
href="https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap19PDF.zip">PDF</InstructorsLink> / <InstructorsLink
|
||||
href="https://drive.google.com/uc?export=download&id=1a5WUoF7jeSgwC_PVdckJi1Gny46fCqh0"> SVG</InstructorsLink> / <InstructorsLink href="https://docs.google.com/presentation/d/1TnYmVbFNhmMFetbjyfXGmkxp1EHauMqr/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true">
|
||||
PPTX </InstructorsLink></li>
|
||||
<li> Why does deep learning work?: <InstructorsLink
|
||||
href="https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap20PDF.zip">PDF</InstructorsLink> / <InstructorsLink
|
||||
href="https://drive.google.com/uc?export=download&id=1M2d0DHEgddAQoIedKSDTTt7m1ZdmBLQ3"> SVG</InstructorsLink> / <InstructorsLink href="https://docs.google.com/presentation/d/1coxF4IsrCzDTLrNjRagHvqB_FBy10miA/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true">
|
||||
PPTX</InstructorsLink></li>
|
||||
<li> Deep learning and ethics: <InstructorsLink
|
||||
href="https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap21PDF.zip">PDF</InstructorsLink> / <InstructorsLink
|
||||
href="https://drive.google.com/uc?export=download&id=1jixmFfwmZkW_UVYzcxmDcMsdFFtnZ0bU">SVG</InstructorsLink> / <InstructorsLink
|
||||
href="https://docs.google.com/presentation/d/1EtfzanZYILvi9_-Idm28zD94I_6OrN9R/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true">PPTX</InstructorsLink></li>
|
||||
<li> Appendices - <InstructorsLink href="https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLAppendixPDF.zip">PDF</InstructorsLink> / <InstructorsLink href="https://drive.google.com/uc?export=download&id=1k2j7hMN40ISPSg9skFYWFL3oZT7r8v-l">
|
||||
SVG</InstructorsLink> / <InstructorsLink
|
||||
href="https://docs.google.com/presentation/d/1_2cJHRnsoQQHst0rwZssv-XH4o5SEHks/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true">PPTX</InstructorsLink></li>
|
||||
</ol>
|
||||
</InstructorsContent>
|
||||
<InstructorsLink href="https://drive.google.com/file/d/1T_MXXVR4AfyMnlEFI-UVDh--FXI5deAp/view?usp=sharing">Instructions</InstructorsLink> for editing equations in figures.
|
||||
|
||||
<InstructorsContent>
|
||||
|
||||
</InstructorsContent>
|
||||
</Column2>
|
||||
</InstructorsRow2>
|
||||
|
||||
</InstructorsWrapper>
|
||||
</InstructorsContainer>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
export default InstructorsSection
|
||||
350
src/components/Instructors/index.jsx
Normal file
350
src/components/Instructors/index.jsx
Normal file
@@ -0,0 +1,350 @@
|
||||
import {
|
||||
Column1,
|
||||
Column2,
|
||||
Heading,
|
||||
Img,
|
||||
ImgWrap,
|
||||
InstructorsContainer,
|
||||
InstructorsContent,
|
||||
InstructorsLink,
|
||||
InstructorsRow,
|
||||
InstructorsRow2,
|
||||
InstructorsWrapper,
|
||||
Subtitle,
|
||||
TextWrapper,
|
||||
TopLine,
|
||||
} from "@/components/Instructors/InstructorsElements";
|
||||
import img from "@/images/instructor.svg";
|
||||
|
||||
const fullSlides = [
|
||||
{
|
||||
text: "Introduction",
|
||||
link: "https://drive.google.com/uc?export=download&id=17RHb11BrydOvxSFNbRIomE1QKLVI087m",
|
||||
},
|
||||
{
|
||||
text: "Supervised Learning",
|
||||
link: "https://drive.google.com/uc?export=download&id=1491zkHULC7gDfqlV6cqUxyVYXZ-de-Ub",
|
||||
},
|
||||
{
|
||||
text: "Shallow Neural Networks",
|
||||
link: "https://drive.google.com/uc?export=download&id=1XkP1c9EhOBowla1rT1nnsDGMf2rZvrt7",
|
||||
},
|
||||
{
|
||||
text: "Deep Neural Networks",
|
||||
link: "https://drive.google.com/uc?export=download&id=1e2ejfZbbfMKLBv0v-tvBWBdI8gO3SSS1",
|
||||
},
|
||||
{
|
||||
text: "Loss Functions",
|
||||
link: "https://drive.google.com/uc?export=download&id=1fxQ_a1Q3eFPZ4kPqKbak6_emJK-JfnRH",
|
||||
},
|
||||
{
|
||||
text: "Fitting Models",
|
||||
link: "https://drive.google.com/uc?export=download&id=17QQ5ZzXBtR_uCNCUU1gPRWWRUeZN9exW",
|
||||
},
|
||||
{
|
||||
text: "Computing Gradients",
|
||||
link: "https://drive.google.com/uc?export=download&id=1hC8JUCOaFWiw3KGn0rm7nW6mEq242QDK",
|
||||
},
|
||||
{
|
||||
text: "Initialization",
|
||||
link: "https://drive.google.com/uc?export=download&id=1tSjCeAVg0JCeBcPgDJDbi7Gg43Qkh9_d",
|
||||
},
|
||||
{
|
||||
text: "Performance",
|
||||
link: "https://drive.google.com/uc?export=download&id=1RVZW3KjEs0vNSGx3B2fdizddlr6I0wLl",
|
||||
},
|
||||
{
|
||||
text: "Regularization",
|
||||
link: "https://drive.google.com/uc?export=download&id=1LTicIKPRPbZRkkg6qOr1DSuOB72axood",
|
||||
},
|
||||
{
|
||||
text: "Convolutional Networks",
|
||||
link: "https://drive.google.com/uc?export=download&id=1bGVuwAwrofzZdfvj267elIzkYMIvYFj0",
|
||||
},
|
||||
{
|
||||
text: "Image Generation",
|
||||
link: "https://drive.google.com/uc?export=download&id=14w31QqWRDix1GdUE-na0_E0kGKBhtKzs",
|
||||
},
|
||||
{
|
||||
text: "Transformers and LLMs",
|
||||
link: "https://drive.google.com/uc?export=download&id=1af6bTTjAbhDYfrDhboW7Fuv52Gk9ygKr",
|
||||
},
|
||||
];
|
||||
|
||||
const figures = [
|
||||
{
|
||||
text: "Introduction",
|
||||
links: {
|
||||
pdf: "https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap1PDF.zip",
|
||||
svg: "https://drive.google.com/uc?export=download&id=1udnl5pUOAc8DcAQ7HQwyzP9pwL95ynnv",
|
||||
pptx: "https://docs.google.com/presentation/d/1IjTqIUvWCJc71b5vEJYte-Dwujcp7rvG/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true",
|
||||
},
|
||||
},
|
||||
{
|
||||
text: "Supervised learning",
|
||||
links: {
|
||||
pdf: "https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap2PDF.zip",
|
||||
svg: "https://drive.google.com/uc?export=download&id=1VSxcU5y1qNFlmd3Lb3uOWyzILuOj1Dla",
|
||||
pptx: "https://docs.google.com/presentation/d/1Br7R01ROtRWPlNhC_KOommeHAWMBpWtz/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true",
|
||||
},
|
||||
},
|
||||
{
|
||||
text: "Shallow neural networks",
|
||||
links: {
|
||||
pdf: "https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap3PDF.zip",
|
||||
svg: "https://drive.google.com/uc?export=download&id=19kZFWlXhzN82Zx02ByMmSZOO4T41fmqI",
|
||||
pptx: "https://docs.google.com/presentation/d/1e9M3jB5I9qZ4dCBY90Q3Hwft_i068QVQ/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true",
|
||||
},
|
||||
},
|
||||
{
|
||||
text: "Deep neural networks",
|
||||
links: {
|
||||
pdf: "https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap4PDF.zip",
|
||||
svg: "https://drive.google.com/uc?export=download&id=1ojr0ebsOhzvS04ItAflX2cVmYqHQHZUa",
|
||||
pptx: "https://docs.google.com/presentation/d/1LTSsmY4mMrJbqXVvoTOCkQwHrRKoYnJj/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true",
|
||||
},
|
||||
},
|
||||
{
|
||||
text: "Loss functions",
|
||||
links: {
|
||||
pdf: "https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap5PDF.zip",
|
||||
svg: "https://drive.google.com/uc?export=download&id=17MJO7fiMpFZVqKeqXTbQ36AMpmR4GizZ",
|
||||
pptx: "https://docs.google.com/presentation/d/1gcpC_3z9oRp87eMkoco-kdLD-MM54Puk/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true",
|
||||
},
|
||||
},
|
||||
{
|
||||
text: "Training models",
|
||||
links: {
|
||||
pdf: "https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap6PDF.zip",
|
||||
svg: "https://drive.google.com/uc?export=download&id=1VPdhFRnCr9_idTrX0UdHKGAw2shUuwhK",
|
||||
pptx: "https://docs.google.com/presentation/d/1AKoeggAFBl9yLC7X5tushAGzCCxmB7EY/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true",
|
||||
},
|
||||
},
|
||||
{
|
||||
text: "Gradients and initialization",
|
||||
links: {
|
||||
pdf: "https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap7PDF.zip",
|
||||
svg: "https://drive.google.com/uc?export=download&id=1TTl4gvrTvNbegnml4CoGoKOOd6O8-PGs",
|
||||
pptx: "https://docs.google.com/presentation/d/11zhB6PI-Dp6Ogmr4IcI6fbvbqNqLyYcz/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true",
|
||||
},
|
||||
},
|
||||
{
|
||||
text: "Measuring performance",
|
||||
links: {
|
||||
pdf: "https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap8PDF.zip",
|
||||
svg: "https://drive.google.com/uc?export=download&id=19eQOnygd_l0DzgtJxXuYnWa4z7QKJrJx",
|
||||
pptx: "https://docs.google.com/presentation/d/1SHRmJscDLUuQrG7tmysnScb3ZUAqVMZo/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true",
|
||||
},
|
||||
},
|
||||
{
|
||||
text: "Regularization",
|
||||
links: {
|
||||
pdf: "https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap9PDF.zip",
|
||||
svg: "https://drive.google.com/uc?export=download&id=1LprgnUGL7xAM9-jlGZC9LhMPeefjY0r0",
|
||||
pptx: "https://docs.google.com/presentation/d/1VwIfvjpdfTny6sEfu4ZETwCnw6m8Eg-5/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true",
|
||||
},
|
||||
},
|
||||
{
|
||||
text: "Convolutional networks",
|
||||
links: {
|
||||
pdf: "https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap10PDF.zip",
|
||||
svg: "https://drive.google.com/uc?export=download&id=1-Wb3VzaSvVeRzoUzJbI2JjZE0uwqupM9",
|
||||
pptx: "https://docs.google.com/presentation/d/1MtfKBC4Y9hWwGqeP6DVwUNbi1j5ncQCg/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true",
|
||||
},
|
||||
},
|
||||
{
|
||||
text: "Residual networks",
|
||||
links: {
|
||||
pdf: "https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap11PDF.zip",
|
||||
svg: "https://drive.google.com/uc?export=download&id=1Mr58jzEVseUAfNYbGWCQyDtEDwvfHRi1",
|
||||
pptx: "https://docs.google.com/presentation/d/1saY8Faz0KTKAAifUrbkQdLA2qkyEjOPI/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true",
|
||||
},
|
||||
},
|
||||
{
|
||||
text: "Transformers",
|
||||
links: {
|
||||
pdf: "https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap12PDF.zip",
|
||||
svg: "https://drive.google.com/uc?export=download&id=1txzOVNf8-jH4UfJ6SLnrtOfPd1Q3ebzd",
|
||||
pptx: "https://docs.google.com/presentation/d/1GVNvYWa0WJA6oKg89qZre-UZEhABfm0l/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true",
|
||||
},
|
||||
},
|
||||
{
|
||||
text: "Graph neural networks",
|
||||
links: {
|
||||
pdf: "https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap13PDF.zip",
|
||||
svg: "https://drive.google.com/uc?export=download&id=1lQIV6nRp6LVfaMgpGFhuwEXG-lTEaAwe",
|
||||
pptx: "https://docs.google.com/presentation/d/1YwF3U82c1mQ74c1WqHVTzLZ0j7GgKaWP/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true",
|
||||
},
|
||||
},
|
||||
{
|
||||
text: "Unsupervised learning",
|
||||
links: {
|
||||
pdf: "https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap14PDF.zip",
|
||||
svg: "https://drive.google.com/uc?export=download&id=1aMbI6iCuUvOywqk5pBOmppJu1L1anqsM",
|
||||
pptx: "https://docs.google.com/presentation/d/1A-lBGv3NHl4L32NvfFgy1EKeSwY-0UeB/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true",
|
||||
},
|
||||
},
|
||||
{
|
||||
text: "GANs",
|
||||
links: {
|
||||
pdf: "https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap15PDF.zip",
|
||||
svg: "https://drive.google.com/uc?export=download&id=1EErnlZCOlXc3HK7m83T2Jh_0NzIUHvtL",
|
||||
pptx: "https://docs.google.com/presentation/d/10Ernk41ShOTf4IYkMD-l4dJfKATkXH4w/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true",
|
||||
},
|
||||
},
|
||||
{
|
||||
text: "Normalizing flows",
|
||||
links: {
|
||||
pdf: "https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap16PDF.zip",
|
||||
svg: "https://drive.google.com/uc?export=download&id=1SNtNIY7khlHQYMtaOH-FosSH3kWwL4b7",
|
||||
pptx: "https://docs.google.com/presentation/d/1nLLzqb9pdfF_h6i1HUDSyp7kSMIkSUUA/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true",
|
||||
},
|
||||
},
|
||||
{
|
||||
text: "Variational autoencoders",
|
||||
links: {
|
||||
pdf: "https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap17PDF.zip",
|
||||
svg: "https://drive.google.com/uc?export=download&id=1B9bxtmdugwtg-b7Y4AdQKAIEVWxjx8l3",
|
||||
pptx: "https://docs.google.com/presentation/d/1lQE4Bu7-LgvV2VlJOt_4dQT-kusYl7Vo/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true",
|
||||
},
|
||||
},
|
||||
{
|
||||
text: "Diffusion models",
|
||||
links: {
|
||||
pdf: "https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap18PDF.zip",
|
||||
svg: "https://drive.google.com/uc?export=download&id=1A-pIGl4PxjVMYOKAUG3aT4a8wD3G-q_r",
|
||||
pptx: "https://docs.google.com/presentation/d/1x_ufIBtVPzWUvRieKMkpw5SdRjXWwdfR/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true",
|
||||
},
|
||||
},
|
||||
{
|
||||
text: "Deep reinforcement learning",
|
||||
links: {
|
||||
pdf: "https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap19PDF.zip",
|
||||
svg: "https://drive.google.com/uc?export=download&id=1a5WUoF7jeSgwC_PVdckJi1Gny46fCqh0",
|
||||
pptx: "https://docs.google.com/presentation/d/1TnYmVbFNhmMFetbjyfXGmkxp1EHauMqr/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true",
|
||||
},
|
||||
},
|
||||
{
|
||||
text: "Why does deep learning work?",
|
||||
links: {
|
||||
pdf: "https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap20PDF.zip",
|
||||
svg: "https://drive.google.com/uc?export=download&id=1M2d0DHEgddAQoIedKSDTTt7m1ZdmBLQ3",
|
||||
pptx: "https://docs.google.com/presentation/d/1coxF4IsrCzDTLrNjRagHvqB_FBy10miA/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true",
|
||||
},
|
||||
},
|
||||
{
|
||||
text: "Deep learning and ethics",
|
||||
links: {
|
||||
pdf: "https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLChap21PDF.zip",
|
||||
svg: "https://drive.google.com/uc?export=download&id=1jixmFfwmZkW_UVYzcxmDcMsdFFtnZ0bU",
|
||||
pptx: "https://docs.google.com/presentation/d/1EtfzanZYILvi9_-Idm28zD94I_6OrN9R/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true",
|
||||
},
|
||||
},
|
||||
{
|
||||
text: "Appendices",
|
||||
links: {
|
||||
pdf: "https://github.com/udlbook/udlbook/raw/main/PDFFigures/UDLAppendixPDF.zip",
|
||||
svg: "https://drive.google.com/uc?export=download&id=1k2j7hMN40ISPSg9skFYWFL3oZT7r8v-l",
|
||||
pptx: "https://docs.google.com/presentation/d/1_2cJHRnsoQQHst0rwZssv-XH4o5SEHks/edit?usp=drive_link&ouid=110441678248547154185&rtpof=true&sd=true",
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
export default function InstructorsSection() {
|
||||
return (
|
||||
<>
|
||||
<InstructorsContainer lightBg={true} id="Instructors">
|
||||
<InstructorsWrapper>
|
||||
<InstructorsRow imgStart={false}>
|
||||
<Column1>
|
||||
<TextWrapper>
|
||||
<TopLine>Instructors</TopLine>
|
||||
<Heading lightText={false}>Resources for instructors</Heading>
|
||||
<Subtitle darkText={true}>
|
||||
All the figures in vector and image formats, full slides for
|
||||
first twelve chapters, instructor answer booklet
|
||||
</Subtitle>
|
||||
</TextWrapper>
|
||||
</Column1>
|
||||
<Column2>
|
||||
<ImgWrap>
|
||||
<Img src={img} alt="Instructor" />
|
||||
</ImgWrap>
|
||||
</Column2>
|
||||
</InstructorsRow>
|
||||
<InstructorsRow2>
|
||||
<Column1>
|
||||
<TopLine>Register</TopLine>
|
||||
<InstructorsLink href="https://mitpress.ublish.com/request?cri=15055">
|
||||
Register
|
||||
</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:
|
||||
</InstructorsContent>
|
||||
<InstructorsContent>
|
||||
<ol>
|
||||
{fullSlides.map((slide, index) => (
|
||||
<li key={index}>
|
||||
{slide.text}{" "}
|
||||
<InstructorsLink href={slide.link}>
|
||||
PPTX
|
||||
</InstructorsLink>
|
||||
</li>
|
||||
))}
|
||||
</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>
|
||||
<InstructorsContent>
|
||||
<ol>
|
||||
{figures.map((figure, index) => (
|
||||
<li key={index}>
|
||||
{figure.text}:{" "}
|
||||
<InstructorsLink href={figure.links.pdf}>
|
||||
PDF
|
||||
</InstructorsLink>{" "}
|
||||
/{" "}
|
||||
<InstructorsLink href={figure.links.svg}>
|
||||
{" "}
|
||||
SVG
|
||||
</InstructorsLink>{" "}
|
||||
/{" "}
|
||||
<InstructorsLink href={figure.links.pptx}>
|
||||
PPTX{" "}
|
||||
</InstructorsLink>
|
||||
</li>
|
||||
))}
|
||||
</ol>
|
||||
</InstructorsContent>
|
||||
<InstructorsLink href="https://drive.google.com/file/d/1T_MXXVR4AfyMnlEFI-UVDh--FXI5deAp/view?usp=sharing">
|
||||
Instructions
|
||||
</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>
|
||||
</InstructorsContainer>
|
||||
</>
|
||||
);
|
||||
}
|
||||
@@ -1,15 +1,14 @@
|
||||
import styled from "styled-components";
|
||||
|
||||
|
||||
export const MediaContainer = styled.div`
|
||||
color: #fff;
|
||||
/* background: #f9f9f9; */
|
||||
background: ${({lightBg}) => (lightBg ? '#f9f9f9': '#010606')};
|
||||
background: ${({ lightBg }) => (lightBg ? "#f9f9f9" : "#010606")};
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
padding: 100px 0;
|
||||
}
|
||||
`
|
||||
`;
|
||||
|
||||
export const MediaWrapper = styled.div`
|
||||
display: grid;
|
||||
@@ -20,7 +19,7 @@ export const MediaWrapper = styled.div`
|
||||
margin-left: auto;
|
||||
padding: 0 24px;
|
||||
justify-content: center;
|
||||
`
|
||||
`;
|
||||
|
||||
export const MediaRow = styled.div`
|
||||
display: grid;
|
||||
@@ -29,27 +28,28 @@ export const MediaRow = styled.div`
|
||||
grid-template-areas: ${({ imgStart }) => (imgStart ? `'col2 col1'` : `'col1 col2'`)};
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
grid-template-areas: ${({imgStart}) => (imgStart ? `'col1' 'col2'` : `'col1 col1' 'col2 col2'`)};
|
||||
grid-template-areas: ${({ imgStart }) =>
|
||||
imgStart ? `'col1' 'col2'` : `'col1 col1' 'col2 col2'`};
|
||||
}
|
||||
`
|
||||
`;
|
||||
|
||||
export const Column1 = styled.div`
|
||||
margin-bottom: 15px;
|
||||
padding: 0 15px;
|
||||
grid-area: col1;
|
||||
`
|
||||
`;
|
||||
|
||||
export const Column2 = styled.div`
|
||||
margin-bottom: 15px;
|
||||
padding: 0 15px;
|
||||
grid-area: col2;
|
||||
`
|
||||
`;
|
||||
|
||||
export const TextWrapper = styled.div`
|
||||
max-width: 540px;
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
`
|
||||
`;
|
||||
|
||||
export const TopLine = styled.p`
|
||||
color: #57c6d1;
|
||||
@@ -59,41 +59,37 @@ export const TopLine = styled.p`
|
||||
letter-spacing: 1.4px;
|
||||
text-transform: uppercase;
|
||||
margin-bottom: 16px;
|
||||
`
|
||||
`;
|
||||
|
||||
export const Heading = styled.h1`
|
||||
|
||||
margin-bottom: 24px;
|
||||
font-size: 48px;
|
||||
line-height: 1.1;
|
||||
font-weight: 600;
|
||||
color: ${({lightText}) => (lightText ? '#f7f8fa' : '#010606')};
|
||||
color: ${({ lightText }) => (lightText ? "#f7f8fa" : "#010606")};
|
||||
|
||||
@media screen and (max-width: 480px)
|
||||
{
|
||||
@media screen and (max-width: 480px) {
|
||||
font-size: 32px;
|
||||
}
|
||||
`
|
||||
|
||||
`;
|
||||
|
||||
export const Subtitle = styled.p`
|
||||
max-width: 440px;
|
||||
margin-bottom: 35px;
|
||||
font-size: 18px;
|
||||
line-height: 24px;
|
||||
color: ${({darkText})=> (darkText ? '#010606' : '#fff')};
|
||||
|
||||
`
|
||||
color: ${({ darkText }) => (darkText ? "#010606" : "#fff")};
|
||||
`;
|
||||
|
||||
export const BtnWrap = styled.div`
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
`
|
||||
`;
|
||||
|
||||
export const ImgWrap = styled.div`
|
||||
max-width: 555px;
|
||||
height: 100%;
|
||||
`
|
||||
`;
|
||||
|
||||
export const Img = styled.img`
|
||||
width: 100%;
|
||||
@@ -103,7 +99,6 @@ export const Img = styled.img`
|
||||
padding-right: 0;
|
||||
`;
|
||||
|
||||
|
||||
export const MediaTextBlock = styled.div`
|
||||
@media screen and (max-width: 768px) {
|
||||
font-size: 24px;
|
||||
@@ -112,7 +107,7 @@ export const MediaTextBlock = styled.div`
|
||||
@media screen and (max-width: 480px) {
|
||||
font-size: 18px;
|
||||
}
|
||||
`
|
||||
`;
|
||||
|
||||
export const MediaContent = styled.div`
|
||||
z-index: 3;
|
||||
@@ -125,11 +120,11 @@ export const MediaContent = styled.div`
|
||||
flex-direction: column;
|
||||
align-items: left;
|
||||
list-style-position: inside;
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
`
|
||||
`;
|
||||
|
||||
export const MediaRow2 = styled.div`
|
||||
display: grid;
|
||||
@@ -138,21 +133,20 @@ export const MediaRow2 = styled.div`
|
||||
grid-template-areas: ${({ imgStart }) => (imgStart ? `'col2 col1'` : `'col1 col2'`)};
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
grid-template-areas: ${({imgStart}) => (imgStart ? `'col1' 'col2'` : `'col1 col1' 'col2 col2'`)};
|
||||
grid-template-areas: ${({ imgStart }) =>
|
||||
imgStart ? `'col1' 'col2'` : `'col1 col1' 'col2 col2'`};
|
||||
}
|
||||
`
|
||||
`;
|
||||
|
||||
export const VideoFrame = styled.div`
|
||||
width: 560px;
|
||||
height: 315px;
|
||||
|
||||
@media screen and (max-width: 1050px) {
|
||||
width: 280px;
|
||||
height: 157px;
|
||||
}
|
||||
|
||||
|
||||
`
|
||||
|
||||
`;
|
||||
|
||||
export const MediaLink = styled.a`
|
||||
text-decoration: none;
|
||||
@@ -168,16 +162,18 @@ export const MediaLink = styled.a`
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 2px;
|
||||
background-color: #57c6d1;;
|
||||
content: '';
|
||||
opacity: .3;
|
||||
background-color: #57c6d1;
|
||||
content: "";
|
||||
opacity: 0.3;
|
||||
-webkit-transform: scaleX(1);
|
||||
transition-property: opacity, -webkit-transform;
|
||||
transition-duration: .3s;
|
||||
transition-property:
|
||||
opacity,
|
||||
-webkit-transform;
|
||||
transition-duration: 0.3s;
|
||||
}
|
||||
|
||||
&:hover:before {
|
||||
opacity: 1;
|
||||
-webkit-transform: scaleX(1.05);
|
||||
}
|
||||
`
|
||||
`;
|
||||
@@ -1,90 +0,0 @@
|
||||
import React from 'react'
|
||||
import { ImgWrap, Img, MediaLink, MediaContainer, MediaContent, MediaWrapper, VideoFrame, MediaRow, MediaRow2, Column1, Column2, TextWrapper, TopLine, Heading, Subtitle} from './MediaElements'
|
||||
|
||||
// export const homeObjOne = {
|
||||
// id: 'about',
|
||||
// lightBg: false,
|
||||
// lightText: true,
|
||||
// lightTextDesc: true,
|
||||
// topLine: 'Premium Bank',
|
||||
// headline: 'Unlimited transactions with zero fees',
|
||||
// description:
|
||||
// 'Get access to our exclusive app that allows you to send unlimited transactions without getting charged any fees',
|
||||
// buttonLabel: 'Get Started',
|
||||
// imgStart: false,
|
||||
// img: require('../../images/svg-1.svg').default,
|
||||
// alt: 'Car',
|
||||
// dark: true,
|
||||
// primary: true,
|
||||
// darkText: false
|
||||
// };
|
||||
|
||||
import img from '../../images/media.svg'
|
||||
|
||||
|
||||
|
||||
const MediaSection = () => {
|
||||
return (
|
||||
<>
|
||||
<MediaContainer lightBg={false} id='Media'>
|
||||
<MediaWrapper>
|
||||
<MediaRow imgStart={true}>
|
||||
<Column1>
|
||||
<TextWrapper>
|
||||
<TopLine>Media</TopLine>
|
||||
<Heading lightText={true}> Reviews, videos, podcasts, interviews</Heading>
|
||||
<Subtitle darkText={false}>Various resources connected to the book</Subtitle>
|
||||
</TextWrapper>
|
||||
</Column1>
|
||||
<Column2>
|
||||
<ImgWrap>
|
||||
<Img src={img} alt='Car'/>
|
||||
</ImgWrap>
|
||||
</Column2>
|
||||
</MediaRow>
|
||||
<MediaRow>
|
||||
<Column1>
|
||||
Machine learning street talk podcast
|
||||
<VideoFrame>
|
||||
<iframe width="100%" height="100%"
|
||||
src="https://www.youtube.com/embed/sJXn4Cl4oww?si=Lm_hQPqj0RXy-75H&controls=0"
|
||||
title="YouTube video player" frameborder="2" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen>
|
||||
</iframe>
|
||||
</VideoFrame>
|
||||
</Column1>
|
||||
<Column2>
|
||||
Deeper insights podcast
|
||||
<VideoFrame>
|
||||
<iframe width="100%" height="100%" src="https://www.youtube.com/embed/nQf4o9TDSHI?si=uMk66zLD7uhuSnQ1&controls=0" title="YouTube video player" frameborder="2" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
|
||||
</VideoFrame>
|
||||
</Column2>
|
||||
</MediaRow>
|
||||
<MediaRow2>
|
||||
<Column1>
|
||||
<TopLine>Reviews</TopLine>
|
||||
<MediaContent>
|
||||
<ul>
|
||||
<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></li>
|
||||
<li>Book <MediaLink href="https://medium.com/@vishalvignesh/udl-book-review-the-new-deep-learning-textbook-youll-want-to-finish-69e1557b018d">review</MediaLink> by Vishal V.</li>
|
||||
</ul>
|
||||
</MediaContent>
|
||||
</Column1>
|
||||
<Column2>
|
||||
<TopLine>Interviews</TopLine>
|
||||
<MediaContent>
|
||||
<ul>
|
||||
<li>Borealis AI <MediaLink href="https://www.borealisai.com/news/understanding-deep-learning/">interview</MediaLink></li>
|
||||
<li>Shepherd ML book <MediaLink href="https://shepherd.com/best-books/machine-learning-and-deep-neural-networks">recommendations</MediaLink></li>
|
||||
</ul>
|
||||
</MediaContent>
|
||||
</Column2>
|
||||
</MediaRow2>
|
||||
|
||||
</MediaWrapper>
|
||||
</MediaContainer>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
export default MediaSection
|
||||
150
src/components/Media/index.jsx
Executable file
150
src/components/Media/index.jsx
Executable file
@@ -0,0 +1,150 @@
|
||||
import {
|
||||
Column1,
|
||||
Column2,
|
||||
Heading,
|
||||
Img,
|
||||
ImgWrap,
|
||||
MediaContainer,
|
||||
MediaContent,
|
||||
MediaLink,
|
||||
MediaRow,
|
||||
MediaRow2,
|
||||
MediaWrapper,
|
||||
Subtitle,
|
||||
TextWrapper,
|
||||
TopLine,
|
||||
VideoFrame,
|
||||
} from "@/components/Media/MediaElements";
|
||||
import img from "@/images/media.svg";
|
||||
|
||||
const interviews = [
|
||||
{
|
||||
href: "https://www.borealisai.com/news/understanding-deep-learning/",
|
||||
text: "Borealis AI",
|
||||
linkText: "interview",
|
||||
},
|
||||
{
|
||||
href: "https://shepherd.com/best-books/machine-learning-and-deep-neural-networks",
|
||||
text: "Shepherd ML book",
|
||||
linkText: "recommendations",
|
||||
},
|
||||
];
|
||||
|
||||
export default function MediaSection() {
|
||||
return (
|
||||
<>
|
||||
<MediaContainer lightBg={false} id="Media">
|
||||
<MediaWrapper>
|
||||
<MediaRow imgStart={true}>
|
||||
<Column1>
|
||||
<TextWrapper>
|
||||
<TopLine>Media</TopLine>
|
||||
<Heading lightText={true}>
|
||||
Reviews, videos, podcasts, interviews
|
||||
</Heading>
|
||||
<Subtitle darkText={false}>
|
||||
Various resources connected to the book
|
||||
</Subtitle>
|
||||
</TextWrapper>
|
||||
</Column1>
|
||||
<Column2>
|
||||
<ImgWrap>
|
||||
<Img src={img} alt="Media" />
|
||||
</ImgWrap>
|
||||
</Column2>
|
||||
</MediaRow>
|
||||
<MediaRow>
|
||||
<Column1>
|
||||
Machine learning street talk podcast
|
||||
<VideoFrame>
|
||||
<iframe
|
||||
width="100%"
|
||||
height="100%"
|
||||
src="https://www.youtube.com/embed/sJXn4Cl4oww?si=Lm_hQPqj0RXy-75H&controls=0"
|
||||
title="YouTube video player"
|
||||
frameBorder="2"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
|
||||
allowfullscreen
|
||||
></iframe>
|
||||
</VideoFrame>
|
||||
</Column1>
|
||||
<Column2>
|
||||
<TopLine>Reviews</TopLine>
|
||||
<MediaContent>
|
||||
{/* TODO: add dynamic rendering for reviews */}
|
||||
<ul>
|
||||
<li>
|
||||
Nature Machine Intelligence{" "}
|
||||
<MediaLink href="https://github.com/udlbook/udlbook/blob/main/public/NMI_Review.pdf">
|
||||
{" "}
|
||||
review{" "}
|
||||
</MediaLink>{" "}
|
||||
by{" "}
|
||||
<MediaLink href="https://wang-axis.github.io/">
|
||||
Ge Wang
|
||||
</MediaLink>
|
||||
</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>
|
||||
</li>
|
||||
<li>
|
||||
Book{" "}
|
||||
<MediaLink href="https://medium.com/@vishalvignesh/udl-book-review-the-new-deep-learning-textbook-youll-want-to-finish-69e1557b018d">
|
||||
review
|
||||
</MediaLink>{" "}
|
||||
by Vishal V.
|
||||
</li>
|
||||
<li>
|
||||
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://www.justinmath.com/the-best-neural-nets-textbook/">
|
||||
review
|
||||
</MediaLink>{" "}
|
||||
by Justin Skycak
|
||||
</li>
|
||||
</ul>
|
||||
</MediaContent>
|
||||
<TopLine>Interviews</TopLine>
|
||||
<MediaContent>
|
||||
<ul>
|
||||
{interviews.map((interview, index) => (
|
||||
<li key={index}>
|
||||
{interview.text}{" "}
|
||||
<MediaLink href={interview.href}>
|
||||
{interview.linkText}
|
||||
</MediaLink>
|
||||
</li>
|
||||
))}
|
||||
</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>
|
||||
</ul>
|
||||
|
||||
</Column2>
|
||||
</MediaRow>
|
||||
</MediaWrapper>
|
||||
</MediaContainer>
|
||||
</>
|
||||
);
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user