diff --git a/docs/notebooks/convert_keras.ipynb b/docs/notebooks/convert_keras.ipynb index 9aba468..5807c55 100644 --- a/docs/notebooks/convert_keras.ipynb +++ b/docs/notebooks/convert_keras.ipynb @@ -16,7 +16,7 @@ "outputs": [], "source": [ "!pip install git+https://github.com/ASEM000/serket --quiet\n", - "!pip install keras_core --quiet" + "!pip install keras --quiet" ] }, { @@ -28,25 +28,17 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Using JAX backend.\n" - ] - } - ], + "outputs": [], "source": [ "import os\n", "\n", "os.environ[\"KERAS_BACKEND\"] = \"jax\"\n", "import jax.numpy as jnp\n", + "import jax.tree_util as jtu\n", "import jax.random as jr\n", - "import keras_core as keras\n", - "from keras_core import Variable\n", + "import keras\n", "import serket as sk\n", "import jax\n", "import matplotlib.pyplot as plt" @@ -61,11 +53,17 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# define a keras layer that wraps the serket layer\n", + "def is_trainable(leaf):\n", + " if isinstance(leaf, jax.Array) and jnp.issubdtype(leaf.dtype, jnp.inexact):\n", + " return True\n", + " return False\n", + "\n", + "\n", "class Serket2Keras(keras.Layer):\n", " def __init__(self, layer, name=None):\n", " \"\"\"Converts a serket layer to a keras layer\"\"\"\n", @@ -76,10 +74,7 @@ " leaves, treedef = jax.tree_util.tree_flatten(sk.tree_mask(layer))\n", " self.treedef = treedef\n", " for leaf in leaves:\n", - " # create a keras variable for each leaf\n", - " variable = Variable(initializer=leaf, trainable=not sk.is_nondiff(leaf))\n", - " variable._value = leaf\n", - " # add the variable to the keras layer so it can be tracked\n", + " variable = keras.Variable(initializer=leaf, trainable=is_trainable(leaf))\n", " self._track_variable(variable)\n", " # mark the layer as built\n", " self.built = True\n", @@ -87,14 +82,14 @@ " def call(self, x):\n", " \"\"\"Applies the layer to the input\"\"\"\n", " # convert the keras variables to jax arrays to be used in serket\n", - " leaves = jax.tree_map(jnp.array, self.trainable_variables)\n", + " leaves = jtu.tree_map(jnp.array, self.trainable_variables)\n", " # unflatten the layer with the updated leaves\n", - " layer = jax.tree_util.tree_unflatten(self.treedef, leaves)\n", + " layer = jtu.tree_unflatten(self.treedef, leaves)\n", " # apply the layer after unmasking it\n", " return sk.tree_unmask(layer)(x)\n", "\n", - " def to_serket(self):\n", - " \"\"\"Converts the keras layer to a serket layer\"\"\"\n", + " @property\n", + " def model(self):\n", " leaves = jax.tree_map(jnp.array, self.trainable_variables)\n", " layer = jax.tree_util.tree_unflatten(self.treedef, leaves)\n", " return sk.tree_unmask(layer)" @@ -109,7 +104,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -135,7 +130,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -143,214 +138,214 @@ "output_type": "stream", "text": [ "Epoch 1/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 42ms/step - loss: 1.1833\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 51ms/step - loss: 11.4385\n", "Epoch 2/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 0.1672\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 451us/step - loss: 2.3039\n", "Epoch 3/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - loss: 0.1348\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 416us/step - loss: 2.5281\n", "Epoch 4/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - loss: 0.1875\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 367us/step - loss: 0.8995\n", "Epoch 5/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 0.1392\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 473us/step - loss: 1.5571\n", "Epoch 6/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - loss: 0.0887\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 486us/step - loss: 0.7577\n", "Epoch 7/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 0.0452\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 398us/step - loss: 0.2899\n", "Epoch 8/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - loss: 0.0333\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 344us/step - loss: 0.4642\n", "Epoch 9/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 0.0285\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 341us/step - loss: 0.2811\n", "Epoch 10/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 0.0281\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 391us/step - loss: 0.2261\n", "Epoch 11/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 994us/step - loss: 0.0184\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 378us/step - loss: 0.1362\n", "Epoch 12/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 0.0111\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 379us/step - loss: 0.1101\n", "Epoch 13/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 0.0104\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 375us/step - loss: 0.0924\n", "Epoch 14/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 0.0090\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 411us/step - loss: 0.0785\n", "Epoch 15/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 0.0064 \n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 395us/step - loss: 0.0810\n", "Epoch 16/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - loss: 0.0061\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 389us/step - loss: 0.0503\n", "Epoch 17/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 0.0047\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 346us/step - loss: 0.0394\n", "Epoch 18/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - loss: 0.0042\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 318us/step - loss: 0.0465\n", "Epoch 19/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0035 \n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 660us/step - loss: 0.0246\n", "Epoch 20/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0036\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 431us/step - loss: 0.0224\n", "Epoch 21/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.0032\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 389us/step - loss: 0.0157\n", "Epoch 22/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.0027\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 357us/step - loss: 0.0126\n", "Epoch 23/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - loss: 0.0028\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 417us/step - loss: 0.0115\n", "Epoch 24/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 0.0025\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 347us/step - loss: 0.0109\n", "Epoch 25/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0029\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 418us/step - loss: 0.0081\n", "Epoch 26/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - loss: 0.0022\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 402us/step - loss: 0.0069\n", "Epoch 27/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 0.0024\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 331us/step - loss: 0.0060\n", "Epoch 28/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0022\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 463us/step - loss: 0.0059\n", "Epoch 29/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 918us/step - loss: 0.0019\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 361us/step - loss: 0.0060\n", "Epoch 30/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 0.0018\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 350us/step - loss: 0.0049\n", "Epoch 31/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 0.0021\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 364us/step - loss: 0.0059\n", "Epoch 32/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 0.0018\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 398us/step - loss: 0.0059\n", "Epoch 33/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.0018\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 542us/step - loss: 0.0057\n", "Epoch 34/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 0.0016\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 399us/step - loss: 0.0048\n", "Epoch 35/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 0.0018\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 407us/step - loss: 0.0051\n", "Epoch 36/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.0016\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 350us/step - loss: 0.0047\n", "Epoch 37/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0016\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 412us/step - loss: 0.0049\n", "Epoch 38/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 0.0016\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 397us/step - loss: 0.0056\n", "Epoch 39/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 0.0016\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 333us/step - loss: 0.0043\n", "Epoch 40/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 0.0018\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 348us/step - loss: 0.0050\n", "Epoch 41/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - loss: 0.0014\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 480us/step - loss: 0.0047\n", "Epoch 42/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.0017\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 419us/step - loss: 0.0038\n", "Epoch 43/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 0.0012\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 369us/step - loss: 0.0041\n", "Epoch 44/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 0.0014\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 419us/step - loss: 0.0038\n", "Epoch 45/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 0.0014\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 562us/step - loss: 0.0038\n", "Epoch 46/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0013\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 368us/step - loss: 0.0039\n", "Epoch 47/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - loss: 0.0013\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 528us/step - loss: 0.0038\n", "Epoch 48/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 0.0013\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 600us/step - loss: 0.0039\n", "Epoch 49/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0012\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 437us/step - loss: 0.0034\n", "Epoch 50/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0012 \n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 349us/step - loss: 0.0034\n", "Epoch 51/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - loss: 0.0011\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 502us/step - loss: 0.0040\n", "Epoch 52/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 0.0010 \n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 437us/step - loss: 0.0036\n", "Epoch 53/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 0.0011 \n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 432us/step - loss: 0.0034\n", "Epoch 54/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.0011 \n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 435us/step - loss: 0.0041\n", "Epoch 55/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0010 \n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 401us/step - loss: 0.0035\n", "Epoch 56/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0011\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 381us/step - loss: 0.0034\n", "Epoch 57/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 0.0010 \n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 386us/step - loss: 0.0039\n", "Epoch 58/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 9.0331e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 383us/step - loss: 0.0034\n", "Epoch 59/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 9.0483e-04 \n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 340us/step - loss: 0.0032\n", "Epoch 60/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - loss: 9.2253e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 656us/step - loss: 0.0043\n", "Epoch 61/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 9.5253e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 429us/step - loss: 0.0032\n", "Epoch 62/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 8.2192e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 393us/step - loss: 0.0039\n", "Epoch 63/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 9.1762e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 382us/step - loss: 0.0038\n", "Epoch 64/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 9.1392e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 371us/step - loss: 0.0029\n", "Epoch 65/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - loss: 9.3572e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 359us/step - loss: 0.0034\n", "Epoch 66/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 8.1019e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 399us/step - loss: 0.0035\n", "Epoch 67/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 7.8570e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 436us/step - loss: 0.0028\n", "Epoch 68/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 8.2580e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 435us/step - loss: 0.0030\n", "Epoch 69/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 9.1640e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 376us/step - loss: 0.0031\n", "Epoch 70/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 9.3649e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 379us/step - loss: 0.0031\n", "Epoch 71/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 7.5422e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 420us/step - loss: 0.0023\n", "Epoch 72/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 8.0585e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 367us/step - loss: 0.0030\n", "Epoch 73/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - loss: 8.5760e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 343us/step - loss: 0.0031\n", "Epoch 74/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 8.8939e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 454us/step - loss: 0.0025\n", "Epoch 75/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - loss: 7.5726e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 422us/step - loss: 0.0028\n", "Epoch 76/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - loss: 7.8019e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 374us/step - loss: 0.0023\n", "Epoch 77/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 9.2851e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 351us/step - loss: 0.0023\n", "Epoch 78/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 8.2584e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 406us/step - loss: 0.0024\n", "Epoch 79/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 6.7113e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 400us/step - loss: 0.0025\n", "Epoch 80/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 8.4668e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 395us/step - loss: 0.0027\n", "Epoch 81/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 6.4966e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 392us/step - loss: 0.0025\n", "Epoch 82/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - loss: 8.2091e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 383us/step - loss: 0.0029\n", "Epoch 83/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - loss: 8.8960e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 369us/step - loss: 0.0022\n", "Epoch 84/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - loss: 8.2646e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 413us/step - loss: 0.0024\n", "Epoch 85/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 7.7597e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 395us/step - loss: 0.0022\n", "Epoch 86/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 6.6040e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 341us/step - loss: 0.0025\n", "Epoch 87/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 9.0697e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 420us/step - loss: 0.0023\n", "Epoch 88/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 8.0793e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 592us/step - loss: 0.0022\n", "Epoch 89/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - loss: 6.9824e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 415us/step - loss: 0.0020\n", "Epoch 90/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 7.3690e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 411us/step - loss: 0.0016 \n", "Epoch 91/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 7.9092e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 366us/step - loss: 0.0021\n", "Epoch 92/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 6.0787e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 432us/step - loss: 0.0020\n", "Epoch 93/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - loss: 6.3934e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 483us/step - loss: 0.0017\n", "Epoch 94/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 8.0965e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 762us/step - loss: 0.0023\n", "Epoch 95/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 6.9563e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 639us/step - loss: 0.0017\n", "Epoch 96/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 5.9669e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 478us/step - loss: 0.0020\n", "Epoch 97/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 11ms/step - loss: 6.9216e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 582us/step - loss: 0.0020\n", "Epoch 98/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 6.4303e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 652us/step - loss: 0.0017\n", "Epoch 99/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - loss: 6.6465e-04\n", + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 759us/step - loss: 0.0017\n", "Epoch 100/100\n", - "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - loss: 5.8396e-04\n" + "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 580us/step - loss: 0.0019\n" ] }, { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 5, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -359,10 +354,11 @@ "sk_model = sk.Sequential(\n", " Linear(1, 20, key=jr.PRNGKey(0)),\n", " jax.nn.tanh,\n", - " Linear(20, 1, key=jr.PRNGKey(1)),\n", + " Linear(20, 15, key=jr.PRNGKey(1)),\n", ")\n", "\n", - "model = keras.Sequential([Serket2Keras(sk_model, name=\"serket\")])\n", + "# use serket with keras model\n", + "model = keras.Sequential([Serket2Keras(sk_model, name=\"serket\"), keras.layers.Dense(1)])\n", "\n", "\n", "model.compile(\n", @@ -384,37 +380,39 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "Sequential(\n", + " layers=(\n", + " Linear(\n", + " in_features=1, \n", + " out_features=20, \n", + " weight=f32[1,20](μ=-0.25, σ=0.94, ∈[-1.76,1.72]), \n", + " bias=f32[20](μ=-0.05, σ=0.91, ∈[-2.14,1.75])\n", + " ), \n", + " jit(tanh(x)), \n", + " Linear(\n", + " in_features=20, \n", + " out_features=15, \n", + " weight=f32[20,15](μ=0.01, σ=0.94, ∈[-2.31,2.37]), \n", + " bias=f32[15](μ=0.09, σ=1.16, ∈[-1.60,2.25])\n", + " )\n", + " )\n", + ")" ] }, - "execution_count": 6, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" } ], "source": [ "# take the serket layer from the keras layer at the end\n", - "sk_model = model.layers[0].to_serket()\n", - "\n", - "plt.plot(x, y, label=\"data\")\n", - "plt.plot(x, sk_model(x), label=\"serket model\")\n", - "plt.legend()" + "model.layers[0].model" ] } ], @@ -434,7 +432,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.0" + "version": "3.12.2" }, "orig_nbformat": 4 },