{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Deep Learning Experiment - One unit network"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We create a network that consists of one unit only. The input data are numbers between 0 and 1. The unit will learn to classify high numbers (>=0.5) and low numbers (<0.5)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Training data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The training data X is a linear array of 100 numbers between 0 and 1. Numbers below 0.5 are labelled 0 and numbers equal to and above 0.5 are labelled 1 in y. The input data is shuffeled to be in random order."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0.51 0.21 0.7 0.75 0. 0.4 0.95 0.99 0.81 0.48 0.22 0.78 0.91 0.45\n",
" 0.25 0.94 0.89 0.98 0.29 0.41 0.07 0.26 0.34 0.11 0.01 0.68 0.74 0.85\n",
" 0.72 0.32 0.09 0.15 0.46 0.04 0.6 0.66 0.42 0.88 0.27 0.36 0.86 0.02\n",
" 0.14 0.49 0.8 0.62 0.61 0.13 0.96 0.83 0.53 0.16 0.55 0.3 0.58 0.79\n",
" 0.33 0.28 0.9 0.57 0.97 0.82 0.06 0.71 0.92 0.19 0.67 0.23 0.05 0.87\n",
" 0.17 0.24 0.43 0.03 0.56 0.93 0.35 0.5 0.54 0.52 0.65 0.69 0.08 0.37\n",
" 0.84 0.63 0.38 0.76 0.44 0.47 0.31 0.77 0.59 0.18 0.1 0.64 0.39 0.73\n",
" 0.2 0.12]\n",
"[1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 1 1 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 1 1 0\n",
" 1 0 0 1 0 0 0 1 1 1 0 1 1 1 0 1 0 1 1 0 0 1 1 1 1 0 1 1 0 1 0 0 1 0 0 0 0\n",
" 1 1 0 1 1 1 1 1 0 0 1 1 0 1 0 0 0 1 1 0 0 1 0 1 0 0]\n"
]
}
],
"source": [
"import numpy as np\n",
"X = np.array(list(range(0,100,1)))/100\n",
"y = (X>=0.5)*1\n",
"seed = np.random.randint(0, 2**(32 - 1) - 1) \n",
"rstate = np.random.RandomState(seed)\n",
"rstate.shuffle(X)\n",
"rstate = np.random.RandomState(seed)\n",
"rstate.shuffle(y)\n",
"print(X)\n",
"print(y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Creating the network"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The network has one number as input. It consists of one unit that produces an output. The only unit uses the relu-activation function. "
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Using TensorFlow backend.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Model: \"sequential_1\"\n",
"_________________________________________________________________\n",
"Layer (type) Output Shape Param # \n",
"=================================================================\n",
"dense_1 (Dense) (None, 1) 2 \n",
"=================================================================\n",
"Total params: 2\n",
"Trainable params: 2\n",
"Non-trainable params: 0\n",
"_________________________________________________________________\n"
]
},
{
"data": {
"image/svg+xml": [
""
],
"text/plain": [
""
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from keras.models import Sequential\n",
"from keras.layers import Dense\n",
"from IPython.display import SVG\n",
"from keras.utils import model_to_dot\n",
"\n",
"model = Sequential()\n",
"model.add(Dense(1, input_dim=(1), activation='relu'))\n",
"model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])\n",
"model.summary()\n",
"SVG(model_to_dot(model, show_shapes=True, show_layer_names=True, dpi=65).create(prog='dot', format='svg'))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The model only has two parameters the weight of the only connection from the input to the unit and the bias of the only unit."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[array([[1.2196743]], dtype=float32), array([-0.08796682], dtype=float32)]"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model.get_weights()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Traininig"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We use 25% of the numbers for validation and train the network with the remaining 75%."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.32507207095623014 Accuracy: 1.0\n",
"CPU times: user 2.23 s, sys: 170 ms, total: 2.4 s\n",
"Wall time: 1.72 s\n"
]
}
],
"source": [
"%%time\n",
"history = model.fit(X, y, validation_split=0.25, epochs=300, batch_size=16, verbose=0)\n",
"print(\"Loss: \", history.history['val_loss'][-1], \"Accuracy: \", history.history['val_accuracy'][-1])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We plot the history of the validation accuracy and loss."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"plt.figure(figsize = (15, 4))\n",
"plt.subplot(1,2,1)\n",
"plt.plot(history.history['accuracy'])\n",
"plt.plot(history.history['val_accuracy'])\n",
"plt.title('Model accuracy')\n",
"plt.ylabel('Accuracy')\n",
"plt.xlabel('Epoch')\n",
"plt.legend(['Train', 'Test'], loc='lower right')\n",
"\n",
"plt.subplot(1,2,2)\n",
"plt.plot(history.history['loss'])\n",
"plt.plot(history.history['val_loss'])\n",
"plt.title('Model loss')\n",
"plt.ylabel('Loss')\n",
"plt.xlabel('Epoch')\n",
"plt.legend(['Train', 'Test'], loc='upper right')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## The output of the unit"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If the training worked correctly, the classification should 0 for inputs beloww 0.5 and 1 for inputs equal to or above 0.5. Since we use the relu-activation the predictions are not between 0 and 1. We plot the classifications and the predications for input values from 0 to 1 with with a step of one 1/1000.\n",
"\n",
"The predications should be a line that goes through (0.5, 0.5)."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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fPBBRo0axdtvv82rr75as7Y4CBqMy0LrgQeLG81F98znmVf+WtF97rnjllxw7F5dbrNo0SLGjBnDyJEjeeKJJ9h99925+eabAZgwYQLTpk1j1KhR3HXXXYwbN4758+cD8O677zJ27Fjeeust1qxZw6WXXsrYsWM3ub/+/fv36lh8aqiB3P/c6xx55SweeO4Nzj16D35+2iEOgVpyD8wSeO6555g0aRLz5s1jyy235LrrrgNg9OjRzJo1i/b2dqZNm8b48eM3vKZfv3786le/4vHHH+f+++/n61//+obTSJvaX2+4R9AAXBZaZ3xBWcPp7pt7mnbaaScOPfRQAD73uc9x9dVXA9C3b19GjRrFL37xC9577z1aWlo2vCYiOPfcc5k1axZ9+vTh5Zdf5rXXXtvk/s4666xetdFBUOdcFlrP3COw7nUcuytdnjBhAscffzwXXnjhRttMnTqVN954g8cee4ympiZaWlo2XCHd1f56yqeG6pRvIl/P3COw5BYvXszDDz8MwG233caoUX+7/9Zhhx3Gt771LU466aSNXvPOO++w3Xbb0dTUxP33389LL72UaH895SCoQy4LNcuOESNGcNNNN7HvvvuybNkyvvSlL21YJ4mzzjqLwYM3/v3+7Gc/y5w5c2htbWXq1KnsscceifbXUz41VEdcFtogfEGZlaFPnz5Mnjx5o+ceeOCBTrd99913ARg8ePCGb/2lFi1a1On+estBUCdcFmpmteIgqAPrZwt9Z+UazxbaUPxvZF1raWnh6aefrtv9recgqCGXhTYqDxZbtjgIasRloRngMQLLCAdBlXm20AzwBWWWMQ6CKvJN5LPGPQLLBgdBFbgsNGvcI7CeufDCCxkwYECvp4SoNAdBylwWamb1zkGQIpeFZpQvKGs8954Df3mqsvvcfh846vIuN7n55pu54oorkMS+++7LrrvuumHdT37yE6ZMmcLq1avZbbfduOWWW+jfvz933HEHF110EX379mWrrbZi1qxZzJ8/n4kTJ7J69WrWrVvHnXfeyfDhwyt2KJ5iIgXvrW7nO3c/zcSfzWbr/k3c/eVDmfSxXR0CZjkyf/58LrvsMmbOnMncuXO56qqrNlo/btw4Zs+ezdy5cxkxYgQ//elPAbj44ou57777mDt3LtOnTwdg8uTJnHnmmTz55JPMmTOHoUOHVrSt7hFUmMtC82D9GIGDvWF08809DTNnzuSEE07YMI/QNttss9H6p59+mvPOO4+3336bd999lyOPPBKAQw89lFNOOYUTTzyRcePGAfDRj36Uyy67jLa2NsaNG1fR3gCk3COQNEbSc5IWSDqnk/WSdHVx/TxJB6bZnjR5tlAzKxURXRaEnHLKKVxzzTU89dRTXHDBBRummZ48eTKXXnopS5YsYf/992fp0qWcfPLJTJ8+nS222IIjjzySmTNnVrStqQWBpL7AtcBRwJ7ASZL27LDZUcDw4p9JwI/Tak+aFr25wrOF5pHHCKwLo0eP5vbbb2fp0qUALFu2bKP1y5cvZ4cddmDNmjVMnTp1w/MvvvgiI0eO5OKLL2bw4MEsWbKEhQsXsssuu/DVr36Vz3zmM8ybN6+ibU3z1NDBwIKIWAggaRowFnimZJuxwM1RuAfbI5IGSdohIip+F+d5D9zJlrMuqPRuAVjTHnxPsN0HP8DAt5rQz1J5G6sXK96sdQusAey11158+9vf5vDDD6dv374ccMABG92F7JJLLmHkyJHsvPPO7LPPPixfvhyAb3zjG7zwwgtEBKNHj2a//fbj8ssv59Zbb6WpqYntt9+e888/v6JtVaR0laSkE4AxEXFacfnzwMiIOKNkm/8ALo+IPxaX/xs4OyLmdNjXJAo9Bpqbmz9SepOGpP5n9u9Y+furut+wB5r69mG37QawhU8D5ce2w2H0d2rdCuvCs88+y4gRI2rdjJro7NglPRYRrZ1tn2aPoLN+c8fUSbINETEFmALQ2trao+Ta46BPwEGf6MlLzcwyLc3B4jZgp5LlocArPdjGzMxSlGYQzAaGSxomaXNgAjC9wzbTgS8Uq4cOAd5JY3zAzPIprVPf9awnx5zaqaGIWCvpDOA+oC9wQ0TMl3R6cf1kYAZwNLAAWAlMTKs9ZpYv/fr1Y+nSpWy77ba5mdcrIli6dCn9+vUr63WpDRanpbW1NebMmdP9hmaWa2vWrKGtrW1DfX5e9OvXj6FDh9LUtPHMxrUaLDYzq5mmpiaGDRtW62Y0BM81ZGaWcw4CM7OccxCYmeVcww0WS3oDKP/S4oLBQN7mB/Ax54OPOR96c8w7R8QHO1vRcEHQG5LmbGrUPKt8zPngY86HtI7Zp4bMzHLOQWBmlnN5C4IptW5ADfiY88HHnA+pHHOuxgjMzOzv5a1HYGZmHTgIzMxyLpNBIGmMpOckLZB0TifrJenq4vp5kg6sRTsrKcExf7Z4rPMkPSRpv1q0s5K6O+aS7Q6S1F68a15DS3LMko6Q9KSk+ZJ+X+02VlqC/9tbSbpH0tziMTf0LMaSbpD0uqSnN7G+8p9fEZGpPxSmvH4R2AXYHJgL7Nlhm6OBeyncIe0Q4E+1bncVjvkfgK2Lj4/KwzGXbDeTwpTnJ9S63VX4dx5E4b7gzcXl7Wrd7ioc87nA94qPPwgsAzavddt7ccwfAw4Ent7E+op/fmWxR3AwsCAiFkbEamAaMLbDNmOBm6PgEWCQpB2q3dAK6vaYI+KhiHiruPgIhbvBNbIk/84AXwHuBF6vZuNSkuSYTwbuiojFABHR6Med5JgDGKjCTQcGUAiCtdVtZuVExCwKx7ApFf/8ymIQDAGWlCy3FZ8rd5tGUu7xnErhG0Uj6/aYJQ0BjgcmV7FdaUry77w7sLWkByQ9JukLVWtdOpIc8zXACAq3uX0KODMi1lWneTVR8c+vLN6PoLNbEXWskU2yTSNJfDyS/pFCEIxKtUXpS3LMVwJnR0R7Ru5QleSYNwM+AowGtgAelvRIRDyfduNSkuSYjwSeBD4O7Ar8VtIfIuKvaTeuRir++ZXFIGgDdipZHkrhm0K52zSSRMcjaV/geuCoiFhapbalJckxtwLTiiEwGDha0tqIuLs6Tay4pP+334yIFcAKSbOA/YBGDYIkxzwRuDwKJ9AXSPozsAfwaHWaWHUV//zK4qmh2cBwScMkbQ5MAKZ32GY68IXi6PshwDsR8Wq1G1pB3R6zpGbgLuDzDfztsFS3xxwRwyKiJSJagF8C/7eBQwCS/d/+NXCYpM0k9QdGAs9WuZ2VlOSYF1PoASHpQ8CHgYVVbWV1VfzzK3M9gohYK+kM4D4KFQc3RMR8SacX10+mUEFyNLAAWEnhG0XDSnjM5wPbAtcVvyGvjQaeuTHhMWdKkmOOiGcl/RcwD1gHXB8RnZYhNoKE/86XADdKeorCaZOzI6Jhp6eWdBtwBDBYUhtwAdAE6X1+eYoJM7Ocy+KpITMzK4ODwMws5xwEZmY55yAwM8s5B4GZWc45CMy6IOmhFPbZIunkSu/XrKccBGZdiIh/SGG3LRQmhzOrCw4Csy5Ierf49xHFidx+Kel/JE0tznaJpEWSvifp0eKf3YrP31h6D4T1+wIup3D175OS/qXax2TWkYPALLkDgK8Be1KYH//QknV/jYiDKcyEeWU3+zkH+ENE7B8RP0ylpWZlcBCYJfdoRLQVpzh+ksIpnvVuK/n7o9VumFlvOAjMknu/5HE7G8/VFZ08Xkvxd6x4GmnzVFtn1kMOArPKGF/y98PFx4so3BsACneVaio+Xg4MrFrLzLqRudlHzWrkA5L+ROHL1UnF534C/FrSo8B/AyuKz88D1kqaC9zocQKrNc8+atZLkhYBrY089bHlm08NmZnlnHsEZmY55x6BmVnOOQjMzHLOQWBmlnMOAjOznHMQmJnl3P8HJA67OW2CyvIAAAAASUVORK5CYII=\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"values = np.array(list(range(0,1000))) / 1000\n",
"prediction = model.predict(values)\n",
"classPrediction = model.predict_classes(values)\n",
"# Plot training & validation accuracy values\n",
"plt.plot(values, prediction)\n",
"plt.plot(values, classPrediction)\n",
"plt.title('Prediction')\n",
"plt.ylabel('output')\n",
"plt.xlabel('input')\n",
"plt.legend(['pMap', 'class'], loc='lower right')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[array([[1.2196743]], dtype=float32), array([-0.08796682], dtype=float32)]"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"weights = model.get_weights()\n",
"weights"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The learned linear function is "
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'f(x) = -0.08796682208776474 + 1.2196743488311768 * x'"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"f\"f(x) = {weights[1][0]} + {weights[0][0][0]} * x\""
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.5218703523278236"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = weights[1][0]\n",
"m = weights[0][0][0]\n",
"a + m * 0.5 "
]
}
],
"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
}