Skip to content

Instantly share code, notes, and snippets.

@yumatsuoka
Last active August 14, 2016 18:19
Show Gist options
  • Save yumatsuoka/90913c3141c9799cd0cdf8bb1ef80404 to your computer and use it in GitHub Desktop.
Save yumatsuoka/90913c3141c9799cd0cdf8bb1ef80404 to your computer and use it in GitHub Desktop.
apply 3 layer neural network to 'XOR problem' and 'UCI Iris dataset'.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 非線形問題を解くNeuralNetwork"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# -*-coding:utf-8-*-\n",
"\n",
"from __future__ import absolute_import\n",
"from __future__ import division\n",
"from __future__ import print_function\n",
"\n",
"%matplotlib inline\n",
"import six, math, random, time\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 非線形性のNeural Net"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"class InputLayer:\n",
" \"\"\"\n",
" Neural netの入力層の機能を持つクラス\n",
" コンストラクタの引数:入力データの次元dim(int)\n",
" \"\"\"\n",
" def __init__(self, dim):\n",
" self.dim = dim\n",
" self.data = [0.0 for i in six.moves.range(self.dim)]\n",
"\n",
" def forward(self):\n",
" pass\n",
"\n",
" def backward(self):\n",
" pass\n",
"\n",
" def updateWeight(self, alpha):\n",
" pass\n",
"\n",
"class NeuroLayer:\n",
" \"\"\"\n",
" Neural netの隠れ層の機能をもつクラス(中間層or出力層)\n",
" コンストラクタの引数:入力データの次元dim(int)、データ入力を受ける層preLayer(Object)\\\n",
" 重み初期値を決める乱数のシード(double)、バイアスの初期値bias(double)\\\n",
" 重み初期値の範囲randA~randB(double)\n",
" \"\"\"\n",
" def __init__(self, dim, preLayer, rand_choice, bias, randA, randB):\n",
" self.dim = dim\n",
" self.preLayer = preLayer\n",
" self.data = [0.0 for i in six.moves.range(self.dim)]\n",
" self.rand_choice = rand_choice\n",
" self.weight = [[rand_choice(randA, randB)\\\n",
" for i in six.moves.range(self.preLayer.dim)]\\\n",
" for j in six.moves.range(self.dim)]\n",
" self.bias = [bias for i in six.moves.range(self.dim)]\n",
" self.nextLayer = None\n",
" self.preLayer.nextLayer = self\n",
" self.diff = [0.0 for i in six.moves.range(self.preLayer.dim)]\n",
" self.diffWeight = [[0.0 for i in six.moves.range(self.preLayer.dim)]\\\n",
" for j in six.moves.range(self.dim)]\n",
" self.diffBias = [0.0 for i in six.moves.range(self.dim)]\n",
"\n",
" def forward(self):\n",
" temp = [0.0 for i in six.moves.range(self.dim)]\n",
" for m in six.moves.range(self.dim):\n",
" for p in six.moves.range(self.preLayer.dim):\n",
" temp[m] += self.preLayer.data[p] * self.weight[m][p]\n",
" self.data[m] = temp[m] + self.bias[m]\n",
"\n",
" def backward(self):\n",
" for m in six.moves.range(self.dim):\n",
" self.diffBias[m] += self.nextLayer.diff[m] * 1\n",
" for p in six.moves.range(self.preLayer.dim):\n",
" for m in six.moves.range(self.dim):\n",
" self.diffWeight[m][p] += self.nextLayer.diff[m] * self.preLayer.data[p]\n",
" self.diff[p] = self.nextLayer.diff[m] * self.weight[m][p]\n",
"\n",
" def updateWeight(self, alpha):\n",
" for m in six.moves.range(self.dim):\n",
" self.bias[m] -= alpha * self.diffBias[m]\n",
" for p in six.moves.range(self.preLayer.dim):\n",
" self.weight[m][p] -= alpha * self.diffWeight[m][p]\n",
" self.diffBias = [0.0 for i in six.moves.range(self.dim)]\n",
" self.diffWeight = [[0.0 for i in six.moves.range(self.preLayer.dim)]\\\n",
" for j in six.moves.range(self.dim)]\n",
"\n",
"class ActionLayer:\n",
" \"\"\"\n",
" 活性関数の機能をもつクラス\n",
" コンストラクタの引数:データ入力を受ける層prelayer(object)\n",
" \"\"\"\n",
" def __init__(self, preLayer):\n",
" self.preLayer = preLayer\n",
" self.dim = self.preLayer.dim\n",
" self.data = [0.0 for i in six.moves.range(self.preLayer.dim)]\n",
" self.nextLayer = None\n",
" self.preLayer.nextLayer = self\n",
" self.diff = [0.0 for i in six.moves.range(self.preLayer.dim)]\n",
"\n",
" def activation(self, x):\n",
" return 1.0 / (1.0 + math.exp(-x))\n",
"\n",
" def deactivation(self, y):\n",
" return y * (1 - y)\n",
"\n",
" def forward(self):\n",
" for m in six.moves.range(self.dim):\n",
" self.data[m] = self.activation(self.preLayer.data[m])\n",
"\n",
" def backward(self):\n",
" for m in six.moves.range(self.dim):\n",
" self.diff[m] = self.nextLayer.diff[m] * self.deactivation(self.data[m])\n",
"\n",
" def updateWeight(self, alpha):\n",
" pass\n",
"\n",
"class ErrorLayer:\n",
" \"\"\"\n",
" 出力層の出力と教師ラベルとの誤差を求める機能をもつクラス\n",
" コンストラクタの引数:入力を受ける層preLayer(Object)\n",
" \"\"\"\n",
" def __init__(self, preLayer):\n",
" self.preLayer = preLayer\n",
" self.dim = self.preLayer.dim\n",
" self.data = 0.0\n",
" self.target = [0.0 for i in six.moves.range(self.dim)]\n",
" self.diff = [0.0 for i in six.moves.range(self.preLayer.dim)]\n",
" self.preLayer.nextLayer = self\n",
" self.result = [0.0 for i in six.moves.range(self.dim)]\n",
"\n",
" def forward(self):\n",
" for m in six.moves.range(self.dim):\n",
" self.data += (self.preLayer.data[m] - self.target[m]) ** 2\n",
" if self.preLayer.data[m] > 0.5:\n",
" self.result[m] = 1.\n",
" else:\n",
" self.result[m] = 0.\n",
"\n",
" def backward(self):\n",
" for p in six.moves.range(self.preLayer.dim):\n",
" self.diff[p] = 2 * (self.preLayer.data[p] - self.target[p])\n",
"\n",
" def updateWeight(self, alpha):\n",
" pass\n",
" #self.data = 0.0"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## training neural net"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def train_nn(alpha, iteration, batchsize, neuralNetwork,\\\n",
" trainingData, trainingTarget, testData, testTarget):\n",
" \"\"\"\n",
" neural netを学習させる\n",
" 入力:学習率appha(double)、学習epoch(int)、neuralnet(list)、\n",
"  学習用データ(list)、学習ラベル(list)、テストデータ(list)、テストラベル(list)\n",
" 出力:それぞれのepoch終了時でのlossの値をもつlist\n",
" \"\"\"\n",
" start_time = time.clock()\n",
" loss_list = [0 for i in six.moves.range(iteration)]\n",
" perm = [i for i in six.moves.range(len(trainingData))]\n",
" random.shuffle(perm)\n",
" \n",
" # train\n",
" for itr in six.moves.range(iteration):\n",
" for i in six.moves.range(0, len(trainingData), batchsize):\n",
" x = [ trainingData[idx] for idx in perm[i: i + batchsize]]\n",
" t = [trainingTarget[idx] for idx in perm[i: i + batchsize]]\n",
" for (d, t) in zip(x, t): \n",
" neuralNetwork[0].data = d\n",
" neuralNetwork[5].target = t\n",
" for layer in neuralNetwork:\n",
" layer.forward()\n",
" for layer in reversed(neuralNetwork):\n",
" layer.backward()\n",
" for layer in neuralNetwork:\n",
" layer.updateWeight(alpha)\n",
" loss_list[itr] = neuralNetwork[5].data\n",
" neuralNetwork[5].data = 0\n",
" \n",
" # test\n",
" correct = 0\n",
" for (d, t) in zip(testData, testTarget):\n",
" neuralNetwork[0].data = d\n",
" neuralNetwork[5].target = t\n",
" for layer in neuralNetwork:\n",
" layer.forward()\n",
" if neuralNetwork[5].result == t:\n",
" correct += 1\n",
" \n",
" elapsed_time = time.clock() - start_time\n",
" print(\"経過時間\",elapsed_time)\n",
" print(\"train epoch={}, test accuracy={}%\".format(\\\n",
" iteration, (correct / len(testData) * 100)))\n",
" \n",
" return loss_list, (correct / len(testData) * 100)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## CSVの読み込みとデータセットの作成"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def get_dataset(d_dir, N_train):\n",
" \"\"\"\n",
" IrisデータセットのCSVファイルからデータを抽出および整形\n",
" 入力:ファイルディレクトリ(str)、教師ラベル名(list)、学習に使うデータ数(int)\n",
" 出力:学習データ(list)、学習ラベル(list)、テストデータ(list)、テストラベル(list)\n",
" \"\"\"\n",
" csv_data = pd.read_csv(d_dir, header=None)\n",
" input_data = csv_data[[0, 1, 2, 3]]\n",
" input_data = input_data.as_matrix()\n",
" change_target = csv_data[4]\n",
" input_target = [([1., 0., 0.]) if (d == \"Iris-setosa\") else (\\\n",
" ([0., 1., 0.]) if (d == \"Iris-versicolor\") else (\\\n",
" ([0., 0., 1.]) if (d == \"Iris-virginica\") else (\\\n",
" ))) for d in change_target]\n",
" \n",
" perm = [i for i in six.moves.range(len(input_data))]\n",
" random.shuffle(perm)\n",
" input_data = [input_data[idx] for idx in perm]\n",
" input_target = [input_target[idx] for idx in perm]\n",
" \n",
" train_d = input_data[: N_train]\n",
" train_t = input_target[: N_train]\n",
" test_d = input_data[N_train:]\n",
" test_t = input_target[N_train:] \n",
" \n",
" return train_d, train_t, test_d, test_t"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 排他的論理和問題にNeural Netを適用"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"経過時間 0.15601015410502003\n",
"train epoch=700, test accuracy=100.0%\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x20cc79443c8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"\"\"\"\n",
"ハイパーパラメータ\n",
"alpha :学習係数\n",
"iteration :学習epoch数\n",
"batchsize :学習時のバッチサイズ\n",
"bias :バイアスの初期値\n",
"hiddenDim :隠れ層の次元数\n",
"randA :重みの初期値を決める乱数の下限\n",
"randB :重みの初期値を決める乱数の上限\n",
"\"\"\"\n",
"\n",
"alpha = 0.7\n",
"iteration = 700\n",
"batchsize = 4\n",
"bias = 0.6\n",
"randA = -0.5\n",
"randB = 0.5\n",
"hiddenDim = 5\n",
"train_d = [[0.0, 0.0], [0.0, 1.0], [1.0, 0.0], [1.0, 1.0]]\n",
"train_t = [[0.0], [1.0], [1.0], [0.0]]\n",
"test_d = [[0.0, 0.0], [0.0, 1.0], [1.0, 0.0], [1.0, 1.0]]\n",
"test_t = [[0.0], [1.0], [1.0], [0.0]]\n",
"\n",
"inputLayer = InputLayer(len(train_d[0]))\n",
"hiddenLayer = NeuroLayer(hiddenDim, inputLayer, random.uniform, bias, randA, randB)\n",
"hiddenActionLayer = ActionLayer(hiddenLayer)\n",
"outputLayer = NeuroLayer(len(train_t[0]), hiddenActionLayer,\\\n",
" random.uniform, bias, randA, randB)\n",
"outputActionLayer = ActionLayer(outputLayer)\n",
"errorLayer = ErrorLayer(outputActionLayer)\n",
"\n",
"neuralNetwork = [inputLayer, hiddenLayer, hiddenActionLayer,\\\n",
" outputLayer, outputActionLayer, errorLayer]\n",
"\n",
"loss_list, acc = train_nn(alpha, iteration, batchsize, neuralNetwork,\\\n",
" train_d, train_t, test_d, test_t)\n",
"\n",
"# plot loss values on training\n",
"plt.plot(loss_list)\n",
"plt.title('XOR train loss, accuracy={}'.format(acc))\n",
"plt.xlabel('epoch')\n",
"plt.ylabel('loss')\n",
"plt.xlim([0, len(loss_list)-1])\n",
"# plt.savefig(\"xor_loss.png\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## UCI Iris datasetにNeural Netを適用"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"経過時間 11.234190638801689\n",
"train epoch=500, test accuracy=96.66666666666667%\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x20cc7db9828>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"\"\"\"\n",
"ハイパーパラメータ\n",
"alpha :学習係数\n",
"iteration :学習epoch数\n",
"batchsize :学習時のバッチサイズ\n",
"bias :バイアスの初期値\n",
"hiddenDim :隠れ層の次元数\n",
"randA :重みの初期値を決める乱数の下限\n",
"randB :重みの初期値を決める乱数の上限\n",
"N_train :学習に使うサンプル数\n",
"f_name :ファイルのパス\n",
"\"\"\"\n",
"\n",
"alpha = 0.02\n",
"iteration = 500\n",
"batchsize = 20\n",
"bias = 0.9\n",
"hiddenDim = 12\n",
"randA = -0.3\n",
"randB = 0.3\n",
"N_train = 120\n",
"f_name = \"./iris.csv\"\n",
"\n",
"train_d, train_t, test_d, test_t = get_dataset(f_name, N_train)\n",
"\n",
"inputLayer = InputLayer(len(train_d[0]))\n",
"hiddenLayer = NeuroLayer(hiddenDim, inputLayer, random.uniform, bias, randA, randB)\n",
"hiddenActionLayer = ActionLayer(hiddenLayer)\n",
"outputLayer = NeuroLayer(len(train_t[0]), hiddenActionLayer,\\\n",
" random.uniform, bias, randA, randB)\n",
"outputActionLayer = ActionLayer(outputLayer)\n",
"errorLayer = ErrorLayer(outputActionLayer)\n",
"\n",
"neuralNetwork = [inputLayer, hiddenLayer, hiddenActionLayer,\\\n",
" outputLayer, outputActionLayer, errorLayer]\n",
"\n",
"loss_list, acc = train_nn(alpha, iteration, batchsize, neuralNetwork,\\\n",
" train_d, train_t, test_d, test_t)\n",
"\n",
"# plot loss value on training\n",
"plt.plot(loss_list)\n",
"plt.title('Iris train loss, accuracy={}'.format(acc))\n",
"plt.xlabel('epoch')\n",
"plt.ylabel('loss')\n",
"plt.xlim([0, len(loss_list)-1])\n",
"# plt.savefig(\"iris_loss.png\")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"anaconda-cloud": {},
"kernelspec": {
"display_name": "Python [Root]",
"language": "python",
"name": "Python [Root]"
},
"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": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment