{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import tensorflow as tf\n",
"import pandas as pd\n",
"from numpy import array\n",
"import nengo\n",
"import numpy as np\n",
"import nengo_dl\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Dummy regression Dataset 3 inputs 1 output\n",
"#### build a model to predict y_test values given x_test values"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"x_train = array([[[0.16240086],\n",
" [0.13572511],\n",
" [0.12298894]],\n",
"\n",
" [[0.13573571],\n",
" [0.12298894],\n",
" [0.1394957 ]],\n",
"\n",
" [[0.12299854],\n",
" [0.1394957 ],\n",
" [0.16518061]],\n",
"\n",
" [[0.13950658],\n",
" [0.16518061],\n",
" [0.15289813]],\n",
"\n",
" [[0.1651935 ],\n",
" [0.15289813],\n",
" [0.14116833]],\n",
"\n",
" [[0.15291007],\n",
" [0.14116833],\n",
" [0.1374616 ]],\n",
"\n",
" [[0.14117935],\n",
" [0.1374616 ],\n",
" [0.12912672]],\n",
"\n",
" [[0.13747232],\n",
" [0.12912672],\n",
" [0.11594404]],\n",
"\n",
" [[0.1291368 ],\n",
" [0.11594404],\n",
" [0.13490303]],\n",
"\n",
" [[0.11595309],\n",
" [0.13490303],\n",
" [0.13712141]]])\n",
"\n",
"y_train = array([[[0.1394957 ]],\n",
"\n",
" [[0.16518061]],\n",
"\n",
" [[0.15289813]],\n",
"\n",
" [[0.14116833]],\n",
"\n",
" [[0.1374616 ]],\n",
"\n",
" [[0.12912672]],\n",
"\n",
" [[0.11594404]],\n",
"\n",
" [[0.13490303]],\n",
"\n",
" [[0.13712141]],\n",
"\n",
" [[0.14390409]]])\n",
"\n",
"x_test = array([[[0.16240086],\n",
" [0.13572511],\n",
" [0.12298894]],\n",
"\n",
" [[0.13573571],\n",
" [0.12298894],\n",
" [0.1394957 ]]])\n",
"\n",
"\n",
"y_test = array([[[0.46759614]],\n",
" [[0.46540604]]])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"import nengo\n",
"import tensorflow as tf\n",
"import numpy as np\n",
"import nengo_dl\n",
"import matplotlib.pyplot as plt\n",
"from tensorflow.keras import Input, Model\n",
"from tensorflow.keras.layers import Dense\n",
"import keras_lmu\n",
"\n",
"feature_num = x_train.shape[1]\n",
"\n",
"# attempted using different LMU layers\n",
"#https://www.nengo.ai/keras-lmu/api-reference.html\n",
"# using RNN wrapper\n",
"# lmu_layer = tf.keras.layers.RNN(\n",
"# keras_lmu.LMUCell(\n",
"# memory_d=1, # this is the dimension of the input to memory\n",
"# order=128, # how many legendre polynomials used to orthogonally represent the sliding window\n",
"# theta= feature_num, # number of timesteps \n",
"# hidden_cell=tf.keras.layers.SimpleRNNCell(212), # hidden dimension\n",
"# hidden_to_memory=False,\n",
"# memory_to_memory=False,\n",
"# input_to_hidden=True,\n",
"# kernel_initializer=\"ones\",\n",
"# )\n",
"# )\n",
"\n",
"# ##without RNN wrapper\n",
"lmu_layer = keras_lmu.LMU(\n",
" memory_d=1, # this is the dimension of the input to memory\n",
" order=128, # how many legendre polynomials used to orthogonally represent the sliding window\n",
" theta= feature_num, # number of timesteps \n",
" hidden_cell=tf.keras.layers.SimpleRNNCell(50), # hidden dimension\n",
"# hidden_to_memory=False,\n",
"# memory_to_memory=False,\n",
"# input_to_hidden=True,\n",
" kernel_initializer=\"ones\",\n",
" )\n",
"\n",
"\n",
"inputs = tf.keras.Input((3, 1))\n",
"# x = nengo_dl.Layer(tf.keras.layers.Conv1D(filters=64, kernel_size=2))(inputs, shape_in=(n_steps, n_features))\n",
"lmus = lmu_layer(inputs)\n",
"outputs = Dense(1)(lmus)\n",
"\n",
"model = tf.keras.Model(inputs=inputs, outputs=outputs)\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Normal(rate based) KerasLMU Trainning - works"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"# normally(before using converter) everything works well"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1/50\n",
"1/1 [==============================] - 1s 1s/step - loss: 0.0569\n",
"Epoch 2/50\n",
"1/1 [==============================] - 0s 8ms/step - loss: 0.0366\n",
"Epoch 3/50\n",
"1/1 [==============================] - 0s 11ms/step - loss: 0.0211\n",
"Epoch 4/50\n",
"1/1 [==============================] - 0s 6ms/step - loss: 0.0102\n",
"Epoch 5/50\n",
"1/1 [==============================] - 0s 7ms/step - loss: 0.0035\n",
"Epoch 6/50\n",
"1/1 [==============================] - 0s 10ms/step - loss: 5.5879e-04\n",
"Epoch 7/50\n",
"1/1 [==============================] - 0s 6ms/step - loss: 6.8588e-04\n",
"Epoch 8/50\n",
"1/1 [==============================] - 0s 8ms/step - loss: 0.0028\n",
"Epoch 9/50\n",
"1/1 [==============================] - 0s 7ms/step - loss: 0.0054\n",
"Epoch 10/50\n",
"1/1 [==============================] - 0s 6ms/step - loss: 0.0075\n",
"Epoch 11/50\n",
"1/1 [==============================] - 0s 8ms/step - loss: 0.0083\n",
"Epoch 12/50\n",
"1/1 [==============================] - 0s 8ms/step - loss: 0.0079\n",
"Epoch 13/50\n",
"1/1 [==============================] - 0s 8ms/step - loss: 0.0067\n",
"Epoch 14/50\n",
"1/1 [==============================] - 0s 7ms/step - loss: 0.0050\n",
"Epoch 15/50\n",
"1/1 [==============================] - 0s 8ms/step - loss: 0.0034\n",
"Epoch 16/50\n",
"1/1 [==============================] - 0s 7ms/step - loss: 0.0019\n",
"Epoch 17/50\n",
"1/1 [==============================] - 0s 9ms/step - loss: 9.5614e-04\n",
"Epoch 18/50\n",
"1/1 [==============================] - 0s 9ms/step - loss: 4.2327e-04\n",
"Epoch 19/50\n",
"1/1 [==============================] - 0s 8ms/step - loss: 2.9984e-04\n",
"Epoch 20/50\n",
"1/1 [==============================] - 0s 7ms/step - loss: 4.8126e-04\n",
"Epoch 21/50\n",
"1/1 [==============================] - 0s 8ms/step - loss: 8.4009e-04\n",
"Epoch 22/50\n",
"1/1 [==============================] - 0s 9ms/step - loss: 0.0013\n",
"Epoch 23/50\n",
"1/1 [==============================] - 0s 8ms/step - loss: 0.0016\n",
"Epoch 24/50\n",
"1/1 [==============================] - 0s 8ms/step - loss: 0.0019\n",
"Epoch 25/50\n",
"1/1 [==============================] - 0s 7ms/step - loss: 0.0020\n",
"Epoch 26/50\n",
"1/1 [==============================] - 0s 8ms/step - loss: 0.0019\n",
"Epoch 27/50\n",
"1/1 [==============================] - 0s 8ms/step - loss: 0.0017\n",
"Epoch 28/50\n",
"1/1 [==============================] - 0s 8ms/step - loss: 0.0015\n",
"Epoch 29/50\n",
"1/1 [==============================] - 0s 8ms/step - loss: 0.0012\n",
"Epoch 30/50\n",
"1/1 [==============================] - 0s 9ms/step - loss: 8.5105e-04\n",
"Epoch 31/50\n",
"1/1 [==============================] - 0s 8ms/step - loss: 5.9144e-04\n",
"Epoch 32/50\n",
"1/1 [==============================] - 0s 9ms/step - loss: 4.0336e-04\n",
"Epoch 33/50\n",
"1/1 [==============================] - 0s 8ms/step - loss: 2.9919e-04\n",
"Epoch 34/50\n",
"1/1 [==============================] - 0s 7ms/step - loss: 2.7623e-04\n",
"Epoch 35/50\n",
"1/1 [==============================] - 0s 7ms/step - loss: 3.1876e-04\n",
"Epoch 36/50\n",
"1/1 [==============================] - 0s 7ms/step - loss: 4.0215e-04\n",
"Epoch 37/50\n",
"1/1 [==============================] - 0s 7ms/step - loss: 4.9827e-04\n",
"Epoch 38/50\n",
"1/1 [==============================] - 0s 8ms/step - loss: 5.8122e-04\n",
"Epoch 39/50\n",
"1/1 [==============================] - 0s 8ms/step - loss: 6.3211e-04\n",
"Epoch 40/50\n",
"1/1 [==============================] - 0s 8ms/step - loss: 6.4180e-04\n",
"Epoch 41/50\n",
"1/1 [==============================] - 0s 8ms/step - loss: 6.1132e-04\n",
"Epoch 42/50\n",
"1/1 [==============================] - 0s 9ms/step - loss: 5.4998e-04\n",
"Epoch 43/50\n",
"1/1 [==============================] - 0s 8ms/step - loss: 4.7202e-04\n",
"Epoch 44/50\n",
"1/1 [==============================] - 0s 8ms/step - loss: 3.9281e-04\n",
"Epoch 45/50\n",
"1/1 [==============================] - 0s 8ms/step - loss: 3.2545e-04\n",
"Epoch 46/50\n",
"1/1 [==============================] - 0s 7ms/step - loss: 2.7849e-04\n",
"Epoch 47/50\n",
"1/1 [==============================] - 0s 8ms/step - loss: 2.5508e-04\n",
"Epoch 48/50\n",
"1/1 [==============================] - 0s 7ms/step - loss: 2.5330e-04\n",
"Epoch 49/50\n",
"1/1 [==============================] - 0s 9ms/step - loss: 2.6744e-04\n",
"Epoch 50/50\n",
"1/1 [==============================] - 0s 6ms/step - loss: 2.8988e-04\n"
]
}
],
"source": [
"model.compile(\n",
" loss=tf.losses.mse,\n",
"# changed from RMSprop() - the produce same results\n",
" optimizer=tf.optimizers.Adam(),\n",
"# metrics=[\"accuracy\"],\n",
")\n",
"epochs = 50\n",
"\n",
"result = model.fit(\n",
" x_train,\n",
" y_train,\n",
" epochs=epochs,\n",
"# validation_data=(x_test, y_test),\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"# Predicting using the model\n",
"y_pred = model.predict(np.array(x_test))"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"True\n",
"[[[0.46759614]]\n",
"\n",
" [[0.46540604]]]\n",
"Predicted\n",
"[[0.1406141 ]\n",
" [0.13146229]]\n"
]
}
],
"source": [
"print('True')\n",
"print(y_test)\n",
"print('Predicted')\n",
"print(y_pred)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Spiking KerasLMU Trainning Dosen't works"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"# when I try to convert the model conversion doesen't work"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\mizan\\anaconda3\\lib\\site-packages\\nengo_dl\\converter.py:327: UserWarning: Layer type LMU does not have a registered converter. Falling back to TensorNode.\n",
" f\"{error_msg + '. ' if error_msg else ''}\"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Build finished in 0:00:00 \n",
"Optimization finished in 0:00:00 \n",
"|# Constructing graph | 0:00:00\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\mizan\\anaconda3\\lib\\site-packages\\nengo_dl\\simulator.py:461: UserWarning: No GPU support detected. See https://www.nengo.ai/nengo-dl/installation.html#installing-tensorflow for instructions on setting up TensorFlow with GPU support.\n",
" \"No GPU support detected. See \"\n"
]
},
{
"ename": "AssertionError",
"evalue": "",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mAssertionError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[1;31m# When I try to verify it gives me an error\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[0mconverter\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnengo_dl\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mConverter\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmodel\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 4\u001b[1;33m \u001b[1;32massert\u001b[0m \u001b[0mconverter\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mverify\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\nengo_dl\\converter.py\u001b[0m in \u001b[0;36mverify\u001b[1;34m(self, training, inputs, atol, rtol)\u001b[0m\n\u001b[0;32m 236\u001b[0m \u001b[0minp_vals\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mreshape\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mbatch_size\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mn_steps\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m-\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mx\u001b[0m \u001b[1;32min\u001b[0m \u001b[0minp_vals\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 237\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 238\u001b[1;33m \u001b[1;32mwith\u001b[0m \u001b[0mSimulator\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mnet\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mminibatch_size\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mbatch_size\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0msim\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 239\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mtraining\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 240\u001b[0m keras_params = sum(\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\nengo_dl\\simulator.py\u001b[0m in \u001b[0;36m__init__\u001b[1;34m(self, network, dt, seed, model, device, unroll_simulation, minibatch_size, progress_bar)\u001b[0m\n\u001b[0;32m 523\u001b[0m \u001b[1;34m\"Constructing graph\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m\"Construction\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmax_value\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mNone\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 524\u001b[0m ) as progress:\n\u001b[1;32m--> 525\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_build_keras\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mprogress\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 526\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 527\u001b[0m \u001b[1;31m# initialize sim attributes\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\nengo\\utils\\magic.py\u001b[0m in \u001b[0;36m__call__\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 179\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mwrapper\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mwrapped\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0minstance\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 180\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 181\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mwrapper\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__wrapped__\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0minstance\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 182\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 183\u001b[0m \u001b[0minstance\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__wrapped__\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m\"__self__\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\nengo_dl\\simulator.py\u001b[0m in \u001b[0;36mwith_self\u001b[1;34m(wrapped, instance, args, kwargs)\u001b[0m\n\u001b[0;32m 48\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 49\u001b[0m \u001b[1;32mwith\u001b[0m \u001b[0mtf\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdevice\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0minstance\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtensor_graph\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdevice\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 50\u001b[1;33m \u001b[0moutput\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mwrapped\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 51\u001b[0m \u001b[1;32mfinally\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 52\u001b[0m \u001b[0mtf\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mkeras\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mbackend\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mset_floatx\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkeras_dtype\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\nengo_dl\\simulator.py\u001b[0m in \u001b[0;36m_build_keras\u001b[1;34m(self, progress)\u001b[0m\n\u001b[0;32m 546\u001b[0m \u001b[0minputs\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mlist\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mnode_inputs\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m+\u001b[0m \u001b[1;33m[\u001b[0m\u001b[0mn_steps\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 547\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 548\u001b[1;33m \u001b[0moutputs\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtensor_graph\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0minputs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mstateful\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mstateful\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mprogress\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mprogress\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 549\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 550\u001b[0m self.keras_model = tf.keras.Model(\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\tensorflow\\python\\keras\\engine\\base_layer.py\u001b[0m in \u001b[0;36m__call__\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 968\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0m_in_functional_construction_mode\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0minputs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0minput_list\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 969\u001b[0m return self._functional_construction_call(inputs, args, kwargs,\n\u001b[1;32m--> 970\u001b[1;33m input_list)\n\u001b[0m\u001b[0;32m 971\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 972\u001b[0m \u001b[1;31m# Maintains info about the `Layer.call` stack.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\tensorflow\\python\\keras\\engine\\base_layer.py\u001b[0m in \u001b[0;36m_functional_construction_call\u001b[1;34m(self, inputs, args, kwargs, input_list)\u001b[0m\n\u001b[0;32m 1106\u001b[0m \u001b[1;31m# Check input assumptions set after layer building, e.g. input shape.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1107\u001b[0m outputs = self._keras_tensor_symbolic_call(\n\u001b[1;32m-> 1108\u001b[1;33m inputs, input_masks, args, kwargs)\n\u001b[0m\u001b[0;32m 1109\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1110\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0moutputs\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\tensorflow\\python\\keras\\engine\\base_layer.py\u001b[0m in \u001b[0;36m_keras_tensor_symbolic_call\u001b[1;34m(self, inputs, input_masks, args, kwargs)\u001b[0m\n\u001b[0;32m 838\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mnest\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmap_structure\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkeras_tensor\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mKerasTensor\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0moutput_signature\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 839\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 840\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_infer_output_signature\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0minputs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0minput_masks\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 841\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 842\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0m_infer_output_signature\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0minputs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0minput_masks\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\tensorflow\\python\\keras\\engine\\base_layer.py\u001b[0m in \u001b[0;36m_infer_output_signature\u001b[1;34m(self, inputs, args, kwargs, input_masks)\u001b[0m\n\u001b[0;32m 876\u001b[0m \u001b[1;31m# overridden).\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 877\u001b[0m \u001b[1;31m# TODO(kaftan): do we maybe_build here, or have we already done it?\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 878\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_maybe_build\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0minputs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 879\u001b[0m \u001b[0minputs\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_maybe_cast_inputs\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0minputs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 880\u001b[0m \u001b[0moutputs\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mcall_fn\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0minputs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\tensorflow\\python\\keras\\engine\\base_layer.py\u001b[0m in \u001b[0;36m_maybe_build\u001b[1;34m(self, inputs)\u001b[0m\n\u001b[0;32m 2623\u001b[0m \u001b[1;31m# operations.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2624\u001b[0m \u001b[1;32mwith\u001b[0m \u001b[0mtf_utils\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmaybe_init_scope\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2625\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mbuild\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0minput_shapes\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;31m# pylint:disable=not-callable\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2626\u001b[0m \u001b[1;31m# We must set also ensure that the layer is marked as built, and the build\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2627\u001b[0m \u001b[1;31m# shape is stored since user defined build functions may not be calling\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\nengo_dl\\tensor_graph.py\u001b[0m in \u001b[0;36mbuild\u001b[1;34m(self, input_shape)\u001b[0m\n\u001b[0;32m 368\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 369\u001b[0m \u001b[1;31m# clear the results of previous build\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 370\u001b[1;33m \u001b[0munbuild\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mop\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfunc\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 371\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 372\u001b[0m \u001b[0mweights\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\nengo_dl\\tensor_graph.py\u001b[0m in \u001b[0;36munbuild\u001b[1;34m(layer)\u001b[0m\n\u001b[0;32m 332\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0msub\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mcompat\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msub_layers\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlayer\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 333\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msub\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtf\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mkeras\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlayers\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mLayer\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 334\u001b[1;33m \u001b[0munbuild\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msub\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 335\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 336\u001b[0m layer_ops = [\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\nengo_dl\\tensor_graph.py\u001b[0m in \u001b[0;36munbuild\u001b[1;34m(layer)\u001b[0m\n\u001b[0;32m 332\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0msub\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mcompat\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msub_layers\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlayer\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 333\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msub\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtf\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mkeras\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlayers\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mLayer\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 334\u001b[1;33m \u001b[0munbuild\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msub\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 335\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 336\u001b[0m layer_ops = [\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\nengo_dl\\tensor_graph.py\u001b[0m in \u001b[0;36munbuild\u001b[1;34m(layer)\u001b[0m\n\u001b[0;32m 318\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 319\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0munbuild\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlayer\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 320\u001b[1;33m \u001b[1;32massert\u001b[0m \u001b[0mlayer\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mbuilt\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 321\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 322\u001b[0m \u001b[1;31m# clear any losses attached to layer (they will be recreated in the\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mAssertionError\u001b[0m: "
]
}
],
"source": [
"# Converts a Keras model to a Nengo network composed of native Nengo objects.\n",
"# When I try to verify it gives me an error\n",
"converter = nengo_dl.Converter(model)\n",
"assert converter.verify()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"do_training = True\n",
"if do_training:\n",
" with converter.net:\n",
" nengo_dl.configure_settings(planner=nengo_dl.graph_optimizer.noop_planner)\n",
" with nengo_dl.Simulator(converter.net) as sim:\n",
" # run training\n",
" sim.compile(\n",
" optimizer=tf.optimizers.Adam(0.001),\n",
" loss=tf.losses.mse,\n",
"# metrics=[tf.metrics.sparse_categorical_accuracy],\n",
" )\n",
" sim.fit(\n",
" {converter.inputs[inputs]: x_train},\n",
" {converter.outputs[outputs]: y_train},\n",
"# validation_data=(\n",
"# {converter.inputs[inp]: test_images},\n",
"# {converter.outputs[dense]: test_labels},\n",
"# ),\n",
" epochs=1,\n",
" )\n",
"\n",
" # save the parameters to file\n",
" sim.save_params(\"./keras_to_snn_params\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 4
}