Skip to content

Instantly share code, notes, and snippets.

@lhk
Created June 9, 2017 16:39
Show Gist options
  • Save lhk/5943fa09922693a0fbbbf8dc9d1b05c0 to your computer and use it in GitHub Desktop.
Save lhk/5943fa09922693a0fbbbf8dc9d1b05c0 to your computer and use it in GitHub Desktop.
Tensorflow, including numerical derivative into graph
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np\n",
"import tensorflow as tf\n",
"import matplotlib.pyplot as plt\n",
"\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# let's take a simple regression task\n",
"m=5\n",
"\n",
"x=np.linspace(0,10,100)\n",
"y=m*x + np.random.randn(*x.shape)*2"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7f6bc00c6d50>]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nRK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6bc019dfd0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure()\n",
"plt.plot(x,y, \".\")"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"val = tf.placeholder(tf.float32)\n",
"w=tf.Variable(1.)\n",
"b=tf.Variable(1.)\n",
"\n",
"out=w*val + b\n",
"\n",
"c=tf.placeholder(tf.float32)\n",
"\n",
"loss = c*out\n",
"\n",
"train_step=tf.train.GradientDescentOptimizer(1e-4).minimize(loss)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"sess=tf.InteractiveSession()\n",
"sess.run(tf.initialize_all_variables())"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"1.0"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sess.run(out, feed_dict={val:x[0]})"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def mse(true, pred):\n",
" error=true-pred\n",
" square=error**2\n",
" mean=square.mean()\n",
" return mean"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# start by taking a random sample\n",
"# we have to run the forward pass once, to get the output\n",
"idx=np.random.randint(0, len(x))\n",
"sample_x=x[idx]\n",
"sample_y=y[idx]\n",
"pred_y=sess.run(out, feed_dict={val:sample_x})\n",
"\n",
"for i in range(1000):\n",
" # we reuse the last output to get the derivative\n",
" # insert numerical derivative here\n",
" # I've made this easy for me, output is a scalar\n",
" eps=1e-4\n",
" der=(mse(sample_y, pred_y+eps)-mse(sample_y, pred_y-eps))/(2*eps)\n",
"\n",
" # this is the optimization: evaluate output and training in the same step\n",
" # which might be problematic\n",
" # output is evaluated with updated weights\n",
" # the derivative should be at this NEW output\n",
" # but the weights are updated with the derivative from the LAST output\n",
" # works fine for simple linear regression\n",
" pred_y, _ = sess.run([out, train_step], feed_dict={val:sample_x, c:der})\n",
" \n",
" # we want to look at more than just one sample\n",
" # everytime a new sample is taken, we need to do a forward pass without derivative\n",
" if i%5==0:\n",
" idx=np.random.randint(0, len(x))\n",
" sample_x=x[idx]\n",
" sample_y=y[idx]\n",
" pred_y=sess.run(out, feed_dict={val:sample_x})"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"4.8433499"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sess.run(w)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"predictions=np.empty_like(y)\n",
"for i in range(len(x)):\n",
" predictions[i] = sess.run(out, feed_dict={val:x[i]})"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7f6ba5607bd0>]"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nAUDSWV1mEBER8UZIhQZ3JaVVV0Jc0PQCJg+fzCPDH6Fds3amNgUFERER74RcaDh99jSvfv0qM5bP\nqHRPiB7RPZg2ahpJQ5Jo1qhZgHooIiJSP4VUaJiXO4+3P36bg6cOmrYP6TCEtIQ0brv0thorIURE\nRMQ7IXWGfXH1i9Dp/Ovrel5HWkIa1/S4pvyeECIiImKPkAoNAA0iGnBH/ztwxDsY0nFIoLsjIiIS\nNkIqNNx52Z385d6/lFdCiIiIiP8Ew10uHwZ+BE4Dq4HRVe2YmpCqwCAiIhIggQ4NdwIzgf8BBgNf\nAB8AXQLZKREREaks0KFhGvASkAlsAqYCO4FJgeyUiIiIVBbI0BAFxAJLK2xfCsT7vzsiIiJSnUCG\nhnZAA2B/he0HgA7+746IiIhUJ6SqJ5KTk4mOjjZtS0xMJDExMUA9EhERCR5ZWVlkZWWZthUUFPjs\n+IFcESkKOAn8Eljktn02MBC42m1bLJCbm5tLbGys/3ooIiIS4vLy8oiLiwOIA/LqcqxAXp4oAnKB\nMRW2Xwfk+L87IiIiUp1AX554GliAsT7DCmAicBHwQiA7JSIiIpUFOjT8A7gA+B3QEVgP3IhRdiki\nIiJBJNChAeD5soeIiIgEsUAv7uS1pCTo08d4FhEREfuFZGhISoIlS2DzZuNZwUFERMR+IRkasrMh\nP9/4OT/feC0iIiL2CsnQkJAAMTHGzzExxmsRERGxV0iGhsxMGDsWevc2njMzA90jERGR+i8Yqie8\noqAgIiLiXyE50iAiIiL+p9AgIiIilig0iIiIiCUKDSIiImKJQoOIiIhYotAgIiIilig0iIiIiCUK\nDSIiImKJQoOIiIhYotAgIiIilig0iIiIiCUKDSIiImKJQoOIiIhYotAgIiIilig0iIiIiCUKDSIi\nImKJQoOIiIhYotAgIiIilig0iIiIiCUKDSIiImKJQoOIiIhYotAgIiIilig0iIiIiCUKDSIiImKJ\nQoOIiIhYotAgIiIilig0SJWysrIC3YWwo8/c//SZ+58+89BlV2j4LyAHOAUcqWKfrsBi4ASQD8wG\nGtnUH/GC/mH7nz5z/9Nn7n/6zEOXXaGhEfB3YG4V7Q2A94GmQAJwF3AbMMOm/oiIiEgdNbTpuE+W\nPY+von0M0A+4DthXti0FeBV4HGP0QURERIJIoOY0jALWcz4wACwFGgNxAemRiIiIVMuukYaadAD2\nV9h2BCgqa/No48aNdvZJKigoKCAvLy/Q3Qgr+sz9T5+5/+kz969AnTufBEpreMRWeM94PE+EnAd8\n6GF7IXCnh+0dgV2ASw899NBDDz30qPVjF8a5tE5qM9LwDLCwhn22WzzWXmB4hW1tgCjMlyzc9x+G\nD/7AIiIiYWhv2SOojcfzSMNPgWKgvdu2O4HTQAv7uyUiIiLBoiswGPgdcAwYVPa6eVl7JLAO+Khs\n+0+AHRhrNYiIiEgYeZXz8xxK3J6vcNunC8biTieBg8AstLiTiIiIiIiIiIiIiIiIiIiIhJaHgR8x\nqitWA6MD25167bfAKowJrPuBd4DeAe1R+PkNxjygmYHuSD3XGXgDY07VSWANldeaEd9pBPwF4//y\nU8D3wH8DEYHsVD1zBcZcwd0Y/4fc7GGfJ8vaTwHLgEv91Tl/uRM4AyQBfTD+Iz2OMZFSfO8D4D6M\ne4MMxPgLuA1oFsA+hZNhwA/A18DTAe5LfdYG4+/1y8BQjIqvq4GeAexTffd7jDsa34Dxed+G8eXk\nsUB2qp75KfBH4BaM0PDzCu1pQEFZe38gCyNA1KulDlYCz1XY9i3w5wD0JRy1w/jLp9Ed+7UANgHX\nYHwDUGiwz1+BzwLdiTCzGJhfYdvbwGsB6Es4qBgaIjAWd3K4bYvCWEtpotWDBuqGVVZFYQwXLq2w\nfSkQ7//uhKXosufDAe1FeHgOWAJ8goZs7fZzIBd4C+MyXB7wQEB7VP8tAa4FepW9HgQkAP8KWI/C\nSw+MBRXdz6dFGOHZ8vk0UDessqod0IDKN7c6QDU3thKficC4HPQFxuiO2OcujIXOhpW9dgWwL+Gg\nJzAJmAH8L8ay9nMw/hN9PYD9qs9eBLpjjKYVY/zf/jjw9wD2KZycO2d6Op92tXqQYA8NEljPYlz3\n0qUJe3XBWA31WoyTFhiBTaMN9okEvgKeKHu9FrgMeAiFBrs8hnFrgbuADcAQjEX99qLPPNDqzZeU\nKOAslWeAzsa45iv2eQbjBmTdAt2RMHBu0tJZt8e5VVSLUHiwwzaMu+26m4RxJ0Cxx36MSjh3/wUE\n5r7N9V/FOQ09y7YNqrDfIuAVqwcN9jkNRRjXHcdU2H4dkOP/7oSFCIwRhlswJuRZvXOpeO8/GN9y\nB3H+Pi2rMcoBB1OPvgUEkWygb4VtvTHChNgjAiMIuytFodhffsS4i7T7+TQKuJJ6dj69A6PkcgJG\nGeBMjDIdlVzaYy7GbNorMK6BnXs0CWSnwtCnaJ0GOw3F+FLyW+AS4G7gBJAYyE7Vc/OAncCNGHMb\nbsW4nv6XAPapvmmO8UVjMEYgSy77+dz5MhXj//dbML6oLMQYXWte6UghbhJGSirEWHhI19jt436T\nMffHfYHsVBhSyaX9bsK42+5pjGvs9we2O/VecyCD84s7bcVYU0Bz63znKirfLLIUyHTb5/fAHoy/\n9/VycScRERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERHx7P8B\nn0mXaQusCVEAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6bc017d750>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure()\n",
"plt.plot(x,y, \".\")\n",
"plt.plot(x,predictions, linewidth=2)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment