added benchmark notebooks
This commit is contained in:
1 parent
29a55be2ff
commit
fa4c4c57f0
3 files changed
+730
No files matched your search
@@ -0,0 +1,286 @@
|
|||||||
|
{
|
||||||
|
"cells": [
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 1,
|
||||||
|
"metadata": {
|
||||||
|
"collapsed": false,
|
||||||
|
"deletable": true,
|
||||||
|
"editable": true
|
||||||
|
},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"import matplotlib\n",
|
||||||
|
"%matplotlib inline\n",
|
||||||
|
"matplotlib.rcParams['figure.figsize'] = (20, 10)\n",
|
||||||
|
"matplotlib.rcParams['font.size'] = 24\n",
|
||||||
|
"matplotlib.rcParams['lines.linewidth'] = 5\n",
|
||||||
|
"matplotlib.rcParams['lines.markersize'] = 20\n",
|
||||||
|
"\n",
|
||||||
|
"import tensorflow as tf\n",
|
||||||
|
"from tensorflow.python.client import device_lib\n",
|
||||||
|
"\n",
|
||||||
|
"import time\n",
|
||||||
|
"import numpy as np\n",
|
||||||
|
"from matplotlib import pyplot\n",
|
||||||
|
"from collections import defaultdict\n",
|
||||||
|
"from ipy_table import make_table, set_row_style, set_column_style\n",
|
||||||
|
"from jupyter_progressbar import ProgressBar"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {
|
||||||
|
"deletable": true,
|
||||||
|
"editable": true
|
||||||
|
},
|
||||||
|
"source": [
|
||||||
|
"# Devices\n",
|
||||||
|
"\n",
|
||||||
|
"lists the devices found by tensorflow"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 2,
|
||||||
|
"metadata": {
|
||||||
|
"collapsed": false,
|
||||||
|
"deletable": true,
|
||||||
|
"editable": true
|
||||||
|
},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/html": [
|
||||||
|
"<table border=\"1\" cellpadding=\"3\" cellspacing=\"0\" style=\"border:black; border-collapse:collapse;\"><tr><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\"><b>name</b></td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\"><b>type</b></td></tr><tr><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">/device:CPU:0</td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">CPU</td></tr><tr><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">/device:GPU:0</td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">GPU</td></tr></table>"
|
||||||
|
],
|
||||||
|
"text/plain": [
|
||||||
|
"<ipy_table.ipy_table.IpyTable at 0x7f58b3ab14a8>"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 2,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"devices = device_lib.list_local_devices()\n",
|
||||||
|
"\n",
|
||||||
|
"make_table([[\"name\", \"type\"]] + [\n",
|
||||||
|
" [device.name, device.device_type]\n",
|
||||||
|
" for device in devices\n",
|
||||||
|
"])\n",
|
||||||
|
"set_row_style(0, bold=True)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {
|
||||||
|
"deletable": true,
|
||||||
|
"editable": true
|
||||||
|
},
|
||||||
|
"source": [
|
||||||
|
"# Use all devices once such that they are initialized"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 3,
|
||||||
|
"metadata": {
|
||||||
|
"collapsed": false,
|
||||||
|
"deletable": true,
|
||||||
|
"editable": true
|
||||||
|
},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"for device in devices:\n",
|
||||||
|
" with tf.device(device.name):\n",
|
||||||
|
" c = tf.constant(5.0)\n",
|
||||||
|
" x = tf.placeholder(tf.float32)\n",
|
||||||
|
" product = c * x\n",
|
||||||
|
"\n",
|
||||||
|
" with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as session:\n",
|
||||||
|
" result = session.run(product, feed_dict={x: 5.0})\n",
|
||||||
|
" assert result == 25.0, \"c * x for x == 5.0 should result in 25.0, but resulted in {} on device {} ({})\".format(\n",
|
||||||
|
" result, device.name, device.device_type)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"# Benchmark"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 4,
|
||||||
|
"metadata": {
|
||||||
|
"collapsed": false,
|
||||||
|
"deletable": true,
|
||||||
|
"editable": true
|
||||||
|
},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"start /device:CPU:0 10\n",
|
||||||
|
"start /device:GPU:0 10\n",
|
||||||
|
"start /device:CPU:0 20\n",
|
||||||
|
"start /device:GPU:0 20\n",
|
||||||
|
"start /device:CPU:0 50\n",
|
||||||
|
"start /device:GPU:0 50\n",
|
||||||
|
"start /device:CPU:0 100\n",
|
||||||
|
"start /device:GPU:0 100\n",
|
||||||
|
"start /device:CPU:0 1000\n",
|
||||||
|
"start /device:GPU:0 1000\n",
|
||||||
|
"start /device:CPU:0 5000\n",
|
||||||
|
"start /device:GPU:0 5000\n",
|
||||||
|
"start /device:CPU:0 10000\n",
|
||||||
|
"start /device:GPU:0 10000\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"results = defaultdict(list)\n",
|
||||||
|
"\n",
|
||||||
|
"matrix_sizes = list(map(int, [10, 20, 50, 100, 1000, 5000, 1e4]))\n",
|
||||||
|
"\n",
|
||||||
|
"for size in ProgressBar(matrix_sizes):\n",
|
||||||
|
" for device in devices:\n",
|
||||||
|
" print('start', device.name, size)\n",
|
||||||
|
" with tf.device(device.name):\n",
|
||||||
|
" A = tf.random_uniform(shape=(size, size), minval=0, maxval=1, dtype=tf.float32)\n",
|
||||||
|
" B = tf.random_uniform(shape=(size, size), minval=0, maxval=1, dtype=tf.float32)\n",
|
||||||
|
" product = tf.matmul(A, B)\n",
|
||||||
|
" \n",
|
||||||
|
" with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as session:\n",
|
||||||
|
" t0 = time.time()\n",
|
||||||
|
" result = session.run(product)\n",
|
||||||
|
" t1 = time.time()\n",
|
||||||
|
" results[device.name].append(t1 - t0)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"# Results"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 5,
|
||||||
|
"metadata": {
|
||||||
|
"collapsed": false,
|
||||||
|
"deletable": true,
|
||||||
|
"editable": true
|
||||||
|
},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/plain": [
|
||||||
|
"<matplotlib.text.Text at 0x7f58b018b710>"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 5,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYwAAAEPCAYAAABRHfM8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XeYVOX5//H3Ta+7LAiIdMQSCyLWXGhcRFQ0sYIFK5ZYozExavRrIJoGJrHFkhDUWLCgoCgQVGRtPzGKEBCxQAAREYSlC7Ll/v1xZpfZndllWOacmd39vK5rLmbOM3POPWeHuecp53nM3REREdmRBpkOQEREagclDBERSYkShoiIpEQJQ0REUqKEISIiKVHCEBGRlISaMMysi5m9YWbzzWyemf0stn2EmX1lZh/FbieGGYeIiOw6C/M6DDPbHdjd3eeYWStgFnAqcDaw0d3/GtrBRUQkrRqFuXN3/wb4JnZ/k5ktADrHii3MY4uISHpF1odhZj2AvsD7sU3XmNkcM/unmeVGFYeIiNRMJAkj1hz1PHC9u28CHgT2dPe+BDUQNU2JiGS5UPswAMysEfAKMNXd701S3h142d37JCnTRFciIjXg7mlv9o+ihvEI8El8soh1hpc5A/i4qhe7u27ujBgxIuMxZMtN50LnQuei+ltYQu30NrP+wHnAPDObDThwKzDMzPoCpcAS4Iow4xARkV0X9iipd4GGSYr+HeZxRUQk/XSldy2Rn5+f6RCyhs7FdjoX2+lchC/0Tu9dYWaezfGJiGQjM8ND6PQOtUlKRMLXo0cPli5dmukwJAO6d+/OkiVLIjueahgitVzs12Smw5AMqOpvH1YNQ30YIiKSEiUMERFJiRKGiIikRAlDRDJm+PDh/OY3v9nl/Zx00kk88cQTaYhIqqOEISKhWrFiBV27dg31GFOmTOGCCy5I+34///xzzjrrLNq3b09eXh59+/bl7rvvxt1ZunQpDRo0ICcnh5ycHHr16sWoUaMAystKS0sr7G9HCXLcuHH06NGD1q1bc8YZZ7Bu3bq0v6ddoYQhIqGaMmUKgwcPznQYO23RokUceeSRdO/enY8//pi1a9cyfvx4Zs2axcaNG4FgNNL69evZsGED48aN44477uDVV18tL9sZ8+fP58orr+Spp55i5cqVNG/enKuuuirt72tXKGGI1FVm4dx20pQpUzjppJMAmD17Nocccgi5ubmcc845bN26tcJzX3nlFQ4++GDy8vI46qijmDdvHgCjR49m6NChFZ57/fXX8/Of/xyAAQMG8Mgjj5SXjRkzhv3224+cnBwOOOAA5syZAwS1nSFDhtChQwf23HNP7r///irjHjlyJP379+euu+6iY8eOAOy11148+eST5OTklD+vbFjrkUceyf7778/HH1c5l2q1xo0bxymnnEL//v1p0aIFd955JxMmTGDz5s012l8YlDBEJDTFxcW89dZbDBo0iKKiIk4//XQuuugiCgsLGTp0KC+88EL5c2fPns2ll17KmDFjKCws5IorruCUU06hqKiIc845h6lTp5Z/eZaWljJ+/HjOO++8hGOOHz+eO+64gyeffJINGzYwadIk2rVrh7vzk5/8hIMPPpgVK1Ywffp07r33Xl577TUA3n33Xdq2bVu+n9dff50hQ4bs8D2WJYx3332XTz75hH79+qV0bpYtW0bbtm356quvgKCGcdBBB5WX9+rViyZNmvD555+ntL8oKGGISGjeeust+vbtS8uWLXnvvfcoLi7muuuuo2HDhpx55pkcdthh5c8dM2YMV155JYceeihmxgUXXEDTpk2ZOXMm3bp1o1+/fkycOBGA6dOn07JlywqvLzN27Fhuuumm8i/uXr160bVrVz744ANWr17NbbfdRsOGDenRoweXXXYZzzzzDAD9+/ensLCwfD9r1qyhU6dO1b4/d6d9+/a0a9eOn/70p4waNSrlOa26du1KYWEhXbp0AWDTpk3k5lZcfDQ3N7e8+SsbaGoQEQlNfHPUihUr6Ny5c4Xy7t27l99funQpjz/+eHkzkbtTVFTE119/DcC5557L008/zfnnn8/TTz/NsGHDkh5z2bJl7Lnnngnbly5dyvLly8trEe5OaWkpP/rRj5Lup127dqxYsaLa92dmrFmzJqG/olGj4Ku1qKiIpk2blm8vKiqicePGSffVqlUrNmzYUGHbhg0baN26dbUxREk1DBEJTXzC6NSpE8uXL69Q/uWXX5bf79q1K7fddhuFhYUUFhaydu1aNm3axNlnnw3A0KFDKSgoYPny5UycOLHKhNG1a1cWLVqUdHuvXr0q7H/9+vW8/PLLSfdz3HHHVWgyq0qyqTk6depE48aNE+Z5Wrx4cYUkGW///ffnv//9b/nj//3vf2zbto299957hzFUEOa8YpleGWoHq0a5iFQvW/+fLF682Pfcc8/yx9u2bfPu3bv7fffd50VFRf7CCy9448aN/fbbb3d39w8//NC7devm77//vru7b9q0ySdPnuybNm0q38fgwYN90KBB3q9fvwrHys/P97Fjx7q7+/jx471bt24+a9Ysd3dfuHChf/nll15SUuKHHHKIjxo1yrds2eLFxcX+8ccf+wcffJA0/kWLFnm7du38pptu8m+++cbd3b/44gs///zzff369b5kyRI3My8pKUn6+mHDhvmZZ57pa9as8aKiIh83bpzn5eX5qlWrkj5//vz5npub6++8845v2rTJzz//fB82bFi15zjhb//BB+6tW5dtT/t3smoYIhKKyZMnl9cuABo3bsyECRN49NFHadeuHePHj+fMM88sLz/kkEMYM2YM1157LW3btmXvvffmX//6V4V9Dhs2jOnTpyd0dsc3CQ0ZMoTbbruNYcOGkZOTw+mnn05hYSENGjTglVdeYc6cOfTs2ZMOHTpw+eWXlzcDvfPOOxVGP/Xq1Yv33nuPxYsXs//++5OXl8fQoUM57LDDypuJqhs6++CDD9K2bVv69OlDx44defDBB5kyZQrt27cHgqaznJyc8k7v/fbbj4cffphhw4ax++67s3nzZh544IHUT/i8eXDCCRBin4dmqxWp5bJ1ttqTTz6Zn/3sZ5x44omZDqXOKv/bf/YZ/OhHsGpVsB00W62I1B4DBgxgwIABmQ6j7lu8GAYOLE8WYVINQ6SWy9YahoTPzPCePYOkEb+dcGoYShgitZwSRv1lZiT7y6tJSkREdmz33UPbtRKGiEhd0a4dvP56aLtXwhARqQtyc+G112D//UM7hBKGiEht17IlTJ0KBx8c6mGUMEREarNmzeCVV+CHPwz9UEoYIiK12cSJkOIMubtKCUNEMkZreqdBhFfSK2GISKhq85reCxcu5Nxzz6VDhw60adOGffbZh+uvv758yvU333yThg0bkpOTQ25uLj/4wQ947LHHysuSve/KqwNWdvfdd9OpUyfatGnDZZddRlFRUdrfV01pPQyROsp+m/brtgDwETt3kWBtXdN74cKFHHHEEVxyySXMmTOHPfbYg9WrVzNu3DjeeecdzjrrLAA6d+5cPk37Sy+9xJAhQzjyyCOBnV/Xe9q0aYwePZoZM2bQqVMnTjvtNEaMGMEf/vCH9L65GlINQ0RCVVvX9P7tb3/LUUcdxV133cUee+wBwG677cZ1111XniwqO/XUU8nLy+OTTz7ZmVNU7vHHH+fSSy9l3333JTc3l9tvv51HH320RvsKgxKGiISmtq/pHT/9+o64OxMnTmT9+vUceOCBKb2m8jErr+t90EEHsWrVKtauXZtyHGFSwhCR0NTmNb1Xr17N7nHTbDzwwAPk5eXRunVrrrjiivLtZcu+tm/fnjvvvJMnn3ySvfbaK6XzU/mYldf1zs3Nxd2zZl1v9WGISGjq0pre11xzDddccw233357haVm4/sw4jVq1Chph/XOrOu9YcMGzCxr1vVWwhCpo3a2czoMU6ZMKa8VVLWmd+/evYHta3r/+te/TrqvoUOHcuONN5av6T1z5sykz9vRmt6fffZZSrEPHDiQCRMmcNFFF6X0/Mq6devG6tWr+e6772jRokX59qVLl+5wXe8hQ4YAMGfOHDp27EheXl6NYkg3NUmJSCiWLFnCtm3b2GeffQD44Q9/SKNGjbj//vspLi5mwoQJ/Oc//yl//uWXX87DDz9cvm3z5s1MmTKlvN9it91245hjjmH48OH06tWrfL+VXXbZZfz5z3/mo48+AmDRokUsW7aMww8/nNatWzN69Gi2bt1KSUkJ8+fP58MPP0y6n5EjR/L2229z4403ltdyVq9ezYIFC1J6/127duWII47g5ptvZvPmzWzbto3Ro0fTpEmT8lFUlV144YWMHTuWBQsWsG7dOn7/+98zfPjwlI4XhVAThpl1MbM3zGy+mc0zs+ti2/PM7FUz+8zMpplZ7o72JSK1S21f03uvvfbi/fffZ9myZRx00EHk5uZy9NFH07lzZ+68886UzsGzzz7LypUr6d27N126dGHGjBlMnjyZJk2aJD3mCSecwE033cSAAQPo0aMHPXv2ZOTIkSkdKwqhLqBkZrsDu7v7HDNrBcwCTgWGA2vcfbSZ3QzkufstSV6vBZREdiBbF1DSmt7hq+pvH9teuxZQcvdv3H1O7P4mYAHQhSBplP10+BdwWphxiEj0tKZ33RPZEq1m1gMoAA4Alrl7XlxZobu3TfIa1TBEdiBbaxgSvqhrGJGMkoo1Rz0PXO/um8ys8jus8tMe336Xn59PfkSzMoqI1BYFBQUUFBSEfpzQaxhm1gh4BZjq7vfGti0A8t19ZayfY4a7/yDJa1XDENkB1TDqrzrVhxHzCPBJWbKImQRcHLt/EfBSBHGIiMguCLVJysz6A+cB88xsNkHT063AKOA5M7sEWAokn8lLRHaoe/fuOz0rqtQNVV0AGJbIOr1rQk1SIlKrrVkTrIb38ceJZXvsAW+9BUmmMdlVtblJSkSk/lm/Hk44IXmyaN8eXn89lGQRJiUMEZF027wZTj4ZZs1KLGvTBl57DX6QMM4n6ylhiIik09atcOqp8O67iWWLine truncated
|
||||||
|
"text/plain": [
|
||||||
|
"<matplotlib.figure.Figure at 0x7f58b025e390>"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "display_data"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"colors = 'rgbcmyk'\n",
|
||||||
|
"marks = ['-', '--', '..']\n",
|
||||||
|
"\n",
|
||||||
|
"styles = (color+mark for mark in marks for color in colors)\n",
|
||||||
|
"\n",
|
||||||
|
"for style, (name, times) in zip(styles, results.items()):\n",
|
||||||
|
" pyplot.plot(matrix_sizes, times, style, label=name)\n",
|
||||||
|
"\n",
|
||||||
|
"pyplot.legend()\n",
|
||||||
|
"\n",
|
||||||
|
"pyplot.ylabel('Calculation time')\n",
|
||||||
|
"pyplot.xlabel('Matrix size')"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 6,
|
||||||
|
"metadata": {
|
||||||
|
"collapsed": false,
|
||||||
|
"deletable": true,
|
||||||
|
"editable": true
|
||||||
|
},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/html": [
|
||||||
|
"<table border=\"1\" cellpadding=\"3\" cellspacing=\"0\" style=\"border:black; border-collapse:collapse;\"><tr><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;text-align:right;\"><b>matrix size</b></td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">time (s) on <b>/device:CPU:0</b></td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">time (s) on <b>/device:GPU:0</b></td></tr><tr><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;text-align:right;\"><b>10</b></td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">0.0054</td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">0.1705</td></tr><tr><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;text-align:right;\"><b>20</b></td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">0.0045</td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">0.0059</td></tr><tr><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;text-align:right;\"><b>50</b></td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">0.0053</td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">0.0081</td></tr><tr><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;text-align:right;\"><b>100</b></td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">0.0103</td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">0.0081</td></tr><tr><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;text-align:right;\"><b>1000</b></td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">0.0437</td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">0.0106</td></tr><tr><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;text-align:right;\"><b>5000</b></td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">2.8766</td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">0.2573</td></tr><tr><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;text-align:right;\"><b>10000</b></td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">22.4699</td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">1.6363</td></tr></table>"
|
||||||
|
],
|
||||||
|
"text/plain": [
|
||||||
|
"<ipy_table.ipy_table.IpyTable at 0x7f58b021afd0>"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 6,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"devices = device_lib.list_local_devices()\n",
|
||||||
|
"\n",
|
||||||
|
"\n",
|
||||||
|
"make_table([[\"matrix size\"] + [\"time (s) on <b>{}</b>\".format(device.name) for device in devices]] + [\n",
|
||||||
|
" [size] + [results[device.name][size_index] for device in devices]\n",
|
||||||
|
" for size_index, size in enumerate(matrix_sizes)\n",
|
||||||
|
"])\n",
|
||||||
|
"set_column_style(0, bold=True, align='right')"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"metadata": {
|
||||||
|
"hide_input": false,
|
||||||
|
"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.5.2"
|
||||||
|
},
|
||||||
|
"widgets": {
|
||||||
|
"state": {
|
||||||
|
"7ba735bb37af497cac93b37f587e1d16": {
|
||||||
|
"views": [
|
||||||
|
{
|
||||||
|
"cell_index": 5
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"version": "1.2.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nbformat": 4,
|
||||||
|
"nbformat_minor": 2
|
||||||
|
}
|
||||||
@@ -0,0 +1,188 @@
|
|||||||
|
{
|
||||||
|
"cells": [
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 5,
|
||||||
|
"metadata": {
|
||||||
|
"collapsed": false,
|
||||||
|
"deletable": true,
|
||||||
|
"editable": true
|
||||||
|
},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"import matplotlib\n",
|
||||||
|
"%matplotlib inline\n",
|
||||||
|
"matplotlib.rcParams['figure.figsize'] = (20, 10)\n",
|
||||||
|
"matplotlib.rcParams['font.size'] = 24\n",
|
||||||
|
"matplotlib.rcParams['lines.linewidth'] = 5\n",
|
||||||
|
"matplotlib.rcParams['lines.markersize'] = 20\n",
|
||||||
|
"\n",
|
||||||
|
"import tensorflow as tf\n",
|
||||||
|
"from tensorflow.python.client import device_lib\n",
|
||||||
|
"\n",
|
||||||
|
"import time\n",
|
||||||
|
"import numpy as np\n",
|
||||||
|
"from matplotlib import pyplot\n",
|
||||||
|
"from collections import defaultdict\n",
|
||||||
|
"from ipy_table import make_table, set_row_style, set_column_style\n",
|
||||||
|
"from jupyter_progressbar import ProgressBar\n",
|
||||||
|
"\n",
|
||||||
|
"from sklearn.preprocessing import LabelEncoder\n",
|
||||||
|
"from sklearn.model_selection import train_test_split\n",
|
||||||
|
"from keras.models import Sequential\n",
|
||||||
|
"from keras.layers import Activation\n",
|
||||||
|
"from keras.optimizers import SGD, Adam\n",
|
||||||
|
"from keras.layers import Dense, Dropout, Flatten\n",
|
||||||
|
"from keras.regularizers import l1, l2\n",
|
||||||
|
"from keras import regularizers\n",
|
||||||
|
"import numpy\n",
|
||||||
|
"import pickle\n",
|
||||||
|
"import tensorflow as tf"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 6,
|
||||||
|
"metadata": {
|
||||||
|
"collapsed": false,
|
||||||
|
"deletable": true,
|
||||||
|
"editable": true
|
||||||
|
},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/html": [
|
||||||
|
"<table border=\"1\" cellpadding=\"3\" cellspacing=\"0\" style=\"border:black; border-collapse:collapse;\"><tr><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\"><b>name</b></td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\"><b>type</b></td></tr><tr><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">/device:CPU:0</td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">CPU</td></tr><tr><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">/device:GPU:0</td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">GPU</td></tr></table>"
|
||||||
|
],
|
||||||
|
"text/plain": [
|
||||||
|
"<ipy_table.ipy_table.IpyTable at 0x7f8d84227cc0>"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 6,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"devices = device_lib.list_local_devices()\n",
|
||||||
|
"\n",
|
||||||
|
"make_table([[\"name\", \"type\"]] + [\n",
|
||||||
|
" [device.name, device.device_type]\n",
|
||||||
|
" for device in devices\n",
|
||||||
|
"])\n",
|
||||||
|
"set_row_style(0, bold=True)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 11,
|
||||||
|
"metadata": {
|
||||||
|
"collapsed": false,
|
||||||
|
"deletable": true,
|
||||||
|
"editable": true
|
||||||
|
},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"6250/6250 [==============================] - 1s 167us/step\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\n",
|
||||||
|
"6250/6250 [==============================] - 0s 60us/step\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"results = defaultdict(dict)\n",
|
||||||
|
"\n",
|
||||||
|
"for device in devices:\n",
|
||||||
|
" with tf.device(device.name):\n",
|
||||||
|
" with open(\"CatsAndDogs.pickle\", 'rb') as f:\n",
|
||||||
|
" data = pickle.load(f)\n",
|
||||||
|
"\n",
|
||||||
|
" X = data[\"dataset\"]\n",
|
||||||
|
" y = data[\"labels\"]\n",
|
||||||
|
" del data\n",
|
||||||
|
"\n",
|
||||||
|
" (X_train, X_test, y_train, y_test) = train_test_split(\n",
|
||||||
|
" X, y, test_size = 0.25, random_state = 42)\n",
|
||||||
|
"\n",
|
||||||
|
" model = Sequential()\n",
|
||||||
|
" model.add(Flatten(input_shape=X_train.shape[1:]))\n",
|
||||||
|
"\n",
|
||||||
|
" model.add(Dense(768, kernel_initializer=\"uniform\", activation=\"relu\"))\n",
|
||||||
|
" model.add(Dropout(0.2))\n",
|
||||||
|
"\n",
|
||||||
|
" model.add(Dense(384, kernel_initializer=\"uniform\", activation=\"relu\"))\n",
|
||||||
|
" model.add(Dropout(0.2))\n",
|
||||||
|
"\n",
|
||||||
|
" model.add(Dense(128, kernel_initializer=\"uniform\", activation=\"relu\"))\n",
|
||||||
|
" model.add(Dropout(0.2))\n",
|
||||||
|
"\n",
|
||||||
|
" model.add(Dense(2, activation=\"softmax\"))\n",
|
||||||
|
"\n",
|
||||||
|
" model.compile(loss=\"binary_crossentropy\", optimizer=Adam(lr=0.001), metrics=[\"accuracy\"])\n",
|
||||||
|
" \n",
|
||||||
|
" t0 = time.time()\n",
|
||||||
|
" model.fit(X_train, y_train, validation_split=0.25, epochs=5, batch_size=128, verbose=0)\n",
|
||||||
|
" t1 = time.time()\n",
|
||||||
|
" (loss, accuracy) = model.evaluate(X_test, y_test, verbose=0)\n",
|
||||||
|
" t2 = time.time()\n",
|
||||||
|
" \n",
|
||||||
|
" results[device.name]['training'] = t1 - t0\n",
|
||||||
|
" results[device.name]['evaluating'] = t2 - t1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 12,
|
||||||
|
"metadata": {
|
||||||
|
"collapsed": false
|
||||||
|
},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/html": [
|
||||||
|
"<table border=\"1\" cellpadding=\"3\" cellspacing=\"0\" style=\"border:black; border-collapse:collapse;\"><tr><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;text-align:right;\"><b>device</b></td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;text-align:right;\"><b>execution time (s) training</b></td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;text-align:right;\"><b>execution time (s) evaluating</b></td></tr><tr><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;text-align:right;\"><b>/device:GPU:0</b></td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">8.3381</td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">0.3781</td></tr><tr><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;text-align:right;\"><b>/device:CPU:0</b></td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">38.5678</td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">1.0451</td></tr></table>"
|
||||||
|
],
|
||||||
|
"text/plain": [
|
||||||
|
"<ipy_table.ipy_table.IpyTable at 0x7f8d7faa7b00>"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 12,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"make_table([[\"device\", \"execution time (s) training\", \"execution time (s) evaluating\"]] + [\n",
|
||||||
|
" [device, result['training'], result['evaluating']]\n",
|
||||||
|
" for device, result in results.items()\n",
|
||||||
|
"])\n",
|
||||||
|
"set_column_style(0, bold=True, align='right')\n",
|
||||||
|
"set_row_style(0, bold=True, align='right')"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"metadata": {
|
||||||
|
"hide_input": false,
|
||||||
|
"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.5.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nbformat": 4,
|
||||||
|
"nbformat_minor": 2
|
||||||
|
}
|
||||||
@@ -0,0 +1,256 @@
|
|||||||
|
{
|
||||||
|
"cells": [
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 1,
|
||||||
|
"metadata": {
|
||||||
|
"collapsed": false,
|
||||||
|
"deletable": true,
|
||||||
|
"editable": true
|
||||||
|
},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stderr",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"Using TensorFlow backend.\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"import os.path\n",
|
||||||
|
"import pickle\n",
|
||||||
|
"\n",
|
||||||
|
"from sklearn.model_selection import train_test_split\n",
|
||||||
|
"from sklearn.linear_model import LogisticRegression\n",
|
||||||
|
"from sklearn.metrics import classification_report\n",
|
||||||
|
"\n",
|
||||||
|
"from jupyter_progressbar import ProgressBar\n",
|
||||||
|
"import numpy as np\n",
|
||||||
|
"\n",
|
||||||
|
"from keras.models import Sequential\n",
|
||||||
|
"from keras.layers import Dense, Flatten, GlobalAveragePooling2D\n",
|
||||||
|
"from keras.optimizers import SGD\n",
|
||||||
|
"from keras import backend as K\n",
|
||||||
|
"from keras.applications.inception_v3 import preprocess_input as preprocess, InceptionV3\n",
|
||||||
|
"\n",
|
||||||
|
"import matplotlib\n",
|
||||||
|
"import matplotlib.pyplot as plt\n",
|
||||||
|
"%matplotlib inline\n",
|
||||||
|
"matplotlib.rcParams['figure.figsize'] = (20, 10)\n",
|
||||||
|
"matplotlib.rcParams['font.size'] = 24\n",
|
||||||
|
"matplotlib.rcParams['lines.linewidth'] = 5\n",
|
||||||
|
"matplotlib.rcParams['lines.markersize'] = 20\n",
|
||||||
|
"\n",
|
||||||
|
"import tensorflow as tf\n",
|
||||||
|
"from tensorflow.python.client import device_lib\n",
|
||||||
|
"\n",
|
||||||
|
"import time\n",
|
||||||
|
"from matplotlib import pyplot\n",
|
||||||
|
"from collections import defaultdict\n",
|
||||||
|
"from ipy_table import make_table, set_row_style, set_column_style\n",
|
||||||
|
"from jupyter_progressbar import ProgressBar\n",
|
||||||
|
"\n",
|
||||||
|
"# Disable progressbar VGG-batches\n",
|
||||||
|
"ProgressBar = lambda x: x"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 2,
|
||||||
|
"metadata": {
|
||||||
|
"collapsed": false,
|
||||||
|
"deletable": true,
|
||||||
|
"editable": true
|
||||||
|
},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/html": [
|
||||||
|
"<table border=\"1\" cellpadding=\"3\" cellspacing=\"0\" style=\"border:black; border-collapse:collapse;\"><tr><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\"><b>name</b></td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\"><b>type</b></td></tr><tr><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">/device:CPU:0</td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">CPU</td></tr><tr><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">/device:GPU:0</td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">GPU</td></tr></table>"
|
||||||
|
],
|
||||||
|
"text/plain": [
|
||||||
|
"<ipy_table.ipy_table.IpyTable at 0x7fc8a18d95f8>"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 2,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"devices = device_lib.list_local_devices()\n",
|
||||||
|
"\n",
|
||||||
|
"make_table([[\"name\", \"type\"]] + [\n",
|
||||||
|
" [device.name, device.device_type]\n",
|
||||||
|
" for device in devices\n",
|
||||||
|
"])\n",
|
||||||
|
"set_row_style(0, bold=True)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 3,
|
||||||
|
"metadata": {
|
||||||
|
"collapsed": false,
|
||||||
|
"deletable": true,
|
||||||
|
"editable": true
|
||||||
|
},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"with open('creepycrawly_and_cats.p3', 'rb') as f:\n",
|
||||||
|
" X, y = pickle.load(f)\n",
|
||||||
|
"classes = ['creepy crawly', 'cat']"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 4,
|
||||||
|
"metadata": {
|
||||||
|
"collapsed": true,
|
||||||
|
"deletable": true,
|
||||||
|
"editable": true
|
||||||
|
},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"import numpy\n",
|
||||||
|
"from skimage.transform import resize\n",
|
||||||
|
"\n",
|
||||||
|
"def resize_for_model(X, model):\n",
|
||||||
|
" target = tuple([x.value for x in model.input.get_shape()][1:3])\n",
|
||||||
|
" if target[0] is None or target[1] is None:\n",
|
||||||
|
" return X\n",
|
||||||
|
" result = numpy.zeros((X.shape[0], target[0], target[1], X.shape[3]), dtype=X.dtype)\n",
|
||||||
|
" \n",
|
||||||
|
" for i in range(X.shape[0]):\n",
|
||||||
|
" result[i] = resize(X[i], target + (X.shape[3], ))\n",
|
||||||
|
" return result"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 5,
|
||||||
|
"metadata": {
|
||||||
|
"collapsed": false,
|
||||||
|
"deletable": true,
|
||||||
|
"editable": true
|
||||||
|
},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"results = defaultdict(dict)\n",
|
||||||
|
"for device in devices:\n",
|
||||||
|
" from keras.applications.inception_v3 import InceptionV3, preprocess_input, decode_predictions\n",
|
||||||
|
" \n",
|
||||||
|
" with tf.device(device.name):\n",
|
||||||
|
" model = InceptionV3(weights='imagenet')\n",
|
||||||
|
" X_ = preprocess_input(resize_for_model(X, model))\n",
|
||||||
|
" t0 = time.time()\n",
|
||||||
|
" preds = model.predict(X_, verbose=0)\n",
|
||||||
|
" t1 = time.time()\n",
|
||||||
|
" \n",
|
||||||
|
" results[device.name]['inceptionv3'] = t1 - t0\n",
|
||||||
|
" K.clear_session()\n",
|
||||||
|
" \n",
|
||||||
|
" from keras.applications.resnet50 import ResNet50, preprocess_input, decode_predictions\n",
|
||||||
|
" with tf.device(device.name):\n",
|
||||||
|
" model = ResNet50(weights='imagenet')\n",
|
||||||
|
" X_ = preprocess_input(resize_for_model(X, model))\n",
|
||||||
|
" t0 = time.time()\n",
|
||||||
|
" preds = model.predict(X_, verbose=0)\n",
|
||||||
|
" t1 = time.time()\n",
|
||||||
|
" \n",
|
||||||
|
" results[device.name]['resnet50'] = t1 - t0\n",
|
||||||
|
" K.clear_session()\n",
|
||||||
|
"\n",
|
||||||
|
" vgg_batch_size = 2\n",
|
||||||
|
" \n",
|
||||||
|
" from keras.applications.vgg16 import VGG16, preprocess_input, decode_predictions\n",
|
||||||
|
" with tf.device(device.name):\n",
|
||||||
|
" model = VGG16(weights='imagenet', include_top=True)\n",
|
||||||
|
" X_ = preprocess_input(resize_for_model(X, model))\n",
|
||||||
|
" t0 = time.time()\n",
|
||||||
|
" for start, end in zip(\n",
|
||||||
|
" range(0, len(X), vgg_batch_size),\n",
|
||||||
|
" ProgressBar(range(vgg_batch_size, len(X), vgg_batch_size))\n",
|
||||||
|
" ):\n",
|
||||||
|
" model.predict(X_[start:end], verbose=0)\n",
|
||||||
|
" t1 = time.time()\n",
|
||||||
|
" \n",
|
||||||
|
" results[device.name]['vgg16'] = t1 - t0\n",
|
||||||
|
" K.clear_session()\n",
|
||||||
|
" \n",
|
||||||
|
" from keras.applications.vgg19 import VGG19, preprocess_input, decode_predictions\n",
|
||||||
|
" \n",
|
||||||
|
" with tf.device(device.name):\n",
|
||||||
|
" model = VGG19(weights='imagenet', include_top=True)\n",
|
||||||
|
" X_ = preprocess_input(resize_for_model(X, model))\n",
|
||||||
|
" t0 = time.time()\n",
|
||||||
|
" for start, end in zip(\n",
|
||||||
|
" range(0, len(X), vgg_batch_size),\n",
|
||||||
|
" ProgressBar(range(vgg_batch_size, len(X), vgg_batch_size))\n",
|
||||||
|
" ):\n",
|
||||||
|
" model.predict(X_[start:end], verbose=0)\n",
|
||||||
|
" t1 = time.time()\n",
|
||||||
|
" \n",
|
||||||
|
" results[device.name]['vgg19'] = t1 - t0\n",
|
||||||
|
" K.clear_session()"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 6,
|
||||||
|
"metadata": {
|
||||||
|
"collapsed": false,
|
||||||
|
"deletable": true,
|
||||||
|
"editable": true
|
||||||
|
},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/html": [
|
||||||
|
"<table border=\"1\" cellpadding=\"3\" cellspacing=\"0\" style=\"border:black; border-collapse:collapse;\"><tr><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;text-align:right;\"><b>device</b></td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;text-align:right;\"><b>resnet50</b></td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;text-align:right;\"><b>vgg19</b></td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;text-align:right;\"><b>inceptionv3</b></td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;text-align:right;\"><b>vgg16</b></td></tr><tr><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;text-align:right;\"><b>/device:GPU:0</b></td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">59.2201</td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">156.9875</td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">15.0459</td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">129.3934</td></tr><tr><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;text-align:right;\"><b>/device:CPU:0</b></td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">605.1631</td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">1857.0126</td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">89.1597</td><td style=\"border-left: 1px solid;border-right: 1px solid;border-top: 1px solid;border-bottom: 1px solid;\">1445.7997</td></tr></table>"
|
||||||
|
],
|
||||||
|
"text/plain": [
|
||||||
|
"<ipy_table.ipy_table.IpyTable at 0x7fc88813c860>"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 6,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"model_names = list(next(iter(results.values())).keys())\n",
|
||||||
|
"\n",
|
||||||
|
"make_table([[\"device\"] + model_names] + [\n",
|
||||||
|
" [device] + [result[model_name] for model_name in model_names]\n",
|
||||||
|
" for device, result in results.items()\n",
|
||||||
|
"])\n",
|
||||||
|
"set_column_style(0, bold=True, align='right')\n",
|
||||||
|
"set_row_style(0, bold=True, align='right')"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"metadata": {
|
||||||
|
"hide_input": false,
|
||||||
|
"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.5.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nbformat": 4,
|
||||||
|
"nbformat_minor": 2
|
||||||
|
}
|
||||||
Reference in new issue
Block a user