Skip to content

Instantly share code, notes, and snippets.

@yukilab2
Created June 17, 2018 01:45
Show Gist options
  • Save yukilab2/8224225d95c0cb65dd5fe21e7b3a6d9d to your computer and use it in GitHub Desktop.
Save yukilab2/8224225d95c0cb65dd5fe21e7b3a6d9d to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Update https://stackoverflow.com/questions/24943991/change-grid-interval-and-specify-tick-labels-in-matplotlib/24953575 example\n",
"- for python3\n",
"- for variable names (better for me..)"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7ff6ef7632e8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"plt.figure(figsize =(12, 4))\n",
"ax1 = plt.subplot(1, 2, 1)\n",
"ax2 = plt.subplot(1, 2, 2)\n",
"\n",
"x = np.linspace(-1, 2, 30);\n",
"\n",
"ax1.plot(x, x*(1-x))\n",
"ax1.set_title('y = x*(1-x)')\n",
"ax1.grid(which='major',color='lightgray',linestyle='-')\n",
"\n",
"x = np.linspace(-10, 10, 40);\n",
"ax2.plot(x,1/(1+np.exp(-x)))\n",
"ax2.set_title('y = 1/(1+np.exp(-x))')\n",
"ax2.grid(which='major',color='lightgray',linestyle='-')"
]
},
{
"cell_type": "code",
"execution_count": 72,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Output dataset after training:\n",
"[[0.02206337]\n",
" [0.01798151]\n",
" [0.97918555]\n",
" [0.99952065]\n",
" [0.99940945]\n",
" [0.02206337]\n",
" [0.01798151]\n",
" [0.97447732]]\n",
"layer1 weights\n",
"[[ 7.6436591 ]\n",
" [-0.20873986]\n",
" [-3.79205407]]\n"
]
}
],
"source": [
"import numpy as np\n",
"\n",
"# sigmoid function\n",
"def nonlin(x,deriv=False):\n",
" if(deriv==True):\n",
" return x*(1-x)\n",
" return 1/(1+np.exp(-x))\n",
" \n",
"# input dataset\n",
"input_dataset = np.array([ [0,0,1],\n",
" [0,1,1],\n",
" [1,0,1],\n",
" [1,0,0],\n",
" [1,1,0],\n",
" [0,0,1],\n",
" [0,1,1],\n",
" [1,1,1] ])\n",
" \n",
"# output dataset \n",
"expecting_output = np.array([[0, 0, 1, 1, 1, 0, 0, 1]]).T\n",
"\n",
"# seed random numbers to make calculation\n",
"# deterministic (just a good practice)\n",
"np.random.seed(1)\n",
"\n",
"# initialize weights randomly with mean 0\n",
"synapse0_weights = 2*np.random.random((3,1)) - 1\n",
"\n",
"for iter in range(1000):\n",
"\n",
" # forward propagation\n",
" nn_layer0 = input_dataset\n",
" nn_layer1 = nonlin(np.dot(nn_layer0, synapse0_weights))\n",
"\n",
" # how much did we miss?\n",
" nn_layer1_error = expecting_output - nn_layer1\n",
"\n",
" \n",
" # multiply how much we missed by the \n",
" # slope of the sigmoid at the values in nn_layer1\n",
" nn_layer1_delta = nn_layer1_error * nonlin(nn_layer1,True)\n",
"\n",
" # update weights\n",
" synapse0_weights += np.dot(nn_layer0.T, nn_layer1_delta)\n",
"\n",
"print(\"Output dataset after training:\")\n",
"print(nn_layer1)\n",
"\n",
"print(\"layer1 weights\")\n",
"print(synapse0_weights)"
]
},
{
"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.6.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment