├── Days on Jupyter.pdf ├── Deep Learning ├── .ipynb_checkpoints │ └── 用神經網路做手寫辨識_使用篇-checkpoint.ipynb ├── handwriting_model_architecture.json ├── handwriting_model_weights.h5 ├── 用神經網路做手寫辨識.ipynb └── 用神經網路做手寫辨識_使用篇.ipynb ├── README.md ├── 小實作問題 ├── 天使隊的平均 Pandas.ipynb ├── 模擬考試的成績.ipynb └── 用 Sympy 算個積分.ipynb └── 隨意的技巧 ├── Jupyter 互動基礎篇.ipynb └── 弄支股票來畫 K 線.ipynb /Days on Jupyter.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yenlung/Days-on-Jupyter/8061023326bac42fff9c6371f5abe4473c6d6c38/Days on Jupyter.pdf -------------------------------------------------------------------------------- /Deep Learning/.ipynb_checkpoints/用神經網路做手寫辨識_使用篇-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# 手寫辨識使用篇\n", 8 | "\n", 9 | "我們在前面的[手寫辨識](手寫辨識.ipynb)訓練好我們的神經網路, 可以做手寫辨識 0-9 的數字。現在我們要來用用看。" 10 | ] 11 | }, 12 | { 13 | "cell_type": "code", 14 | "execution_count": 1, 15 | "metadata": { 16 | "collapsed": false 17 | }, 18 | "outputs": [ 19 | { 20 | "name": "stderr", 21 | "output_type": "stream", 22 | "text": [ 23 | "Using Theano backend.\n" 24 | ] 25 | } 26 | ], 27 | "source": [ 28 | "%matplotlib inline\n", 29 | "import numpy as np\n", 30 | "import matplotlib.pyplot as plt\n", 31 | "from keras.models import Sequential\n", 32 | "from keras.models import model_from_json\n", 33 | "from keras.layers.core import Dense, Activation\n", 34 | "from keras.optimizers import SGD\n", 35 | "from keras.datasets import mnist\n", 36 | "from ipywidgets import interact_manual" 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "metadata": {}, 42 | "source": [ 43 | "## 找回我們訓練好的神經網路" 44 | ] 45 | }, 46 | { 47 | "cell_type": "code", 48 | "execution_count": 2, 49 | "metadata": { 50 | "collapsed": false 51 | }, 52 | "outputs": [ 53 | { 54 | "ename": "FileNotFoundError", 55 | "evalue": "[Errno 2] No such file or directory: 'handwriting_model_architecture.json'", 56 | "output_type": "error", 57 | "traceback": [ 58 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", 59 | "\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)", 60 | "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mmodel\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodel_from_json\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'handwriting_model_architecture.json'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mload_weights\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'handwriting_model_weights.h5'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 61 | "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'handwriting_model_architecture.json'" 62 | ] 63 | } 64 | ], 65 | "source": [ 66 | "model = model_from_json(open('handwriting_model_architecture.json').read())\n", 67 | "model.load_weights('handwriting_model_weights.h5')" 68 | ] 69 | }, 70 | { 71 | "cell_type": "code", 72 | "execution_count": 5, 73 | "metadata": { 74 | "collapsed": false 75 | }, 76 | "outputs": [], 77 | "source": [ 78 | "model.compile(loss='mse', optimizer=SGD(lr=0.1))" 79 | ] 80 | }, 81 | { 82 | "cell_type": "markdown", 83 | "metadata": {}, 84 | "source": [ 85 | "## 備好我們的訓練資料\n", 86 | "\n", 87 | "我們還是要備好兩種格式:\n", 88 | "\n", 89 | "* x0_test: 28x28 矩陣, 可直接畫\n", 90 | "* x_test: 784 (=28x28) 維向量, 可送進我們神經網路" 91 | ] 92 | }, 93 | { 94 | "cell_type": "code", 95 | "execution_count": 6, 96 | "metadata": { 97 | "collapsed": false 98 | }, 99 | "outputs": [], 100 | "source": [ 101 | "(_,_), (x0_test, _) = mnist.load_data()\n", 102 | "\n", 103 | "num_test = len(x0_test)\n", 104 | "x_test = x0_test.reshape(num_test, 28*28)" 105 | ] 106 | }, 107 | { 108 | "cell_type": "markdown", 109 | "metadata": {}, 110 | "source": [ 111 | "## 測試資料送進去辨識\n", 112 | "\n", 113 | "我們用 `predict_classes` 可以直接找結果向量裡面最大的, 也就是說回傳值就是預測的答案。" 114 | ] 115 | }, 116 | { 117 | "cell_type": "code", 118 | "execution_count": 7, 119 | "metadata": { 120 | "collapsed": false 121 | }, 122 | "outputs": [ 123 | { 124 | "name": "stdout", 125 | "output_type": "stream", 126 | "text": [ 127 | "10000/10000 [==============================] - 124s \n" 128 | ] 129 | } 130 | ], 131 | "source": [ 132 | "result = model.predict_classes(x_test)" 133 | ] 134 | }, 135 | { 136 | "cell_type": "code", 137 | "execution_count": 8, 138 | "metadata": { 139 | "collapsed": false 140 | }, 141 | "outputs": [ 142 | { 143 | "data": { 144 | "text/plain": [ 145 | "2" 146 | ] 147 | }, 148 | "execution_count": 8, 149 | "metadata": {}, 150 | "output_type": "execute_result" 151 | } 152 | ], 153 | "source": [ 154 | "result[888]" 155 | ] 156 | }, 157 | { 158 | "cell_type": "markdown", 159 | "metadata": {}, 160 | "source": [ 161 | "## 欣賞辨識結果" 162 | ] 163 | }, 164 | { 165 | "cell_type": "code", 166 | "execution_count": 9, 167 | "metadata": { 168 | "collapsed": true 169 | }, 170 | "outputs": [], 171 | "source": [ 172 | "def 辨識(測試編號):\n", 173 | " plt.imshow(x0_test[測試編號], cmap=\"Greys\")\n", 174 | " print(\"神經網路判斷為:\", result[測試編號])" 175 | ] 176 | }, 177 | { 178 | "cell_type": "code", 179 | "execution_count": 10, 180 | "metadata": { 181 | "collapsed": false 182 | }, 183 | "outputs": [ 184 | { 185 | "name": "stdout", 186 | "output_type": "stream", 187 | "text": [ 188 | "神經網路判斷為: 6\n" 189 | ] 190 | }, 191 | { 192 | "data": { 193 | "image/png": "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\n", 194 | "text/plain": [ 195 | "" 196 | ] 197 | }, 198 | "metadata": {}, 199 | "output_type": "display_data" 200 | } 201 | ], 202 | "source": [ 203 | "interact_manual(辨識, 測試編號 = (0, num_test-1));" 204 | ] 205 | }, 206 | { 207 | "cell_type": "code", 208 | "execution_count": null, 209 | "metadata": { 210 | "collapsed": true 211 | }, 212 | "outputs": [], 213 | "source": [] 214 | } 215 | ], 216 | "metadata": { 217 | "anaconda-cloud": {}, 218 | "kernelspec": { 219 | "display_name": "Python [Root]", 220 | "language": "python", 221 | "name": "Python [Root]" 222 | }, 223 | "language_info": { 224 | "codemirror_mode": { 225 | "name": "ipython", 226 | "version": 3 227 | }, 228 | "file_extension": ".py", 229 | "mimetype": "text/x-python", 230 | "name": "python", 231 | "nbconvert_exporter": "python", 232 | "pygments_lexer": "ipython3", 233 | "version": "3.5.2" 234 | } 235 | }, 236 | "nbformat": 4, 237 | "nbformat_minor": 0 238 | } 239 | -------------------------------------------------------------------------------- /Deep Learning/handwriting_model_architecture.json: -------------------------------------------------------------------------------- 1 | {"optimizer": {"momentum": 0.0, "decay": 0.0, "lr": 0.10000000149011612, "name": "SGD", "nesterov": false}, "config": [{"config": {"b_constraint": null, "input_dim": 784, "init": "glorot_uniform", "W_constraint": null, "activation": "linear", "input_dtype": "float32", "activity_regularizer": null, "name": "dense_1", "trainable": true, "output_dim": 500, "bias": true, "b_regularizer": null, "batch_input_shape": [null, 784], "W_regularizer": null}, "class_name": "Dense"}, {"config": {"trainable": true, "name": "activation_1", "activation": "sigmoid"}, "class_name": "Activation"}, {"config": {"b_constraint": null, "init": "glorot_uniform", "activation": "linear", "activity_regularizer": null, "name": "dense_2", "trainable": true, "b_regularizer": null, "output_dim": 500, "bias": true, "W_constraint": null, "input_dim": null, "W_regularizer": null}, "class_name": "Dense"}, {"config": {"trainable": true, "name": "activation_2", "activation": "sigmoid"}, "class_name": "Activation"}, {"config": {"b_constraint": null, "init": "glorot_uniform", "activation": "linear", "activity_regularizer": null, "name": "dense_3", "trainable": true, "b_regularizer": null, "output_dim": 10, "bias": true, "W_constraint": null, "input_dim": null, "W_regularizer": null}, "class_name": "Dense"}, {"config": {"trainable": true, "name": "activation_3", "activation": "softmax"}, "class_name": "Activation"}], "sample_weight_mode": null, "loss": "mse", "keras_version": "1.0.6", "class_name": "Sequential"} -------------------------------------------------------------------------------- /Deep Learning/handwriting_model_weights.h5: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yenlung/Days-on-Jupyter/8061023326bac42fff9c6371f5abe4473c6d6c38/Deep Learning/handwriting_model_weights.h5 -------------------------------------------------------------------------------- /Deep Learning/用神經網路做手寫辨識.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# 用 Keras 做個手寫辨識系統\n", 8 | "\n", 9 | "CNN 的創始者 Yann LeCun 第一個 CNN 例子就是用來辨識手寫、印刷的 0-9 數字。這裡用 LeCun 原版資料:\n", 10 | "\n", 11 | "[MNIST 手寫辨識資料](http://yann.lecun.com/exdb/mnist/)\n", 12 | "\n", 13 | "每個手寫圖檔都是 28x28 大小的, 輸出原本是 0-9 的數字, 但我們想改成辨視資料是 0 就要輸出\n", 14 | "\n", 15 | "[1, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n", 16 | "\n", 17 | "是 3 就是\n", 18 | "\n", 19 | "[0, 0, 0, 1, 0, 0, 0, 0, 0, 0]\n", 20 | "\n", 21 | "等等。\n", 22 | "\n", 23 | "另外我們用最傳統的 Fully Connected Feedforward 架構, 而不是用 CNN:\n", 24 | "\n", 25 | "* 輸入是一個 28x28=784 維的向量。\n", 26 | "* 輸出是 10 維向量 (每個數字都是 0 到 9)\n", 27 | "* Hidden Layer 有兩層, 每層 500 個 neuron" 28 | ] 29 | }, 30 | { 31 | "cell_type": "code", 32 | "execution_count": 1, 33 | "metadata": { 34 | "collapsed": false 35 | }, 36 | "outputs": [ 37 | { 38 | "name": "stderr", 39 | "output_type": "stream", 40 | "text": [ 41 | "Using Theano backend.\n" 42 | ] 43 | } 44 | ], 45 | "source": [ 46 | "%matplotlib inline\n", 47 | "import pandas as pd\n", 48 | "import numpy as np\n", 49 | "import matplotlib.pyplot as plt\n", 50 | "# seaborn 畫圖會比較漂亮, 但這裡可能不用\n", 51 | "# import seaborn as sns\n", 52 | "from keras.models import Sequential\n", 53 | "from keras.layers.core import Dense, Activation\n", 54 | "from keras.datasets import mnist\n", 55 | "from keras.optimizers import SGD" 56 | ] 57 | }, 58 | { 59 | "cell_type": "markdown", 60 | "metadata": { 61 | "collapsed": false 62 | }, 63 | "source": [ 64 | "## 讀入 MNIST 資料" 65 | ] 66 | }, 67 | { 68 | "cell_type": "code", 69 | "execution_count": 2, 70 | "metadata": { 71 | "collapsed": false 72 | }, 73 | "outputs": [], 74 | "source": [ 75 | "(x0_train, y0_train), (x0_test, y0_test) = mnist.load_data()" 76 | ] 77 | }, 78 | { 79 | "cell_type": "markdown", 80 | "metadata": {}, 81 | "source": [ 82 | "每一個 `x0_train` 裡都是 28x28 的矩陣, 我們可以畫出來看看就知道的確是個手寫的數字。" 83 | ] 84 | }, 85 | { 86 | "cell_type": "code", 87 | "execution_count": 3, 88 | "metadata": { 89 | "collapsed": false 90 | }, 91 | "outputs": [ 92 | { 93 | "data": { 94 | "text/plain": [ 95 | "" 96 | ] 97 | }, 98 | "execution_count": 3, 99 | "metadata": {}, 100 | "output_type": "execute_result" 101 | }, 102 | { 103 | "data": { 104 | "image/png": "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\nP4cHtlr6bJANAAAAAElFTkSuQmCC\n", 105 | "text/plain": [ 106 | "" 107 | ] 108 | }, 109 | "metadata": {}, 110 | "output_type": "display_data" 111 | } 112 | ], 113 | "source": [ 114 | "plt.imshow(x0_train[9], cmap='Greys')" 115 | ] 116 | }, 117 | { 118 | "cell_type": "markdown", 119 | "metadata": {}, 120 | "source": [ 121 | "相對的 y0_train 也可以看一下。" 122 | ] 123 | }, 124 | { 125 | "cell_type": "code", 126 | "execution_count": 4, 127 | "metadata": { 128 | "collapsed": false 129 | }, 130 | "outputs": [ 131 | { 132 | "data": { 133 | "text/plain": [ 134 | "4" 135 | ] 136 | }, 137 | "execution_count": 4, 138 | "metadata": {}, 139 | "output_type": "execute_result" 140 | } 141 | ], 142 | "source": [ 143 | "y0_train[9]" 144 | ] 145 | }, 146 | { 147 | "cell_type": "markdown", 148 | "metadata": {}, 149 | "source": [ 150 | "## 資料轉成可訓練的樣子\n", 151 | "\n", 152 | "我們準備做兩件事:\n", 153 | "\n", 154 | "* 把 x 影像資料從 28x28 的矩陣轉成 784 維的向量。\n", 155 | "* 每個 y 轉成 10 維的向量, 只有在第 i 個位置是 1 (辨視出是 i), 其餘都是 0。" 156 | ] 157 | }, 158 | { 159 | "cell_type": "markdown", 160 | "metadata": {}, 161 | "source": [ 162 | "計算訓練、測試數目。" 163 | ] 164 | }, 165 | { 166 | "cell_type": "code", 167 | "execution_count": 5, 168 | "metadata": { 169 | "collapsed": true 170 | }, 171 | "outputs": [], 172 | "source": [ 173 | "num_train = len(x0_train)\n", 174 | "num_test = len(x0_test)" 175 | ] 176 | }, 177 | { 178 | "cell_type": "markdown", 179 | "metadata": {}, 180 | "source": [ 181 | "看一下多少個。" 182 | ] 183 | }, 184 | { 185 | "cell_type": "code", 186 | "execution_count": 6, 187 | "metadata": { 188 | "collapsed": false 189 | }, 190 | "outputs": [ 191 | { 192 | "name": "stdout", 193 | "output_type": "stream", 194 | "text": [ 195 | "訓練資料 60000 筆\n", 196 | "測試資料 10000 筆\n" 197 | ] 198 | } 199 | ], 200 | "source": [ 201 | "print(\"訓練資料 \"+str(num_train)+\" 筆\")\n", 202 | "print(\"測試資料 \"+str(num_test)+\" 筆\")" 203 | ] 204 | }, 205 | { 206 | "cell_type": "markdown", 207 | "metadata": {}, 208 | "source": [ 209 | "### 輸入資料轉向量" 210 | ] 211 | }, 212 | { 213 | "cell_type": "code", 214 | "execution_count": 7, 215 | "metadata": { 216 | "collapsed": false 217 | }, 218 | "outputs": [], 219 | "source": [ 220 | "x_train = x0_train.reshape(num_train, 28*28) # 注意 28*28 只是個數字\n", 221 | "x_test = x0_test.reshape(num_test, 28*28)" 222 | ] 223 | }, 224 | { 225 | "cell_type": "markdown", 226 | "metadata": {}, 227 | "source": [ 228 | "### 輸出資料轉向量" 229 | ] 230 | }, 231 | { 232 | "cell_type": "code", 233 | "execution_count": 8, 234 | "metadata": { 235 | "collapsed": false 236 | }, 237 | "outputs": [], 238 | "source": [ 239 | "y_train = np.zeros((num_train, 10))\n", 240 | "y_test = np.zeros((num_test,10))" 241 | ] 242 | }, 243 | { 244 | "cell_type": "code", 245 | "execution_count": 9, 246 | "metadata": { 247 | "collapsed": false 248 | }, 249 | "outputs": [ 250 | { 251 | "data": { 252 | "text/plain": [ 253 | "array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])" 254 | ] 255 | }, 256 | "execution_count": 9, 257 | "metadata": {}, 258 | "output_type": "execute_result" 259 | } 260 | ], 261 | "source": [ 262 | "y_train[0]" 263 | ] 264 | }, 265 | { 266 | "cell_type": "code", 267 | "execution_count": 10, 268 | "metadata": { 269 | "collapsed": false 270 | }, 271 | "outputs": [], 272 | "source": [ 273 | "for i in range(num_train):\n", 274 | " y_train[i][y0_train[i]] = 1\n", 275 | "for i in range(num_test):\n", 276 | " y_test[i][y0_test[i]] = 1" 277 | ] 278 | }, 279 | { 280 | "cell_type": "markdown", 281 | "metadata": {}, 282 | "source": [ 283 | "## 建置我們的神經網路" 284 | ] 285 | }, 286 | { 287 | "cell_type": "code", 288 | "execution_count": 11, 289 | "metadata": { 290 | "collapsed": true 291 | }, 292 | "outputs": [], 293 | "source": [ 294 | "model = Sequential()" 295 | ] 296 | }, 297 | { 298 | "cell_type": "code", 299 | "execution_count": 12, 300 | "metadata": { 301 | "collapsed": false 302 | }, 303 | "outputs": [], 304 | "source": [ 305 | "model.add(Dense(input_dim=28*28, output_dim=500))\n", 306 | "model.add(Activation('sigmoid'))" 307 | ] 308 | }, 309 | { 310 | "cell_type": "code", 311 | "execution_count": 13, 312 | "metadata": { 313 | "collapsed": true 314 | }, 315 | "outputs": [], 316 | "source": [ 317 | "model.add(Dense(output_dim=500))\n", 318 | "model.add(Activation('sigmoid'))" 319 | ] 320 | }, 321 | { 322 | "cell_type": "code", 323 | "execution_count": 14, 324 | "metadata": { 325 | "collapsed": true 326 | }, 327 | "outputs": [], 328 | "source": [ 329 | "model.add(Dense(output_dim=10))\n", 330 | "model.add(Activation('softmax'))" 331 | ] 332 | }, 333 | { 334 | "cell_type": "code", 335 | "execution_count": 15, 336 | "metadata": { 337 | "collapsed": false 338 | }, 339 | "outputs": [], 340 | "source": [ 341 | "model.compile(loss='mse', optimizer=SGD(lr=0.1), metrics=['accuracy'])" 342 | ] 343 | }, 344 | { 345 | "cell_type": "markdown", 346 | "metadata": {}, 347 | "source": [ 348 | "## 訓練開始!" 349 | ] 350 | }, 351 | { 352 | "cell_type": "code", 353 | "execution_count": 16, 354 | "metadata": { 355 | "collapsed": false 356 | }, 357 | "outputs": [ 358 | { 359 | "name": "stdout", 360 | "output_type": "stream", 361 | "text": [ 362 | "Epoch 1/20\n", 363 | "60000/60000 [==============================] - 14s - loss: 0.0815 - acc: 0.3736 \n", 364 | "Epoch 2/20\n", 365 | "60000/60000 [==============================] - 14s - loss: 0.0615 - acc: 0.6576 \n", 366 | "Epoch 3/20\n", 367 | "60000/60000 [==============================] - 15s - loss: 0.0441 - acc: 0.7716 \n", 368 | "Epoch 4/20\n", 369 | "60000/60000 [==============================] - 15s - loss: 0.0323 - acc: 0.8389 \n", 370 | "Epoch 5/20\n", 371 | "60000/60000 [==============================] - 15s - loss: 0.0252 - acc: 0.8753 \n", 372 | "Epoch 6/20\n", 373 | "60000/60000 [==============================] - 15s - loss: 0.0210 - acc: 0.8901 \n", 374 | "Epoch 7/20\n", 375 | "60000/60000 [==============================] - 15s - loss: 0.0185 - acc: 0.8982 \n", 376 | "Epoch 8/20\n", 377 | "60000/60000 [==============================] - 15s - loss: 0.0167 - acc: 0.9056 \n", 378 | "Epoch 9/20\n", 379 | "60000/60000 [==============================] - 15s - loss: 0.0154 - acc: 0.9113 \n", 380 | "Epoch 10/20\n", 381 | "60000/60000 [==============================] - 15s - loss: 0.0144 - acc: 0.9166 \n", 382 | "Epoch 11/20\n", 383 | "60000/60000 [==============================] - 15s - loss: 0.0136 - acc: 0.9210 \n", 384 | "Epoch 12/20\n", 385 | "60000/60000 [==============================] - 15s - loss: 0.0129 - acc: 0.9252 \n", 386 | "Epoch 13/20\n", 387 | "60000/60000 [==============================] - 15s - loss: 0.0123 - acc: 0.9284 \n", 388 | "Epoch 14/20\n", 389 | "60000/60000 [==============================] - 16s - loss: 0.0117 - acc: 0.9320 \n", 390 | "Epoch 15/20\n", 391 | "60000/60000 [==============================] - 15s - loss: 0.0113 - acc: 0.9345 \n", 392 | "Epoch 16/20\n", 393 | "60000/60000 [==============================] - 16s - loss: 0.0108 - acc: 0.9372 \n", 394 | "Epoch 17/20\n", 395 | "60000/60000 [==============================] - 16s - loss: 0.0104 - acc: 0.9396 \n", 396 | "Epoch 18/20\n", 397 | "60000/60000 [==============================] - 16s - loss: 0.0101 - acc: 0.9420 \n", 398 | "Epoch 19/20\n", 399 | "60000/60000 [==============================] - 16s - loss: 0.0097 - acc: 0.9441 \n", 400 | "Epoch 20/20\n", 401 | "60000/60000 [==============================] - 16s - loss: 0.0094 - acc: 0.9454 \n" 402 | ] 403 | }, 404 | { 405 | "data": { 406 | "text/plain": [ 407 | "" 408 | ] 409 | }, 410 | "execution_count": 16, 411 | "metadata": {}, 412 | "output_type": "execute_result" 413 | } 414 | ], 415 | "source": [ 416 | "model.fit(x_train, y_train, batch_size=100, nb_epoch=20)" 417 | ] 418 | }, 419 | { 420 | "cell_type": "markdown", 421 | "metadata": {}, 422 | "source": [ 423 | "## 看看訓練成績" 424 | ] 425 | }, 426 | { 427 | "cell_type": "code", 428 | "execution_count": 17, 429 | "metadata": { 430 | "collapsed": false 431 | }, 432 | "outputs": [ 433 | { 434 | "name": "stdout", 435 | "output_type": "stream", 436 | "text": [ 437 | " 9952/10000 [============================>.] - ETA: 0s" 438 | ] 439 | } 440 | ], 441 | "source": [ 442 | "score = model.evaluate(x_test, y_test)" 443 | ] 444 | }, 445 | { 446 | "cell_type": "code", 447 | "execution_count": 18, 448 | "metadata": { 449 | "collapsed": false 450 | }, 451 | "outputs": [ 452 | { 453 | "name": "stdout", 454 | "output_type": "stream", 455 | "text": [ 456 | "Total Loss on Testing Set: 0.0106894730295\n", 457 | "Accuracy of Testing Set: 0.9333\n" 458 | ] 459 | } 460 | ], 461 | "source": [ 462 | "print(\"Total Loss on Testing Set:\", score[0])\n", 463 | "print(\"Accuracy of Testing Set:\", score[1])" 464 | ] 465 | }, 466 | { 467 | "cell_type": "markdown", 468 | "metadata": {}, 469 | "source": [ 470 | "看來還挺準的, 我們抽查幾個看看。" 471 | ] 472 | }, 473 | { 474 | "cell_type": "markdown", 475 | "metadata": {}, 476 | "source": [ 477 | "## 看看訓練成效" 478 | ] 479 | }, 480 | { 481 | "cell_type": "code", 482 | "execution_count": 24, 483 | "metadata": { 484 | "collapsed": false 485 | }, 486 | "outputs": [ 487 | { 488 | "name": "stdout", 489 | "output_type": "stream", 490 | "text": [ 491 | " 9984/10000 [============================>.] - ETA: 0s" 492 | ] 493 | } 494 | ], 495 | "source": [ 496 | "result = model.predict_classes(x_test)" 497 | ] 498 | }, 499 | { 500 | "cell_type": "markdown", 501 | "metadata": {}, 502 | "source": [ 503 | "指定要看第幾筆訓練資料 (0 到 9999):" 504 | ] 505 | }, 506 | { 507 | "cell_type": "code", 508 | "execution_count": 25, 509 | "metadata": { 510 | "collapsed": true 511 | }, 512 | "outputs": [], 513 | "source": [ 514 | "no_test = 888" 515 | ] 516 | }, 517 | { 518 | "cell_type": "markdown", 519 | "metadata": {}, 520 | "source": [ 521 | "先看一下長像 (記得要用原來的 `x0_test` 才可以)" 522 | ] 523 | }, 524 | { 525 | "cell_type": "code", 526 | "execution_count": 26, 527 | "metadata": { 528 | "collapsed": false 529 | }, 530 | "outputs": [ 531 | { 532 | "data": { 533 | "text/plain": [ 534 | "" 535 | ] 536 | }, 537 | "execution_count": 26, 538 | "metadata": {}, 539 | "output_type": "execute_result" 540 | }, 541 | { 542 | "data": { 543 | "image/png": "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\nAElFTkSuQmCC\n", 544 | "text/plain": [ 545 | "" 546 | ] 547 | }, 548 | "metadata": {}, 549 | "output_type": "display_data" 550 | } 551 | ], 552 | "source": [ 553 | "plt.imshow(x0_test[no_test], cmap=\"Greys\")" 554 | ] 555 | }, 556 | { 557 | "cell_type": "code", 558 | "execution_count": 29, 559 | "metadata": { 560 | "collapsed": false 561 | }, 562 | "outputs": [ 563 | { 564 | "name": "stdout", 565 | "output_type": "stream", 566 | "text": [ 567 | "我們的神經網路說是: 2\n" 568 | ] 569 | } 570 | ], 571 | "source": [ 572 | "nn_predict = result[no_test]\n", 573 | "print('我們的神經網路說是:', nn_predict)" 574 | ] 575 | }, 576 | { 577 | "cell_type": "markdown", 578 | "metadata": {}, 579 | "source": [ 580 | "## 把我們學好的成果存起來\n", 581 | "\n", 582 | "我們日後要用這個神經網路, 在正常狀態下都不會想再訓練一次, 所以我們來學學怎麼把成果存起來。" 583 | ] 584 | }, 585 | { 586 | "cell_type": "code", 587 | "execution_count": 30, 588 | "metadata": { 589 | "collapsed": true 590 | }, 591 | "outputs": [], 592 | "source": [ 593 | "model_json = model.to_json()\n", 594 | "open('handwriting_model_architecture.json', 'w').write(model_json)\n", 595 | "model.save_weights('handwriting_model_weights.h5')" 596 | ] 597 | } 598 | ], 599 | "metadata": { 600 | "anaconda-cloud": {}, 601 | "kernelspec": { 602 | "display_name": "Python [Root]", 603 | "language": "python", 604 | "name": "Python [Root]" 605 | }, 606 | "language_info": { 607 | "codemirror_mode": { 608 | "name": "ipython", 609 | "version": 3 610 | }, 611 | "file_extension": ".py", 612 | "mimetype": "text/x-python", 613 | "name": "python", 614 | "nbconvert_exporter": "python", 615 | "pygments_lexer": "ipython3", 616 | "version": "3.5.2" 617 | } 618 | }, 619 | "nbformat": 4, 620 | "nbformat_minor": 0 621 | } 622 | -------------------------------------------------------------------------------- /Deep Learning/用神經網路做手寫辨識_使用篇.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# 手寫辨識使用篇\n", 8 | "\n", 9 | "我們在前面的[手寫辨識](手寫辨識.ipynb)訓練好我們的神經網路, 可以做手寫辨識 0-9 的數字。現在我們要來用用看。" 10 | ] 11 | }, 12 | { 13 | "cell_type": "code", 14 | "execution_count": 1, 15 | "metadata": { 16 | "collapsed": false 17 | }, 18 | "outputs": [ 19 | { 20 | "name": "stderr", 21 | "output_type": "stream", 22 | "text": [ 23 | "Using Theano backend.\n" 24 | ] 25 | } 26 | ], 27 | "source": [ 28 | "%matplotlib inline\n", 29 | "import numpy as np\n", 30 | "import matplotlib.pyplot as plt\n", 31 | "from keras.models import Sequential\n", 32 | "from keras.models import model_from_json\n", 33 | "from keras.layers.core import Dense, Activation\n", 34 | "from keras.optimizers import SGD\n", 35 | "from keras.datasets import mnist\n", 36 | "from ipywidgets import interact_manual" 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "metadata": {}, 42 | "source": [ 43 | "## 找回我們訓練好的神經網路" 44 | ] 45 | }, 46 | { 47 | "cell_type": "code", 48 | "execution_count": 3, 49 | "metadata": { 50 | "collapsed": false 51 | }, 52 | "outputs": [], 53 | "source": [ 54 | "model = model_from_json(open('handwriting_model_architecture.json').read())\n", 55 | "model.load_weights('handwriting_model_weights.h5')" 56 | ] 57 | }, 58 | { 59 | "cell_type": "code", 60 | "execution_count": 4, 61 | "metadata": { 62 | "collapsed": false 63 | }, 64 | "outputs": [], 65 | "source": [ 66 | "model.compile(loss='mse', optimizer=SGD(lr=0.1))" 67 | ] 68 | }, 69 | { 70 | "cell_type": "markdown", 71 | "metadata": {}, 72 | "source": [ 73 | "## 備好我們的訓練資料\n", 74 | "\n", 75 | "我們還是要備好兩種格式:\n", 76 | "\n", 77 | "* x0_test: 28x28 矩陣, 可直接畫\n", 78 | "* x_test: 784 (=28x28) 維向量, 可送進我們神經網路" 79 | ] 80 | }, 81 | { 82 | "cell_type": "code", 83 | "execution_count": 5, 84 | "metadata": { 85 | "collapsed": false 86 | }, 87 | "outputs": [], 88 | "source": [ 89 | "(_,_), (x0_test, _) = mnist.load_data()\n", 90 | "\n", 91 | "num_test = len(x0_test)\n", 92 | "x_test = x0_test.reshape(num_test, 28*28)" 93 | ] 94 | }, 95 | { 96 | "cell_type": "markdown", 97 | "metadata": {}, 98 | "source": [ 99 | "## 測試資料送進去辨識\n", 100 | "\n", 101 | "我們用 `predict_classes` 可以直接找結果向量裡面最大的, 也就是說回傳值就是預測的答案。" 102 | ] 103 | }, 104 | { 105 | "cell_type": "code", 106 | "execution_count": 6, 107 | "metadata": { 108 | "collapsed": false 109 | }, 110 | "outputs": [ 111 | { 112 | "name": "stdout", 113 | "output_type": "stream", 114 | "text": [ 115 | " 9984/10000 [============================>.] - ETA: 0s" 116 | ] 117 | } 118 | ], 119 | "source": [ 120 | "result = model.predict_classes(x_test)" 121 | ] 122 | }, 123 | { 124 | "cell_type": "markdown", 125 | "metadata": {}, 126 | "source": [ 127 | "## 欣賞辨識結果" 128 | ] 129 | }, 130 | { 131 | "cell_type": "code", 132 | "execution_count": 7, 133 | "metadata": { 134 | "collapsed": true 135 | }, 136 | "outputs": [], 137 | "source": [ 138 | "def 辨識(測試編號):\n", 139 | " plt.imshow(x0_test[測試編號], cmap=\"Greys\")\n", 140 | " print(\"神經網路判斷為:\", result[測試編號])" 141 | ] 142 | }, 143 | { 144 | "cell_type": "code", 145 | "execution_count": 8, 146 | "metadata": { 147 | "collapsed": false 148 | }, 149 | "outputs": [ 150 | { 151 | "name": "stdout", 152 | "output_type": "stream", 153 | "text": [ 154 | "神經網路判斷為: 1\n" 155 | ] 156 | }, 157 | { 158 | "data": { 159 | "image/png": "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\n", 160 | "text/plain": [ 161 | "" 162 | ] 163 | }, 164 | "metadata": {}, 165 | "output_type": "display_data" 166 | } 167 | ], 168 | "source": [ 169 | "interact_manual(辨識, 測試編號 = (0, num_test-1));" 170 | ] 171 | }, 172 | { 173 | "cell_type": "code", 174 | "execution_count": null, 175 | "metadata": { 176 | "collapsed": true 177 | }, 178 | "outputs": [], 179 | "source": [] 180 | } 181 | ], 182 | "metadata": { 183 | "anaconda-cloud": {}, 184 | "kernelspec": { 185 | "display_name": "Python [Root]", 186 | "language": "python", 187 | "name": "Python [Root]" 188 | }, 189 | "language_info": { 190 | "codemirror_mode": { 191 | "name": "ipython", 192 | "version": 3 193 | }, 194 | "file_extension": ".py", 195 | "mimetype": "text/x-python", 196 | "name": "python", 197 | "nbconvert_exporter": "python", 198 | "pygments_lexer": "ipython3", 199 | "version": "3.5.2" 200 | } 201 | }, 202 | "nbformat": 4, 203 | "nbformat_minor": 0 204 | } 205 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Days on Jupyter 2 | 3 | 這原本是在 Taipei.py 隨意分享幾個小主題, 目的是讓大家看看用 Jupyter 可以很自由的去學習, 試驗一些想法, 甚至做個 GUI 的示範。 4 | 5 | 於是我就想, 也許可以把零零總總的東西放在這裡。有時是一個小問題用 Jupyter 來做, 有時試試一個小功能, 有時做一些小小的 projects。 6 | 7 | 總之, 這是不正式任意的試驗。有從別的地方看來的 codes, 我會標上讓大家找到專業正確的解答。 8 | -------------------------------------------------------------------------------- /小實作問題/天使隊的平均 Pandas.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# 天使隊自 1961 每年勝場數" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "## 問題\n", 15 | "\n" 16 | ] 17 | }, 18 | { 19 | "cell_type": "code", 20 | "execution_count": 1, 21 | "metadata": { 22 | "collapsed": false 23 | }, 24 | "outputs": [ 25 | { 26 | "name": "stdout", 27 | "output_type": "stream", 28 | "text": [ 29 | "Populating the interactive namespace from numpy and matplotlib\n" 30 | ] 31 | } 32 | ], 33 | "source": [ 34 | "%pylab inline\n", 35 | "import pandas as pd\n", 36 | "import seaborn as sns" 37 | ] 38 | }, 39 | { 40 | "cell_type": "code", 41 | "execution_count": 2, 42 | "metadata": { 43 | "collapsed": true 44 | }, 45 | "outputs": [], 46 | "source": [ 47 | "y = [70, 86, 70, 82, 75, 80, 84, 67, 71, 86, 76, 75, 79, 68, 72, 76, 74, 87, 88, 65, 51, 93, 70, \n", 48 | " 81, 90, 92, 75, 75, 91, 80, 81, 72, 71, 47, 78, 70, 84, 85, 70, 82, 75, 99, 77, 92, 95, 89,\n", 49 | " 94, 100, 97, 80, 86, 89, 78, 98, 85]" 50 | ] 51 | }, 52 | { 53 | "cell_type": "code", 54 | "execution_count": 3, 55 | "metadata": { 56 | "collapsed": true 57 | }, 58 | "outputs": [], 59 | "source": [ 60 | "x = arange(1961, 2016)" 61 | ] 62 | }, 63 | { 64 | "cell_type": "code", 65 | "execution_count": 9, 66 | "metadata": { 67 | "collapsed": false 68 | }, 69 | "outputs": [ 70 | { 71 | "data": { 72 | "text/plain": [ 73 | "array([1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971,\n", 74 | " 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982,\n", 75 | " 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993,\n", 76 | " 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,\n", 77 | " 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015])" 78 | ] 79 | }, 80 | "execution_count": 9, 81 | "metadata": {}, 82 | "output_type": "execute_result" 83 | } 84 | ], 85 | "source": [ 86 | "x" 87 | ] 88 | }, 89 | { 90 | "cell_type": "code", 91 | "execution_count": 4, 92 | "metadata": { 93 | "collapsed": false 94 | }, 95 | "outputs": [], 96 | "source": [ 97 | "angels = pd.Series(y, index=x)" 98 | ] 99 | }, 100 | { 101 | "cell_type": "code", 102 | "execution_count": 10, 103 | "metadata": { 104 | "collapsed": false 105 | }, 106 | "outputs": [ 107 | { 108 | "data": { 109 | "text/plain": [ 110 | "" 111 | ] 112 | }, 113 | "execution_count": 10, 114 | "metadata": {}, 115 | "output_type": "execute_result" 116 | }, 117 | { 118 | "data": { 119 | "image/png": "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\nAAAL/D8PIqu5iCv/yQAAAABJRU5ErkJggg==\n", 120 | "text/plain": [ 121 | "" 122 | ] 123 | }, 124 | "metadata": {}, 125 | "output_type": "display_data" 126 | } 127 | ], 128 | "source": [ 129 | "angels.plot()" 130 | ] 131 | }, 132 | { 133 | "cell_type": "code", 134 | "execution_count": 6, 135 | "metadata": { 136 | "collapsed": true 137 | }, 138 | "outputs": [], 139 | "source": [ 140 | "r = angels.rolling(window=15)" 141 | ] 142 | }, 143 | { 144 | "cell_type": "code", 145 | "execution_count": 12, 146 | "metadata": { 147 | "collapsed": false 148 | }, 149 | "outputs": [ 150 | { 151 | "data": { 152 | "text/plain": [ 153 | "" 154 | ] 155 | }, 156 | "execution_count": 12, 157 | "metadata": {}, 158 | "output_type": "execute_result" 159 | }, 160 | { 161 | "data": { 162 | "image/png": "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\nY/gSERH52P8HokukOMGsBGYAAAAASUVORK5CYII=\n", 163 | "text/plain": [ 164 | "" 165 | ] 166 | }, 167 | "metadata": {}, 168 | "output_type": "display_data" 169 | } 170 | ], 171 | "source": [ 172 | "r.mean().plot(lw=3)" 173 | ] 174 | }, 175 | { 176 | "cell_type": "code", 177 | "execution_count": null, 178 | "metadata": { 179 | "collapsed": true 180 | }, 181 | "outputs": [], 182 | "source": [] 183 | } 184 | ], 185 | "metadata": { 186 | "kernelspec": { 187 | "display_name": "Python [Root]", 188 | "language": "python", 189 | "name": "Python [Root]" 190 | }, 191 | "language_info": { 192 | "codemirror_mode": { 193 | "name": "ipython", 194 | "version": 3 195 | }, 196 | "file_extension": ".py", 197 | "mimetype": "text/x-python", 198 | "name": "python", 199 | "nbconvert_exporter": "python", 200 | "pygments_lexer": "ipython3", 201 | "version": "3.5.2" 202 | } 203 | }, 204 | "nbformat": 4, 205 | "nbformat_minor": 0 206 | } 207 | -------------------------------------------------------------------------------- /小實作問題/模擬考試的成績.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## 模擬考試成績\n", 8 | "\n", 9 | "高老師某課程班上有 92 位同學。期末考平均 50, 標準差 25。試用 Python 來模擬該班成績。" 10 | ] 11 | }, 12 | { 13 | "cell_type": "code", 14 | "execution_count": 1, 15 | "metadata": { 16 | "collapsed": false 17 | }, 18 | "outputs": [ 19 | { 20 | "name": "stdout", 21 | "output_type": "stream", 22 | "text": [ 23 | "Populating the interactive namespace from numpy and matplotlib\n" 24 | ] 25 | } 26 | ], 27 | "source": [ 28 | "%pylab inline\n", 29 | "import scipy.stats as stats" 30 | ] 31 | }, 32 | { 33 | "cell_type": "code", 34 | "execution_count": 2, 35 | "metadata": { 36 | "collapsed": true 37 | }, 38 | "outputs": [], 39 | "source": [ 40 | "a, b = (0 - 50) / 25, (100 - 50) / 25" 41 | ] 42 | }, 43 | { 44 | "cell_type": "code", 45 | "execution_count": 3, 46 | "metadata": { 47 | "collapsed": false 48 | }, 49 | "outputs": [], 50 | "source": [ 51 | "grades = stats.truncnorm(a, b, scale=25).rvs(size=92)+50" 52 | ] 53 | }, 54 | { 55 | "cell_type": "code", 56 | "execution_count": 4, 57 | "metadata": { 58 | "collapsed": false 59 | }, 60 | "outputs": [], 61 | "source": [ 62 | "grades = sorted(grades)" 63 | ] 64 | }, 65 | { 66 | "cell_type": "code", 67 | "execution_count": 5, 68 | "metadata": { 69 | "collapsed": false 70 | }, 71 | "outputs": [], 72 | "source": [ 73 | "gmean = mean(grades)" 74 | ] 75 | }, 76 | { 77 | "cell_type": "code", 78 | "execution_count": 6, 79 | "metadata": { 80 | "collapsed": false 81 | }, 82 | "outputs": [], 83 | "source": [ 84 | "gstd = std(grades)" 85 | ] 86 | }, 87 | { 88 | "cell_type": "code", 89 | "execution_count": 7, 90 | "metadata": { 91 | "collapsed": true 92 | }, 93 | "outputs": [], 94 | "source": [ 95 | "fit = stats.norm.pdf(grades, gmean, gstd)" 96 | ] 97 | }, 98 | { 99 | "cell_type": "code", 100 | "execution_count": 8, 101 | "metadata": { 102 | "collapsed": false 103 | }, 104 | "outputs": [ 105 | { 106 | "data": { 107 | "text/plain": [ 108 | "(array([ 0.00332191, 0.00664382, 0.01107304, 0.01550225, 0.01328765,\n", 109 | " 0.01882417, 0.01439495, 0.00775113, 0.00885843, 0.00221461]),\n", 110 | " array([ 1.3116212 , 11.1278649 , 20.94410861, 30.76035231,\n", 111 | " 40.57659602, 50.39283972, 60.20908343, 70.02532713,\n", 112 | " 79.84157084, 89.65781454, 99.47405825]),\n", 113 | " )" 114 | ] 115 | }, 116 | "execution_count": 8, 117 | "metadata": {}, 118 | "output_type": "execute_result" 119 | }, 120 | { 121 | "data": { 122 | "image/png": "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\n", 123 | "text/plain": [ 124 | "" 125 | ] 126 | }, 127 | "metadata": {}, 128 | "output_type": "display_data" 129 | } 130 | ], 131 | "source": [ 132 | "plot(grades, fit, '-or')\n", 133 | "hist(grades,normed=True) " 134 | ] 135 | }, 136 | { 137 | "cell_type": "markdown", 138 | "metadata": {}, 139 | "source": [ 140 | "### 參考\n", 141 | "\n", 142 | "[1] [畫出 normal distribution](http://stackoverflow.com/questions/36894191/how-to-get-a-normal-distribution-within-a-range-in-numpy)\n", 143 | "\n", 144 | "[2] [SciPy 的 truncnorm](http://stackoverflow.com/questions/36894191/how-to-get-a-normal-distribution-within-a-range-in-numpy)" 145 | ] 146 | }, 147 | { 148 | "cell_type": "code", 149 | "execution_count": null, 150 | "metadata": { 151 | "collapsed": true 152 | }, 153 | "outputs": [], 154 | "source": [] 155 | } 156 | ], 157 | "metadata": { 158 | "kernelspec": { 159 | "display_name": "Python 3", 160 | "language": "python", 161 | "name": "python3" 162 | }, 163 | "language_info": { 164 | "codemirror_mode": { 165 | "name": "ipython", 166 | "version": 3 167 | }, 168 | "file_extension": ".py", 169 | "mimetype": "text/x-python", 170 | "name": "python", 171 | "nbconvert_exporter": "python", 172 | "pygments_lexer": "ipython3", 173 | "version": "3.5.1" 174 | } 175 | }, 176 | "nbformat": 4, 177 | "nbformat_minor": 0 178 | } 179 | -------------------------------------------------------------------------------- /小實作問題/用 Sympy 算個積分.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# 用 Sympy 算個積分\n", 8 | "\n", 9 | "我們要用 Python 算\n", 10 | "\n", 11 | "$$\\int \\frac{1}{1 + \\sin x - \\cos x} \\, dx$$\n", 12 | "\n", 13 | "提示: 手算的話要把 $\\sin x$, $\\cos x$ 換成 $\\tan \\frac{x}{2}$。" 14 | ] 15 | }, 16 | { 17 | "cell_type": "code", 18 | "execution_count": 2, 19 | "metadata": { 20 | "collapsed": true 21 | }, 22 | "outputs": [], 23 | "source": [ 24 | "from sympy import *" 25 | ] 26 | }, 27 | { 28 | "cell_type": "code", 29 | "execution_count": 3, 30 | "metadata": { 31 | "collapsed": true 32 | }, 33 | "outputs": [], 34 | "source": [ 35 | "# 美化輸出\n", 36 | "init_printing()" 37 | ] 38 | }, 39 | { 40 | "cell_type": "code", 41 | "execution_count": 4, 42 | "metadata": { 43 | "collapsed": true 44 | }, 45 | "outputs": [], 46 | "source": [ 47 | "x = symbols('x')" 48 | ] 49 | }, 50 | { 51 | "cell_type": "code", 52 | "execution_count": 5, 53 | "metadata": { 54 | "collapsed": true 55 | }, 56 | "outputs": [], 57 | "source": [ 58 | "f = 1/(1+sin(x)-cos(x))" 59 | ] 60 | }, 61 | { 62 | "cell_type": "code", 63 | "execution_count": 6, 64 | "metadata": { 65 | "collapsed": false 66 | }, 67 | "outputs": [ 68 | { 69 | "data": { 70 | "image/png": "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\n", 71 | "text/latex": [ 72 | "$$- \\log{\\left (\\tan{\\left (\\frac{x}{2} \\right )} + 1 \\right )} + \\log{\\left (\\tan{\\left (\\frac{x}{2} \\right )} \\right )}$$" 73 | ], 74 | "text/plain": [ 75 | " ⎛ ⎛x⎞ ⎞ ⎛ ⎛x⎞⎞\n", 76 | "- log⎜tan⎜─⎟ + 1⎟ + log⎜tan⎜─⎟⎟\n", 77 | " ⎝ ⎝2⎠ ⎠ ⎝ ⎝2⎠⎠" 78 | ] 79 | }, 80 | "execution_count": 6, 81 | "metadata": {}, 82 | "output_type": "execute_result" 83 | } 84 | ], 85 | "source": [ 86 | "integrate(f)" 87 | ] 88 | } 89 | ], 90 | "metadata": { 91 | "kernelspec": { 92 | "display_name": "Python [Root]", 93 | "language": "python", 94 | "name": "Python [Root]" 95 | }, 96 | "language_info": { 97 | "codemirror_mode": { 98 | "name": "ipython", 99 | "version": 3 100 | }, 101 | "file_extension": ".py", 102 | "mimetype": "text/x-python", 103 | "name": "python", 104 | "nbconvert_exporter": "python", 105 | "pygments_lexer": "ipython3", 106 | "version": "3.5.2" 107 | } 108 | }, 109 | "nbformat": 4, 110 | "nbformat_minor": 0 111 | } 112 | --------------------------------------------------------------------------------