{ "cells": [ { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Init Plugin\n", "Init Graph Optimizer\n", "Init Kernel\n" ] } ], "source": [ "from tensorflow import keras\n", "import os\n", "os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'\n", "import tensorflow as tf\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "# from icecream.icecream import ic\n", "# tf.get_logger().setLevel('ERROR')\n", "plt.style.use('ggplot')\n", "# plt.rcParams[\"figure.figsize\"] = (12,6)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Model construction\n", "\n", "## What should the input and output be?\n", "Input: [x, t]\n", "x as horizontal wave position, t as time\n", "\n", "Output: [u]\n", "u as vertical wave position\n", "\n", "[x, t]->y w.r.t the wave eqn, where x is the position.\n", "\n", "## IC and BC\n", "IC:\n", "u(0,x) = f(x)\n", "du/dt(0,x) = g(x)\n", "\n", "BC:\n", "u(0,t) = a(t)\n", "u(L,t) = b(t)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def init_fn(x, mu, sigma) -> np.array:\n", " return np.exp(-(x-mu)**2 / (2*sigma**2)) / (np.sqrt(2*np.pi) * sigma)\n", " \n", "L = 1 # length\n", "T = 4 # time\n", "c = 0.94\n", "dx = 0.01\n", "dt = 0.1\n", "sigma2 = (c*dt/dx) ** 2\n", "\n", "x = np.arange(0, L+dx, dx)\n", "t = np.arange(0, T+dt, dt)\n", "Nx = x.size\n", "Nt = t.size\n", "ic = init_fn(x, 0.5, 0.1)\n", "plt.plot(x, ic)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "def get_model(input_dim, output_dim, width, depth, regularization_param=1e-7,\n", " act_func='tanh', output_act_func=False, random_seed=None) -> keras.Sequential:\n", " initializer = keras.initializers.RandomNormal(seed=random_seed)\n", " regularizer = keras.regularizers.l2(regularization_param)\n", "\n", " if act_func == 'sin':\n", " act_func = tf.math.sin\n", "\n", " all_layers = [keras.layers.InputLayer(input_shape=[input_dim])]\n", " all_layers += [keras.layers.Dense(width, activation=act_func,\n", " kernel_initializer=initializer,\n", " bias_initializer=initializer,\n", " kernel_regularizer=regularizer,\n", " bias_regularizer=regularizer) for _ in range(depth-1)]\n", " all_layers.append(keras.layers.Dense(\n", " output_dim, kernel_initializer=initializer,\n", " activation=act_func if output_act_func else None,\n", " bias_initializer=initializer,\n", " kernel_regularizer=regularizer,\n", " bias_regularizer=regularizer))\n", " m = keras.Sequential(all_layers)\n", " return m\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Training progress\n", "\n", "**The initial condition loss won't go down but we cannot figure out why**" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "def fit(model, all_input, c, epoch) -> list:\n", " def int_loss(d2u_dxi, c):\n", " # d2u_dx2 is [101, 101, 1]\n", " # print(d2u_dxi)\n", " d2u_dx2, d2u_dt2 = d2u_dxi[0][0]\n", " return (d2u_dx2-c**2*d2u_dt2)**2\n", "\n", " def bc_loss(u):\n", " lambda_b = 10\n", " return lambda_b * u\n", "\n", " def ic_loss(x_input, u, du_di):\n", " # print(u,du_di)\n", " print(x_input)\n", " du_di = tf.cast(du_di, dtype='float32')\n", " du_dx, du_dt = du_di[0]\n", " lambda_c = 10\n", " return lambda_c*u[0]-ic[int(x_input[0][0]/dx)]+du_dt\n", " # shape of ic is [101, 1]\n", " # gg1 = tf.reduce_mean((u[:, 0, :]-ic)**2).numpy()\n", " # gg2 = tf.reduce_mean(du_dt**2).numpy()\n", " # # print(np.shape(gg1), np.shape(gg2))\n", " # # print(type(gg1), type(gg2))\n", " # # print(gg1, gg2)\n", " # gg3 = gg1+gg2\n", " # return lambda_c*gg3\n", "\n", " optimizer = keras.optimizers.Adam(learning_rate=1e-3)\n", " interior_losses = []\n", " boundary_losses = []\n", " total_losses = []\n", " # for ep in range(1, epoch+1):\n", " # the first tier tape for computing the gradient of the whole network\n", " # for i in range(len(all_input)):\n", " x_input = all_input\n", " with tf.GradientTape() as tape_0:\n", " with tf.GradientTape(persistent=1) as tape_1:\n", " tape_1.watch(x_input)\n", " with tf.GradientTape() as tape_2:\n", " tape_2.watch(x_input)\n", " # u will be [1,1]\n", " u = model(x_input)\n", " # this will return both du_dx and du_dt\n", " # the shape of du_di is [101, 101, 2]\n", " du_di = tape_2.gradient(u, x_input)\n", " # Questionable step here\n", " d2u_dxi = tape_1.jacobian(du_di, x_input)\n", " # print(d2u_dxi)\n", " d2u_dxi = np.diagonal(d2u_dxi, axis1=1, axis2=3)\n", " del tape_2, tape_1\n", " tot_loss = []\n", " interior_loss = int_loss(d2u_dxi, c)\n", " if x_input[0][0] == 0 or x_input[0][0] == 1:\n", " boundary_loss = bc_loss(u)\n", " tot_loss.append(boundary_loss)\n", " if x_input[0][1] == 0:\n", " initial_loss = ic_loss(x_input, u, du_di)\n", " tot_loss.append(initial_loss)\n", " # print(interior_loss, boundary_loss,initial_loss)\n", " # total_loss = interior_loss+boundary_loss+initial_loss\n", " total_loss = tf.cast(np.sum(tot_loss), dtype='float32')\n", " # the final gradient of the whole network\n", " grads = tape_0.gradient(total_loss, model.trainable_variables)\n", " # keep records of losses\n", " interior_losses.append(interior_loss)\n", " boundary_losses.append(boundary_loss)\n", " total_losses.append(total_loss)\n", " optimizer.apply_gradients(zip(grads, model.trainable_variables))\n", " print(f\" int {interior_loss}, bc {boundary_loss}, ic {initial_loss}, tot {total_loss}\")\n", " # return interior_losses, boundary_losses, total_losses, u\n" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(441, 2)\n", "tf.Tensor([[0. 0.]], shape=(1, 2), dtype=float64)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/zhilong/miniforge3/envs/tf/lib/python3.8/site-packages/numpy/core/fromnumeric.py:87: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray\n", " return ufunc.reduce(obj, axis, dtype, out, **passkwargs)\n" ] }, { "ename": "ValueError", "evalue": "No gradients provided for any variable: ['dense_35/kernel:0', 'dense_35/bias:0', 'dense_36/kernel:0', 'dense_36/bias:0', 'dense_37/kernel:0', 'dense_37/bias:0', 'dense_38/kernel:0', 'dense_38/bias:0', 'dense_39/kernel:0', 'dense_39/bias:0'].", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m/var/folders/6h/mmvp5df90fb3fsqtc5d9mxt40000gn/T/ipykernel_3265/4187295317.py\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mtf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdevice\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"cpu:0\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 20\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx_input\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 21\u001b[0;31m \u001b[0mlosses\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx_input\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mepoch\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m/var/folders/6h/mmvp5df90fb3fsqtc5d9mxt40000gn/T/ipykernel_3265/3556954484.py\u001b[0m in \u001b[0;36mfit\u001b[0;34m(model, all_input, c, epoch)\u001b[0m\n\u001b[1;32m 66\u001b[0m \u001b[0mboundary_losses\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mboundary_loss\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 67\u001b[0m \u001b[0mtotal_losses\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtotal_loss\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 68\u001b[0;31m \u001b[0moptimizer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mapply_gradients\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mzip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgrads\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtrainable_variables\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 69\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\" int {interior_loss}, bc {boundary_loss}, ic {initial_loss}, tot {total_loss}\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 70\u001b[0m \u001b[0;31m# return interior_losses, boundary_losses, total_losses, u\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/miniforge3/envs/tf/lib/python3.8/site-packages/tensorflow/python/keras/optimizer_v2/optimizer_v2.py\u001b[0m in \u001b[0;36mapply_gradients\u001b[0;34m(self, grads_and_vars, name, experimental_aggregate_gradients)\u001b[0m\n\u001b[1;32m 628\u001b[0m \u001b[0mRuntimeError\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mIf\u001b[0m \u001b[0mcalled\u001b[0m \u001b[0;32min\u001b[0m \u001b[0ma\u001b[0m \u001b[0mcross\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mreplica\u001b[0m \u001b[0mcontext\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 629\u001b[0m \"\"\"\n\u001b[0;32m--> 630\u001b[0;31m \u001b[0mgrads_and_vars\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0moptimizer_utils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfilter_empty_gradients\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgrads_and_vars\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 631\u001b[0m \u001b[0mvar_list\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mv\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0m_\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mv\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mgrads_and_vars\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 632\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/miniforge3/envs/tf/lib/python3.8/site-packages/tensorflow/python/keras/optimizer_v2/utils.py\u001b[0m in \u001b[0;36mfilter_empty_gradients\u001b[0;34m(grads_and_vars)\u001b[0m\n\u001b[1;32m 73\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 74\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mfiltered\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 75\u001b[0;31m raise ValueError(\"No gradients provided for any variable: %s.\" %\n\u001b[0m\u001b[1;32m 76\u001b[0m ([v.name for _, v in grads_and_vars],))\n\u001b[1;32m 77\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mvars_with_empty_grads\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mValueError\u001b[0m: No gradients provided for any variable: ['dense_35/kernel:0', 'dense_35/bias:0', 'dense_36/kernel:0', 'dense_36/bias:0', 'dense_37/kernel:0', 'dense_37/bias:0', 'dense_38/kernel:0', 'dense_38/bias:0', 'dense_39/kernel:0', 'dense_39/bias:0']." ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "model = get_model(2, 1, 20, 5, act_func='tanh')\n", "dx = 0.05\n", "dt = 0.05\n", "time_span = 1\n", "x_end = 1\n", "\n", "x_list = np.arange(0, 1, dx)\n", "t_list = np.arange(0, 1, dt)\n", "x_input = [np.asarray([x, t]) for t in np.arange(0, time_span+dt, dt)\n", " for x in np.arange(0, x_end+dx, dx)]\n", "print(np.shape(x_input))\n", "\n", "epoch = 9999\n", "\n", "x_input = tf.reshape(tf.constant(x_input), (441,1,2))\n", "ic = init_fn(x_input[0:21, :,0], 0.5, 0.1).reshape([21, 1])\n", "plt.plot(x_input[0:21,:, 0], ic)\n", "\n", "with tf.device(\"cpu:0\"):\n", " for i in range(len(x_input)):\n", " losses = fit(model, x_input[i], c, epoch)\n" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1, int 2.470602543412797e-13,bc 5.600417352091824e-10, ic 27.93001890403208, tot 27.93001890459237\n", "2, int 2.4425813147832335e-13,bc 2.392385738403391e-07, ic 27.93218612892408, tot 27.9321863681629\n", "3, int 2.324050076901599e-13,bc 1.5172992107181926e-07, ic 27.928302290243934, tot 27.928302441974086\n", "4, int 2.3046771450012425e-13,bc 2.0206579165460425e-07, ic 27.92803764561826, tot 27.928037847684283\n", "5, int 2.352963053842054e-13,bc 7.176923499940813e-09, ic 27.9296636603352, tot 27.92966366751236\n", "6, int 2.4025543507088934e-13,bc 8.822872388236647e-08, ic 27.93133735876812, tot 27.931337446997084\n", "7, int 2.403019532868571e-13,bc 1.4195906317127083e-07, ic 27.93168783407957, tot 27.931687976038873\n", "8, int 2.35714537272552e-13,bc 3.558021433036629e-08, ic 27.93085336904624, tot 27.93085340462669\n", "9, int 2.294745692627271e-13,bc 9.842421988537353e-09, ic 27.92959690312545, tot 27.9295969129681\n", "10, int 2.248442241127396e-13,bc 8.243357996207124e-08, ic 27.9287552855344, tot 27.928755367968204\n", "11, int 2.236033020597819e-13,bc 7.675150470731751e-08, ic 27.928805353433805, tot 27.928805430185534\n", "12, int 2.2510484645523988e-13,bc 1.2215240374757741e-08, ic 27.929549219402105, tot 27.92954923161757\n", "13, int 2.273677984759475e-13,bc 1.1239209563029817e-08, ic 27.930483820234567, tot 27.930483831474003\n", "14, int 2.281862736653623e-13,bc 5.556395876737952e-08, ic 27.931065561567703, tot 27.93106561713189\n", "15, int 2.2641405233353569e-13,bc 4.8521204831786235e-08, ic 27.930996420176008, tot 27.93099646869744\n", "16, int 2.2255037975056165e-13,bc 7.699388682169683e-09, ic 27.930400373721262, tot 27.930400381420874\n", "17, int 2.1811716663835533e-13,bc 7.372367605285035e-09, ic 27.92965650774635, tot 27.929656515118936\n", "18, int 2.1479524961267865e-13,bc 3.6240564327272295e-08, ic 27.92919159151023, tot 27.929191627751006\n", "19, int 2.1349828579447626e-13,bc 3.274632476291117e-08, ic 27.9292297384786, tot 27.92922977122514\n", "20, int 2.1392109126316796e-13,bc 5.694131388622736e-09, ic 27.9297041914489, tot 27.929704197143245\n" ] }, { "ename": "KeyboardInterrupt", "evalue": "", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", "\u001b[0;32m/var/folders/6h/mmvp5df90fb3fsqtc5d9mxt40000gn/T/ipykernel_41481/3826703814.py\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mlosses\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx_input\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mepoch\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m/var/folders/6h/mmvp5df90fb3fsqtc5d9mxt40000gn/T/ipykernel_41481/2776831954.py\u001b[0m in \u001b[0;36mfit\u001b[0;34m(model, x_input, c, epoch)\u001b[0m\n\u001b[1;32m 70\u001b[0m \u001b[0md2u_di2\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtape_1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgradient\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdu_di\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx_input\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 71\u001b[0m \u001b[0;32mdel\u001b[0m \u001b[0mtape_2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtape_1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 72\u001b[0;31m \u001b[0minterior_loss\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mint_loss\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0md2u_di2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mc\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 73\u001b[0m \u001b[0mboundary_loss\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mbc_loss\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mu\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 74\u001b[0m \u001b[0minitial_loss\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mic_loss\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mu\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdu_di\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/var/folders/6h/mmvp5df90fb3fsqtc5d9mxt40000gn/T/ipykernel_41481/2776831954.py\u001b[0m in \u001b[0;36mint_loss\u001b[0;34m(d2u_di2, c)\u001b[0m\n\u001b[1;32m 21\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0md2u_di2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mj\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0md2u_di2\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 23\u001b[0;31m \u001b[0md2u_dx2\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mj\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0md2u_di2\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 24\u001b[0m \u001b[0md2u_dt2\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mj\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0md2u_di2\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 25\u001b[0m \u001b[0;31m# d2u_dx2 is [101, 101, 1]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/miniforge3/envs/tf/lib/python3.8/site-packages/tensorflow/python/util/dispatch.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 204\u001b[0m \u001b[0;34m\"\"\"Call target, and fall back on dispatchers if there is a TypeError.\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 205\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 206\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mtarget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 207\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mTypeError\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 208\u001b[0m \u001b[0;31m# Note: convert_to_eager_tensor currently raises a ValueError, not a\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/miniforge3/envs/tf/lib/python3.8/site-packages/tensorflow/python/ops/array_ops.py\u001b[0m in \u001b[0;36m_slice_helper\u001b[0;34m(tensor, slice_spec, var)\u001b[0m\n\u001b[1;32m 1024\u001b[0m skip_on_eager=False) as name:\n\u001b[1;32m 1025\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mbegin\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1026\u001b[0;31m packed_begin, packed_end, packed_strides = (stack(begin), stack(end),\n\u001b[0m\u001b[1;32m 1027\u001b[0m stack(strides))\n\u001b[1;32m 1028\u001b[0m if (packed_begin.dtype == dtypes.int64 or\n", "\u001b[0;32m~/miniforge3/envs/tf/lib/python3.8/site-packages/tensorflow/python/util/dispatch.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 204\u001b[0m \u001b[0;34m\"\"\"Call target, and fall back on dispatchers if there is a TypeError.\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 205\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 206\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mtarget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 207\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mTypeError\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 208\u001b[0m \u001b[0;31m# Note: convert_to_eager_tensor currently raises a ValueError, not a\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/miniforge3/envs/tf/lib/python3.8/site-packages/tensorflow/python/ops/array_ops.py\u001b[0m in \u001b[0;36mstack\u001b[0;34m(values, axis, name)\u001b[0m\n\u001b[1;32m 1410\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1411\u001b[0m \u001b[0;31m# If the input is a constant list, it can be converted to a constant op\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1412\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mops\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconvert_to_tensor\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1413\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mTypeError\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1414\u001b[0m \u001b[0;32mpass\u001b[0m \u001b[0;31m# Input list contains non-constant tensors\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/miniforge3/envs/tf/lib/python3.8/site-packages/tensorflow/python/profiler/trace.py\u001b[0m in \u001b[0;36mwrapped\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 161\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mTrace\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtrace_name\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mtrace_kwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 162\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 163\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 164\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 165\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mwrapped\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mKeyboardInterrupt\u001b[0m: " ] } ], "source": [ "losses = fit(model, x_input, c, epoch)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(-0.05, 1.05, 2.490356564521786e-07, 9.623225778341294e-05)" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "test_predict = model(x_input[0,:,:])\n", "plt.plot(x_input[0,:,0], test_predict)\n", "plt.axis('equal')" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[3., 3., 3., 3., 3., 3., 3., 3., 3., 3.],\n", " [3., 3., 3., 3., 3., 3., 3., 3., 3., 3.],\n", " [3., 3., 3., 3., 3., 3., 3., 3., 3., 3.],\n", " [3., 3., 3., 3., 3., 3., 3., 3., 3., 3.],\n", " [3., 3., 3., 3., 3., 3., 3., 3., 3., 3.],\n", " [3., 3., 3., 3., 3., 3., 3., 3., 3., 3.],\n", " [3., 3., 3., 3., 3., 3., 3., 3., 3., 3.],\n", " [3., 3., 3., 3., 3., 3., 3., 3., 3., 3.],\n", " [3., 3., 3., 3., 3., 3., 3., 3., 3., 3.],\n", " [3., 3., 3., 3., 3., 3., 3., 3., 3., 3.]])" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "test_mat = np.asarray(list([[i, 3] for _ in range(10)] for i in range(10)))\n", "first = np.zeros([10,10])\n", "second = np.zeros([10,10])\n", "for i in range(len(test_mat)):\n", " for j in range(len(test_mat[0])):\n", " first[i, j] = test_mat[i, j, 0]\n", " second[i, j] = test_mat[i, j, 1]\n", "# first = np.asarray(first).reshape(10, 10)\n", "# second = np.asarray(second).reshape(10, 10)\n", "second" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def fit_old(model, x_input, c, epoch, verbose=True):\n", "\n", " optimizer = keras.optimizers.Adam(learning_rate=1e-3)\n", " interior_losses = []\n", " boundary_losses = []\n", " total_losses = []\n", " for _ in range(1, epoch+1):\n", " # the first tier tape for computing the gradient of the whole network\n", " with tf.GradientTape() as tape_0:\n", " with tf.GradientTape(persistent=True) as tape_1:\n", " tape_1.watch(x_input)\n", " with tf.GradientTape(persistent=True) as tape_2:\n", " tape_2.watch(x_input)\n", " u = model(x_input)\n", " du_di = tape_2.gradient(u, x_input)\n", " d2u_di2 = tape_1.gradient(du_di, x_input)\n", " del tape_2\n", " del tape_1\n", " d2u_dx2, d2u_dt2 = zip(*d2u_di2)\n", " interior_loss = tf.reduce_mean(\n", " (np.array(d2u_dx2)-c**2*np.array(d2u_dt2))**2)\n", " boundary_loss = 10*(u[0]**2+(u[-1]-1)**2)\n", " loss = interior_loss + boundary_loss + \\\n", " tf.math.reduce_sum(model.losses)\n", "\n", " interior_losses.append(interior_loss)\n", " boundary_losses.append(boundary_loss)\n", " total_losses.append(loss)\n", " grads = tape_0.gradient(loss, model.trainable_variables)\n", " optimizer.apply_gradients(zip(grads, model.trainable_variables))\n", " return interior_losses, boundary_losses, total_losses, u" ] } ], "metadata": { "interpreter": { "hash": "83eb3a94852d7da6265f5c02f9c348bfbb051e60fbf28829dfd0a8aff7ca6bfd" }, "kernelspec": { "display_name": "Python 3.8.12 64-bit ('tf': conda)", "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.8.12" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }