{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"PyTorchの使い方.ipynb","provenance":[{"file_id":"1PBQaXFIgATrfFOdmSw5vAebvuAI-Mywy","timestamp":1573733112189}],"collapsed_sections":[]},"kernelspec":{"name":"python3","display_name":"Python 3"},"accelerator":"GPU"},"cells":[{"cell_type":"markdown","metadata":{"id":"N5pc3nNGxG9g","colab_type":"text"},"source":["## PyTorchの使い方\n","カーネルは、Python3を使用します。\n"]},{"cell_type":"markdown","metadata":{"id":"ovf2z-MIBRfm","colab_type":"text"},"source":["### 準備"]},{"cell_type":"code","metadata":{"id":"TGqQ-8ACBN6B","colab_type":"code","colab":{}},"source":["# python用のライブラリ\n","import pandas as pd\n","import numpy as np\n","import seaborn as sns\n","import matplotlib.pyplot as plt \n","%matplotlib inline\n","import torch\n","from torch import nn\n","\n","param = sns.set()"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"bC90KpGe3tpZ","colab_type":"text"},"source":["## 演算\n","\n","行列ベクトル計算でよく使うものは以下の通りです。\n","\n","| 演算子 | 説明 |\n","|---|---|\n","| dot | ベクトルの内積 |\n","| mv | 行列とベクトルの積 |\n","| mm | 行列と行列の積 |"]},{"cell_type":"code","metadata":{"id":"sti90OOQdQil","colab_type":"code","outputId":"7470ac94-6afc-435f-ce89-dd450520c2ee","executionInfo":{"status":"ok","timestamp":1577000337485,"user_tz":-540,"elapsed":1012,"user":{"displayName":"竹本浩","photoUrl":"https://lh3.googleusercontent.com/a-/AAuE7mD1GoteZi9uhXKm6VffZau3pjrrC_zjNvCremTI2A=s64","userId":"00259582923506648077"}},"colab":{"base_uri":"https://localhost:8080/","height":136}},"source":["m = torch.tensor([[1,2], [3, 4], [5, 6]]) # R^{3 x 2}の行列mを生成\n","v = torch.tensor([1, 2]) # R^2 のベクトルを生成\n","print(m)\n","print(v)\n","\n","# 内積\n","d = torch.dot(v, v)\n","print(type(d))\n","print(d)\n","\n","# 行列・ベクトルの積\n","mv = torch.mv(m, v)\n","print(mv)"],"execution_count":2,"outputs":[{"output_type":"stream","text":["tensor([[1, 2],\n"," [3, 4],\n"," [5, 6]])\n","tensor([1, 2])\n","\n","tensor(5)\n","tensor([ 5, 11, 17])\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"-Uny2tLNFb9x","colab_type":"text"},"source":["## 自動微分\n","\n","ニューラルネットでは、目的の関数の値が小さくなるように、目的関数の勾配(変数で微分した値)を求めて、少しずつ変数の値を更新していきます。\n","\n","そのため、自動微分はニューラルネット関連のツールでは必須機能となっています。"]},{"cell_type":"code","metadata":{"id":"GBCKG-2C5jDr","colab_type":"code","outputId":"ecd7cad4-f571-42b3-95fb-3bf880239057","executionInfo":{"status":"ok","timestamp":1577000340162,"user_tz":-540,"elapsed":1017,"user":{"displayName":"竹本浩","photoUrl":"https://lh3.googleusercontent.com/a-/AAuE7mD1GoteZi9uhXKm6VffZau3pjrrC_zjNvCremTI2A=s64","userId":"00259582923506648077"}},"colab":{"base_uri":"https://localhost:8080/","height":34}},"source":["# 求める変数\n","kernel = torch.tensor([2.0],requires_grad=True)\n","bias = torch.tensor([1.0], requires_grad=True)\n","# 観測された値\n","y = torch.Tensor([2])\n","x = torch.Tensor([3])\n","# 予想される値\n","y_pred = kernel * x + bias\n","\n","# 観測値と予想値の2乗平均を損失関数とする\n","loss = torch.mean((y - y_pred)**2)\n","# 勾配を計算\n","loss.backward()\n","print(kernel.grad, bias.grad)"],"execution_count":3,"outputs":[{"output_type":"stream","text":["tensor([30.]) tensor([10.])\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"6KXm1-i1800K","colab_type":"text"},"source":["何が行われいるのか順を追ってみましょう。\n","\n","kernel, biasを微分対象の変数だとわかるようにrequires_grad=Trueを付けます。\n","\n","観測値x, yから xとyの間に以下の関係があると仮定します。\n","$$\n","y = kernel \\, x + bias\n","$$\n","\n","損失関数lossは、観測値と予想値の差の2乗を平均したものとします。\n","ここではxとyのデータ1個なので、平均と言っても値そのものになります。\n","\n","$$\n","loss = (2 - kernel \\times 3 - bias)^2\n","$$\n","\n","lossの微分には、置換関数f(h(x))の微分が次のようになることを利用します。\n","$$\n","\\frac{d f}{d x} = \\frac{d f}{d h} \\frac{d h}{d x}\n","$$\n","\n","最初にlossを変数kernelで偏微分します。\n","$$\n","\\frac{\\partial loss}{\\partial kernel} = \\frac{\\partial loss}{\\partial (2 - kernel \\times 3 - bias)} \\frac{\\partial (2 - kernel \\times 3 - bias)}{\\partial kernel} = 2\\times(2 - 2\\times3 - 1) \\times -3 = 30\n","$$\n","\n","同様にlossを変数biasで偏微分します。\n","$$\n","\\frac{\\partial loss}{\\partial bias} = \\frac{\\partial loss}{\\partial (2 - kernel \\times 3 - bias)} \\frac{\\partial (2 - kernel \\times 3 - bias)}{\\partial bias} = 2\\times(2 - 2\\times3 - 1) \\times -1 = 10\n","$$\n","\n","となり、kernel.gra, bias.gradの結果と一致します。\n","\n"]},{"cell_type":"markdown","metadata":{"id":"_dpPKDxE62TF","colab_type":"text"},"source":["## PyTorchを使った回帰分析\n","\"Deep Learning with JavaScript Neural Networks in TensorFlow.js\"の2章にでてくるファイル転送時間とファイルサイズの関係式を求める回帰分析の例をPyTorchを使って求めてみましょう。\n","\n","まずは、データを定義し、その素性を可視化してみましょう。\n"]},{"cell_type":"code","metadata":{"id":"ePzNyoVs8YPE","colab_type":"code","colab":{}},"source":["trainData = {\n"," 'sizeMB': [0.080, 9.000, 0.001, 0.100, 8.000, 5.000, 0.100, 6.000, 0.050, 0.500, \n"," 0.002, 2.000, 0.005, 10.00, 0.010, 7.000, 6.000, 5.000, 1.000, 1.000],\n"," 'timeMB': [0.135, 0.739, 0.067, 0.126, 0.646, 0.435, 0.069, 0.497, 0.068, 0.116,\n"," 0.070, 0.289, 0.076, 0.744, 0.083, 0.560, 0.480, 0.399, 0.153, 0.149]\n","}\n","testData = {\n"," 'sizeMB': [5.000, 0.200, 0.001, 9.000, 0.002, 0.020, 0.008, 4.000, 0.001, 1.000,\n"," 0.005, 0.080, 0.800, 0.200, 0.050, 7.000, 0.005, 0.002, 8.000, 0.008],\n"," 'timeMB': [0.425, 0.098, 0.052, 0.686, 0.066, 0.078, 0.070, 0.375, 0.058, 0.136,\n"," 0.052, 0.063, 0.183, 0.087, 0.066, 0.558, 0.066, 0.068, 0.610, 0.057]\n","}\n","trainDf = pd.DataFrame(trainData)\n","trainDf['type'] = 'train'\n","testDf = pd.DataFrame(testData)\n","testDf['type'] = 'test'\n","df = trainDf.append(testDf) "],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"_WaBupyj8Yx0","colab_type":"text"},"source":["データは直線上にあるように見え、正の相関があることがわかります。"]},{"cell_type":"code","metadata":{"id":"UgRWPUtt9uVe","colab_type":"code","outputId":"f14ea6d4-8f19-450a-bbc6-32e49dac7b16","executionInfo":{"status":"ok","timestamp":1577000347198,"user_tz":-540,"elapsed":1166,"user":{"displayName":"竹本浩","photoUrl":"https://lh3.googleusercontent.com/a-/AAuE7mD1GoteZi9uhXKm6VffZau3pjrrC_zjNvCremTI2A=s64","userId":"00259582923506648077"}},"colab":{"base_uri":"https://localhost:8080/","height":285}},"source":["sns.scatterplot(x='sizeMB', y='timeMB', hue='type', data=df)\n","plt.show()"],"execution_count":5,"outputs":[{"output_type":"display_data","data":{"image/png":"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\ngg==\n","text/plain":["
"]},"metadata":{"tags":[]}}]},{"cell_type":"markdown","metadata":{"id":"VVvGZtXlaDQN","colab_type":"text"},"source":["### モデルの定義\n","求めたいモデルを定義します。\n","\n","$$\n","kernel \\times sizeMB + bias\n","$$"]},{"cell_type":"code","metadata":{"id":"fwkmlPMLBoBG","colab_type":"code","colab":{}},"source":["def model(sizeMB, kernel, bias):\n"," return kernel * sizeMB + bias"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"-2UGK1Xfab9n","colab_type":"text"},"source":["入力(sizeMB)と出力(timeSec)をPyTorchのテンソルにします。\n","\n","求めたい変数kernel, biasには、初期値として1と0をセットし、requires_grad=Trueで微分対象変数とします。"]},{"cell_type":"code","metadata":{"id":"u5ruKc78DORS","colab_type":"code","colab":{}},"source":["# 入力と出力テンソル\n","sizeMB = torch.Tensor(trainData['sizeMB'])\n","timeSec = torch.Tensor(trainData['timeMB'])\n","\n","# カーネルとバイアス\n","kernel = torch.ones(1, requires_grad=True)\n","bias = torch.zeros(1, requires_grad=True)"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"nNUJrnRubUkl","colab_type":"text"},"source":["### PyTorchでの変数の学習\n","kernelとbiasの値は、学習率(lr)で更新されます。\n","\n","以下の例では100回の更新処理を行います。\n","損失関数の値の変化とkernel, biasの更新状況をみるため、losses, kernels, biases配列に計算結果を保持します。"]},{"cell_type":"code","metadata":{"id":"6oR3mQ8vyohG","colab_type":"code","colab":{}},"source":["# 損失関数の結果ログ\n","losses = []\n","kernels = []\n","biases = []\n","# 学習率\n","lr = 0.01\n","\n","for i in range(100):\n"," kernel.grad = None\n"," bias.grad = None\n","\n"," predict = model(sizeMB, kernel, bias)\n"," loss = torch.mean((timeSec - predict)**2)\n"," loss.backward()\n"," if i%20 == 0:\n"," kernels.append(kernel.item())\n"," biases.append(bias.item())\n"," losses.append(loss.item())\n"," with torch.no_grad():\n"," kernel -= lr * kernel.grad\n"," bias -= lr * bias.grad"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"JfqKyqEFcVKG","colab_type":"text"},"source":["損失関数の値は、17.83から急速に0.014に近づいているのが、以下のグラフでもみて取れます。"]},{"cell_type":"code","metadata":{"id":"0PW3Jt7Azlw6","colab_type":"code","outputId":"d8941818-ee53-41eb-c8ec-e4a76d22bce8","executionInfo":{"status":"ok","timestamp":1577000385870,"user_tz":-540,"elapsed":1013,"user":{"displayName":"竹本浩","photoUrl":"https://lh3.googleusercontent.com/a-/AAuE7mD1GoteZi9uhXKm6VffZau3pjrrC_zjNvCremTI2A=s64","userId":"00259582923506648077"}},"colab":{"base_uri":"https://localhost:8080/","height":102}},"source":["# 損失関数の最初の5個を取り出す\n","losses[:5]"],"execution_count":12,"outputs":[{"output_type":"execute_result","data":{"text/plain":["[17.83876609802246,\n"," 5.787993431091309,\n"," 1.8898894786834717,\n"," 0.6287034749984741,\n"," 0.22041241824626923]"]},"metadata":{"tags":[]},"execution_count":12}]},{"cell_type":"code","metadata":{"id":"04X9QxA308Ao","colab_type":"code","outputId":"530c6d25-11c1-428f-ecbb-30534dbe8bfa","executionInfo":{"status":"ok","timestamp":1577000388364,"user_tz":-540,"elapsed":1085,"user":{"displayName":"竹本浩","photoUrl":"https://lh3.googleusercontent.com/a-/AAuE7mD1GoteZi9uhXKm6VffZau3pjrrC_zjNvCremTI2A=s64","userId":"00259582923506648077"}},"colab":{"base_uri":"https://localhost:8080/","height":268}},"source":["plt.plot(losses)\n","plt.show()"],"execution_count":13,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"tags":[]}}]},{"cell_type":"markdown","metadata":{"id":"7Wsh9Fr0ctZr","colab_type":"text"},"source":["kernelとbiasの結果は、0.079, 0.014となりました。\n"]},{"cell_type":"code","metadata":{"id":"_jpNEZzFHWGT","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":34},"outputId":"a6ebd57f-9f04-4d9c-9f01-9abcf159b287","executionInfo":{"status":"ok","timestamp":1577000391746,"user_tz":-540,"elapsed":1067,"user":{"displayName":"竹本浩","photoUrl":"https://lh3.googleusercontent.com/a-/AAuE7mD1GoteZi9uhXKm6VffZau3pjrrC_zjNvCremTI2A=s64","userId":"00259582923506648077"}}},"source":["print(kernel.item(), bias.item())"],"execution_count":14,"outputs":[{"output_type":"stream","text":["0.07920325547456741 0.014077912084758282\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"kZCifp9ndFaA","colab_type":"text"},"source":["求まったkernel, biasの直線をデータに重ね合わせてみます。\n","100回程度の繰り返しで、結構よい値が求まることが分かります。"]},{"cell_type":"code","metadata":{"id":"5gN_jflp0_ql","colab_type":"code","outputId":"8dd5f723-8626-4660-e5a3-a61a5e9c85e2","executionInfo":{"status":"ok","timestamp":1577000396399,"user_tz":-540,"elapsed":1167,"user":{"displayName":"竹本浩","photoUrl":"https://lh3.googleusercontent.com/a-/AAuE7mD1GoteZi9uhXKm6VffZau3pjrrC_zjNvCremTI2A=s64","userId":"00259582923506648077"}},"colab":{"base_uri":"https://localhost:8080/","height":51}},"source":["x = torch.arange(0, 10, 0.01)\n","y = model(x, kernel, bias)\n","print(x[:5])\n","print(y[:5])"],"execution_count":15,"outputs":[{"output_type":"stream","text":["tensor([0.0000, 0.0100, 0.0200, 0.0300, 0.0400])\n","tensor([0.0141, 0.0149, 0.0157, 0.0165, 0.0172], grad_fn=)\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"6aKxVlk8Qjp_","colab_type":"code","outputId":"612aef58-b060-40af-954c-3cff3787bcc3","executionInfo":{"status":"ok","timestamp":1577000398952,"user_tz":-540,"elapsed":1883,"user":{"displayName":"竹本浩","photoUrl":"https://lh3.googleusercontent.com/a-/AAuE7mD1GoteZi9uhXKm6VffZau3pjrrC_zjNvCremTI2A=s64","userId":"00259582923506648077"}},"colab":{"base_uri":"https://localhost:8080/","height":285}},"source":["ax = sns.lineplot(x=x.detach().numpy(), y=y.detach().numpy())\n","sns.scatterplot(x='sizeMB', y='timeMB', hue='type', data=df, ax=ax)\n","plt.show()"],"execution_count":16,"outputs":[{"output_type":"display_data","data":{"image/png":"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\nALJEAoCsL3a0I8DbtMv0AAAAAElFTkSuQmCC\n","text/plain":["
"]},"metadata":{"tags":[]}}]},{"cell_type":"markdown","metadata":{"id":"a5ZrnpKZdVSx","colab_type":"text"},"source":["### 損失関数の形とkernel, biasの変化\n","kernel, biasを値を変えて損失関数の変化をコンター図にプロットしてみましょう。"]},{"cell_type":"code","metadata":{"id":"cNK1W-3TR16h","colab_type":"code","colab":{}},"source":["# 損失関数のコンター\n","N=20\n","X = np.linspace(-0.05, 0.15, N)\n","Y = np.linspace(-0.1, 0.15, N)\n","\n","def f(x, y):\n"," kernel = torch.Tensor([x])\n"," bias = torch.Tensor([y])\n"," predict = model(sizeMB, kernel, bias)\n"," return torch.mean((timeSec - predict)**2)\n","\n","# kernal, biasの値によって損失関数の値を計算\n","Z = [[f(X[j], Y[i]).numpy() for j in range(N)] for i in range(N)]\n"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"3eFyo9hGd4x6","colab_type":"text"},"source":["0回、20回、40回、60回、80回のkernel, biasをプロットすると、初期値(1,0)から(0.94, -0.89)、(0.089, -0.054)、(0.085, -0.026)、(0.081, -0.0039)と変わっています。"]},{"cell_type":"code","metadata":{"id":"jiNA0oDpeLDS","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":54},"outputId":"c8edfad1-6e08-4ffc-bb3b-5f74f11636a5","executionInfo":{"status":"ok","timestamp":1577000477212,"user_tz":-540,"elapsed":1496,"user":{"displayName":"竹本浩","photoUrl":"https://lh3.googleusercontent.com/a-/AAuE7mD1GoteZi9uhXKm6VffZau3pjrrC_zjNvCremTI2A=s64","userId":"00259582923506648077"}}},"source":["print(list(zip(kernels, biases)))\n"],"execution_count":19,"outputs":[{"output_type":"stream","text":["[(1.0, 0.0), (0.09452224522829056, -0.08938773721456528), (0.08933795243501663, -0.054424118250608444), (0.08519136905670166, -0.02639669179916382), (0.08186755329370499, -0.003930503502488136)]\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"vaAh1li8LPsZ","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":268},"outputId":"ada06287-e966-4262-cbe6-98d9ba921383","executionInfo":{"status":"ok","timestamp":1577000490295,"user_tz":-540,"elapsed":1120,"user":{"displayName":"竹本浩","photoUrl":"https://lh3.googleusercontent.com/a-/AAuE7mD1GoteZi9uhXKm6VffZau3pjrrC_zjNvCremTI2A=s64","userId":"00259582923506648077"}}},"source":["plt.scatter(kernels, biases, color='red')\n","plt.show()"],"execution_count":20,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"tags":[]}}]},{"cell_type":"markdown","metadata":{"id":"sWWbLy2_fT8_","colab_type":"text"},"source":["これをコンター図に重ね合わせると、コンター図のもっとも低い位置(x)に赤丸が近づいているのが分かります。"]},{"cell_type":"code","metadata":{"id":"4X_dK3n3ju1E","colab_type":"code","outputId":"1562de69-50c0-46d3-8ff6-4c62fe0f135d","executionInfo":{"status":"ok","timestamp":1577000493246,"user_tz":-540,"elapsed":1221,"user":{"displayName":"竹本浩","photoUrl":"https://lh3.googleusercontent.com/a-/AAuE7mD1GoteZi9uhXKm6VffZau3pjrrC_zjNvCremTI2A=s64","userId":"00259582923506648077"}},"colab":{"base_uri":"https://localhost:8080/","height":272}},"source":["# コンター図を描画\n","Xs, Ys = np.meshgrid(X, Y)\n","\n","fig, ax = plt.subplots()\n","plt.contourf(Xs, Ys, Z, levels=10, cmap='jet')\n","plt.scatter(kernels[1:], biases[1:], marker='o', color='red')\n","plt.scatter(kernel.item(), bias.item(), marker='x', color='red')\n","plt.colorbar();\n","plt.show()"],"execution_count":21,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"tags":[]}}]},{"cell_type":"markdown","metadata":{"id":"h60t710nItgn","colab_type":"text"},"source":["## オプティマイザーを使った更新\n","PyTorchでは最適に変数を更新してくれるオプティマイザーが提供されています。\n","オプティマイザーと合わせて損失関数も用意されています。\n","\n","先ほどの例をオプティマイザーを使って計算してみましょう。\n","今回は少し多めに1000回の更新処理します。\n"]},{"cell_type":"code","metadata":{"id":"679YJIm6IyrO","colab_type":"code","colab":{}},"source":["from torch import nn, optim\n","\n","# カーネルとバイアス\n","kernel = torch.ones(1, requires_grad=True)\n","bias = torch.zeros(1, requires_grad=True)\n","# 損失関数として平均二乗誤差 (mean-squared error) を使用\n","loss_fn = nn.MSELoss()\n","#loss_fn = nn.L1Loss()"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"kPpMbKRkIzKt","colab_type":"code","colab":{}},"source":["# オプティマイザーとして最も簡単な確率的勾配法(Stochastic Gradient Descent)を使用\n","optimizer = optim.SGD((kernel, bias), lr=0.01)"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"B6I2CydLI5Ro","colab_type":"code","colab":{}},"source":["# 損失関数の結果ログ\n","losses = []\n","\n","for i in range(1000):\n"," optimizer.zero_grad() # 勾配をゼロクリア\n"," predict = model(sizeMB, kernel, bias) # 予測値を求める\n"," loss = loss_fn(timeSec, predict) # 損失値を求める\n"," loss.backward() # 損失関数の勾配を求める\n"," optimizer.step() # オプティマイザーで変数を更新\n"," losses.append(loss.item())"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"GGCh1Nsfhh6R","colab_type":"text"},"source":["計算結果は、kernel=0.0684、bias=0.0868となりました。"]},{"cell_type":"code","metadata":{"id":"71OESRvjI82W","colab_type":"code","outputId":"094ff602-300e-45ee-c6c4-073aceab4281","executionInfo":{"status":"ok","timestamp":1577000506923,"user_tz":-540,"elapsed":1331,"user":{"displayName":"竹本浩","photoUrl":"https://lh3.googleusercontent.com/a-/AAuE7mD1GoteZi9uhXKm6VffZau3pjrrC_zjNvCremTI2A=s64","userId":"00259582923506648077"}},"colab":{"base_uri":"https://localhost:8080/","height":268}},"source":["plt.plot(losses)\n","plt.show()"],"execution_count":25,"outputs":[{"output_type":"display_data","data":{"image/png":"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\nGHqP/OY3v9HDDz+snJyc8GtOrvf06dNKT0/X66+/rj//+c8aPHiwfvazn2ngwIHX/UybppnQn3eP\nx6NXX31V8+bNU2pqqr766iutX7++23/HiV5zh2hrjLV+R/f8nW7FihVKTU3V448/3tdDuWn+8pe/\n6PDhwyotLe3rofSaYDCo06dP6/vf/77+8Ic/aPHixVqwYIEuXbrU10O7adra2vTmm2/qt7/9rfbt\n26c33nhDixYtcnTNfc2xM3+/36/GxkYFg0F5vV4Fg0GdPXtWfr+/r4cWF+Xl5Tp58qTWrVsnwzDk\n9/tVV1cXXt7c3CzDMJSent7tsv7u4MGDOn78uCZOnChJamho0OzZszVz5kxH1iu1f3aTkpI0depU\nSdIPfvADZWRkaODAgdf9TJummdCf9yNHjujs2bPKy8uTJOXl5WnQoEEaMGCAY2vu0F1WdVdjrPU7\nduaflZWl3Nxc7dy5U5K0c+dO5ebmJtSfg9ezZs0aHT58WBUVFUpJSZEk3XHHHfr666/16aefSpJ+\n//vfq7Cw8IbL+rsnn3xS+/fv1969e7V3717deuut2rBhg+bMmePIeqX2NtWECRP08ccfS2o/oyMQ\nCGj06NHX/Uwn+uf91ltvVUNDg/7xj39Iko4fP65AIKBRo0Y5tuYO3dUR7bJIOPrLXI4fP66lS5fq\n4sWLGjp0qMrLy/Wd73ynr4cVk2PHjmnq1KkaPXq0Bg4cKEnKyclRRUWFPvvsM5WVlenKlSsaMWKE\nfv3rX+uWW26RpG6XJZL8/HytW7dOY8aMcXS9p0+f1s9//nNduHBBSUlJWrRokR544IFuP9OJ/nn/\n4x//qLfeekseT/s3UC1cuFCTJk1yVM0rV65UdXW1zp07p4yMDKWnp2vXrl1R1xhL/Y4OfwCAPce2\nfQAA10f4A4ALEf4A4EKEPwC4EOEPAC5E+AOACxH+AOBChD8AuND/BwJFrs9aSC+SAAAAAElFTkSu\nQmCC\n","text/plain":["
"]},"metadata":{"tags":[]}}]},{"cell_type":"code","metadata":{"id":"9D0UhbS6JGch","colab_type":"code","outputId":"8c668231-32bf-4beb-95bd-95d601244fb8","executionInfo":{"status":"ok","timestamp":1577000508730,"user_tz":-540,"elapsed":704,"user":{"displayName":"竹本浩","photoUrl":"https://lh3.googleusercontent.com/a-/AAuE7mD1GoteZi9uhXKm6VffZau3pjrrC_zjNvCremTI2A=s64","userId":"00259582923506648077"}},"colab":{"base_uri":"https://localhost:8080/","height":34}},"source":["print(kernel, bias)"],"execution_count":26,"outputs":[{"output_type":"stream","text":["tensor([0.0684], requires_grad=True) tensor([0.0868], requires_grad=True)\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"deOmeYQrOIBj","colab_type":"text"},"source":["## 最小二乗法との比較\n","先ほどの転送時間と転送量の関係を最小二乗法で求めてみましょう。\n","\n","回帰直線の関係式は、以下のようになります。\n","$$\n","Y = A X\n","$$\n","この時、Xを求めるにはAの逆行列を使用します。\n","$$\n","X = A^{-1} Y\n","$$\n","\n","AのSVD分解の結果U, S, Vを使って、\n","$$\n","A = U S V^T\n","$$\n","Aの疑似逆列は以下のように求まります。\n","$$\n","A^{-1} = V S^{-1} U^T\n","$$"]},{"cell_type":"markdown","metadata":{"id":"Rou9w_sIT-OD","colab_type":"text"},"source":["### データーの加工\n","観測されたデータをマトリック表現に変換します。\n","\n","$$\n","\\left(\n"," \\begin{array}{c}\n"," y_1 \\\\\n"," y_2 \\\\\n"," : \\\\\n"," y_{20}\n"," \\end{array}\n"," \\right) = \\left[\n"," \\begin{array}{cc}\n"," x_1 & 1 \\\\\n"," x_2 & 1 \\\\\n"," : \\\\\n"," x_{20} & 1\n"," \\end{array}\n"," \\right] \\left(\n"," \\begin{array}{c}\n"," kernel \\\\\n"," bias\n"," \\end{array}\n"," \\right)\n","$$\n","\n","リストで表現されたxから列行列にするために、torch.stackを利用します。"]},{"cell_type":"code","metadata":{"id":"upuIUIruJLgm","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":68},"outputId":"19ba4e0d-0bd6-4b5b-8060-b40153fc79ae","executionInfo":{"status":"ok","timestamp":1577000514201,"user_tz":-540,"elapsed":1138,"user":{"displayName":"竹本浩","photoUrl":"https://lh3.googleusercontent.com/a-/AAuE7mD1GoteZi9uhXKm6VffZau3pjrrC_zjNvCremTI2A=s64","userId":"00259582923506648077"}}},"source":["a = torch.tensor([1,2,3])\n","b = torch.tensor([4,5,6])\n","torch.stack([a, b], dim=1)"],"execution_count":27,"outputs":[{"output_type":"execute_result","data":{"text/plain":["tensor([[1, 4],\n"," [2, 5],\n"," [3, 6]])"]},"metadata":{"tags":[]},"execution_count":27}]},{"cell_type":"markdown","metadata":{"id":"lUxYsaVOX20u","colab_type":"text"},"source":["転送時間と転送量の例では、xがsizeMB、yがtimeSecに相当します。\n","\n","最初にマトリックスAを作ります。"]},{"cell_type":"code","metadata":{"id":"e-No2Jiv8bFh","colab_type":"code","colab":{}},"source":["A = torch.stack([sizeMB, torch.ones(20)], dim=1)"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"DLOgy7NRYV8i","colab_type":"text"},"source":["PyTorchで提供されているsvd関数を使ってマトリックスAをSVD分解をします。\n","\n","先の一般逆行列を求めて、timeSecと行列・ベクトル積を行い、kenel, biasを求めてます。"]},{"cell_type":"code","metadata":{"id":"pRF5rbD08beQ","colab_type":"code","colab":{}},"source":["(U, S, V) = torch.svd(A)"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"yRjL0k5t9yad","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":119},"outputId":"a29d1809-8a4d-480d-9a40-c8d746a11ae3","executionInfo":{"status":"ok","timestamp":1577000523651,"user_tz":-540,"elapsed":1317,"user":{"displayName":"竹本浩","photoUrl":"https://lh3.googleusercontent.com/a-/AAuE7mD1GoteZi9uhXKm6VffZau3pjrrC_zjNvCremTI2A=s64","userId":"00259582923506648077"}}},"source":["A_inv = torch.mm(torch.mm(V.t(), torch.diag(1/S)), U.t())\n","print(A_inv)"],"execution_count":30,"outputs":[{"output_type":"stream","text":["tensor([[-0.0125, 0.0251, -0.0128, -0.0124, 0.0209, 0.0083, -0.0124, 0.0125,\n"," -0.0126, -0.0107, -0.0128, -0.0044, -0.0128, 0.0293, -0.0128, 0.0167,\n"," 0.0125, 0.0083, -0.0086, -0.0086],\n"," [ 0.0880, -0.0264, 0.0890, 0.0877, -0.0136, 0.0249, 0.0877, 0.0121,\n"," 0.0884, 0.0826, 0.0890, 0.0634, 0.0890, -0.0393, 0.0889, -0.0008,\n"," 0.0121, 0.0249, 0.0762, 0.0762]])\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"mQlPyivlDRwU","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":34},"outputId":"301acd35-b4db-47d3-d5dd-eece047eb140","executionInfo":{"status":"ok","timestamp":1577000525247,"user_tz":-540,"elapsed":798,"user":{"displayName":"竹本浩","photoUrl":"https://lh3.googleusercontent.com/a-/AAuE7mD1GoteZi9uhXKm6VffZau3pjrrC_zjNvCremTI2A=s64","userId":"00259582923506648077"}}},"source":["torch.mv(A_inv, timeSec)"],"execution_count":31,"outputs":[{"output_type":"execute_result","data":{"text/plain":["tensor([0.0684, 0.0868])"]},"metadata":{"tags":[]},"execution_count":31}]},{"cell_type":"code","metadata":{"id":"CSqynjAbKPTB","colab_type":"code","colab":{}},"source":[""],"execution_count":0,"outputs":[]}]}