Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save mxl00474/584ba89cac64dca7dcf5 to your computer and use it in GitHub Desktop.

Select an option

Save mxl00474/584ba89cac64dca7dcf5 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 微分処理のテスト"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## sift.pyをインポート"
]
},
{
"cell_type": "code",
"execution_count": 136,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"/Users/noguchi_osamu/PycharmProjects/mps_20160220/noguchi\n"
]
}
],
"source": [
"%cd ~/PycharmProjects/mps_20160220/noguchi"
]
},
{
"cell_type": "code",
"execution_count": 137,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[34m__pycache__\u001b[m\u001b[m/ \u001b[34mimg\u001b[m\u001b[m/ sift.py\r\n"
]
}
],
"source": [
"%ls"
]
},
{
"cell_type": "code",
"execution_count": 138,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from PIL import Image\n",
"import numpy as np\n",
"from scipy.ndimage.filters import gaussian_filter\n",
"import matplotlib.pyplot as plt\n",
"from collections import OrderedDict"
]
},
{
"cell_type": "code",
"execution_count": 139,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<module 'sift' from '/Users/noguchi_osamu/PycharmProjects/mps_20160220/noguchi/sift.py'>"
]
},
"execution_count": 139,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import sys\n",
"#del sys.modules['sift']\n",
"import sift\n",
"sys.modules['sift']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## パラメータを設定"
]
},
{
"cell_type": "code",
"execution_count": 140,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"sigma=0.32\n",
"#sigma = 1.6\n",
"s= 3\n",
"k = np.power(2.0, 1.0/s)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## テスト用の条件を設定\n",
"### テスト用の関数を設定"
]
},
{
"cell_type": "code",
"execution_count": 141,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def test(x):\n",
" return np.sin(x)\n",
" #return x ** 3"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### テスト用の刻み幅を設定"
]
},
{
"cell_type": "code",
"execution_count": 142,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def delta(i):\n",
" #return sigma * np.power(k,i)\n",
" return i * sigma"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## テスト用のoctaveを作成 "
]
},
{
"cell_type": "code",
"execution_count": 143,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"octave = OrderedDict()\n",
"for i in range(1, s + 30):\n",
" scale = delta(i)\n",
" v = test(scale)\n",
" octave[scale] = np.array([[v] * 3] * 3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## プロットしてみる"
]
},
{
"cell_type": "code",
"execution_count": 144,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 145,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x10d02c2b0>]"
]
},
"execution_count": 145,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nRUQy6P8Aw8GdCdKk+SoAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10c815390>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x = np.array([_x for _x in octave.keys()])\n",
"y = np.array([_y[0,0] for _y in octave.values()])\n",
"plt.plot(x,y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## ダミーの変数を用いてExtremaSpaceを作成"
]
},
{
"cell_type": "code",
"execution_count": 146,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"dog_space = list(octave)"
]
},
{
"cell_type": "code",
"execution_count": 147,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"ex = sift.ExtremaSpace(dog_space)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 微分(1階・2階)を実行"
]
},
{
"cell_type": "code",
"execution_count": 148,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0. , 0. , 0. ],\n",
" [ 0. , 0. , 0. ],\n",
" [ 0. , 0. , -0.59211674]])"
]
},
"execution_count": 148,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d2x = ex.d2fdx2(1, 1, x[1], x[1]-x[0], x[2]-x[1], octave)\n",
"d2x"
]
},
{
"cell_type": "code",
"execution_count": 149,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x10d1d3c50>]"
]
},
"execution_count": 149,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10cc9b438>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# 1階微分\n",
"a = np.array([ex.dx(1, 1, x[i], x[i+1]-x[i], octave) for i in range(1,30)])\n",
"dy = np.array([_dy[2,0] for _dy in a])\n",
"\n",
"# 2階微分\n",
"a = np.array([ex.d2fdx2(1, 1, x[i], x[i]-x[i-1], x[i+1]-x[i], octave) for i in range(1,30)])\n",
"dyy = np.array([_dy[2,2] for _dy in a])\n",
"\n",
"plt.plot(x[0:29], y[0:29])\n",
"plt.plot(x[0:29], dy[0:29])\n",
"plt.plot(x[0:29], dyy[0:29])"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"## テイラー展開をしてみる\n",
"- テーラー展開式:\n",
"$$ f(x) = f(c) + \\frac{df}{dx}\\big|_c \\cdot (x - c) + \\frac{\\partial^2 f}{\\partial x^2}\\big|_c \\cdot (x-c)^2$$\n",
"- 極値の近似点(テーラー展開式上の極値):\n",
"$$ \\hat{x} = - \\frac{\\partial^2 f}{\\partial x^2}^{-1} \\cdot \\frac{\\partial f}{\\partial x} \\big|_c+ c$$\n",
"$$ f(\\hat{x}) = f(c) - \\frac{1}{2} \\frac{\\partial f}{\\partial x}^T \\frac{\\partial^2 f}{\\partial x^2}^{-1}\\frac{\\partial f}{\\partial x}\\big|_c $$ "
]
},
{
"cell_type": "code",
"execution_count": 152,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x10d4eec18>"
]
},
"execution_count": 152,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10d14f978>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"i = 6 # テーラー展開をする点\n",
"xmax = x[10] # グラフ表示の上限\n",
"\n",
"# (1,1,c)でテーラー展開するために必要な係数を求める。\n",
"# ここでは、x, yは固定としているので、適当に1にしている。\n",
"# また、sigma = x[i], f(c)=y[i]です。\n",
"\n",
"c = np.array([1,1,x[i]])[:, np.newaxis] # c\n",
"fc = y[i] # f(c)\n",
"dc = ex.dx(1, 1, x[i], x[i+1] - x[i], octave) # df/dx_c\n",
"dcc = ex.d2fdx2(1, 1, x[i], x[i]-x[i-1], x[i+1]-x[i], octave) # d2f/dx2_c\n",
"\n",
"# Xを用意(一応、3次元ベクトルとして用意する)\n",
"x1 = np.array(np.arange(0, xmax, 0.1))\n",
"X = np.array([[[1], [1], [_x1]] for _x1 in x1])\n",
"\n",
"# テーラー展開\n",
"Y1 = np.array([(fc + dc.T.dot(_X-c))[0,0] + 0.5 * ((_X-c).T.dot(dcc.dot(_X-c)))[0,0] for _X in X])\n",
"\n",
"# x_hatを求める\n",
"#x_hat = np.linalg.inv(dcc).dot(dc) + c # 本当は逆行列が必要だが、正則でないので計算できない。\n",
"x_hat = -1.0 / dcc[2, 2] * dc[2] + c[2]\n",
"f_hat = fc - 0.5 * dc[2] * dc[2] / dcc[2,2]\n",
"\n",
"# グラフをプロット\n",
"plt.plot(x1, test(x1)) # 元の関数\n",
"plt.plot(x1, Y1) # テーラー展開後の関数\n",
"plt.scatter(x[i], y[i]) # cをプロット\n",
"plt.scatter(x_hat, f_hat) # x_hat, f(x_hat)をプロット\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"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.5.0"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment