Skip to content

Instantly share code, notes, and snippets.

@seongjoojin
Created March 9, 2018 09:05
Show Gist options
  • Save seongjoojin/083679ea2f4614516ceafe72b528d7e1 to your computer and use it in GitHub Desktop.
Save seongjoojin/083679ea2f4614516ceafe72b528d7e1 to your computer and use it in GitHub Desktop.
study180310
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "study180310.ipynb",
"version": "0.3.2",
"views": {},
"default_view": {},
"provenance": [],
"collapsed_sections": []
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"accelerator": "GPU"
},
"cells": [
{
"metadata": {
"id": "Z0qD-NiLbXuA",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"## 1. 밑바닥부터 시작하는 딥러닝 정리(챕터 6까지)\n",
" \n",
" ### 1-1. 퍼셉트론\n",
" \n",
" ![대체 텍스트](https://i.imgur.com/YYnnpLC.png)\n",
" \n",
" 출처 : 밑바닥부터 시작하는 딥러닝\n",
" \n",
" 퍼셉트론은 다수의 신호를 입력으로 받아 하나의 신호를 출력합니다.\n",
" \n",
" 퍼셉트론으로 구성하는 논리회로(AND,OR,NAND)"
]
},
{
"metadata": {
"id": "tIsYbSHOgSEz",
"colab_type": "code",
"colab": {
"autoexec": {
"startup": false,
"wait_interval": 0
},
"output_extras": [
{
"item_id": 1
}
],
"base_uri": "https://localhost:8080/",
"height": 85
},
"outputId": "73c77707-8153-4ccb-fee9-d4bd907d85bf",
"executionInfo": {
"status": "ok",
"timestamp": 1520427026415,
"user_tz": -540,
"elapsed": 686,
"user": {
"displayName": "sj jin",
"photoUrl": "https://lh3.googleusercontent.com/a/default-user=s128",
"userId": "107618035827318999649"
}
}
},
"cell_type": "code",
"source": [
"import numpy as np\n",
"\n",
"def AND(x1, x2):\n",
" x = np.array([x1, x2])\n",
" w = np.array([0.5,0.5])\n",
" b = -0.7\n",
" tmp = np.sum(w*x)+b\n",
" if tmp <= 0:\n",
" return 0\n",
" else:\n",
" return 1\n",
" \n",
"print(\"AND(0,0) : \",AND(0, 0))\n",
"print(\"AND(0,1) : \",AND(0, 1))\n",
"print(\"AND(1,0) : \",AND(1, 0))\n",
"print(\"AND(1,1) : \",AND(1, 1))"
],
"execution_count": 2,
"outputs": [
{
"output_type": "stream",
"text": [
"AND(0,0) : 0\n",
"AND(0,1) : 0\n",
"AND(1,0) : 0\n",
"AND(1,1) : 1\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "X7wT98e7gZRE",
"colab_type": "code",
"colab": {
"autoexec": {
"startup": false,
"wait_interval": 0
},
"output_extras": [
{
"item_id": 1
}
],
"base_uri": "https://localhost:8080/",
"height": 85
},
"outputId": "c2e42b9c-9c1e-4d98-9972-e141ae6cfda9",
"executionInfo": {
"status": "ok",
"timestamp": 1520427147889,
"user_tz": -540,
"elapsed": 690,
"user": {
"displayName": "sj jin",
"photoUrl": "https://lh3.googleusercontent.com/a/default-user=s128",
"userId": "107618035827318999649"
}
}
},
"cell_type": "code",
"source": [
"def OR(x1, x2):\n",
" x = np.array([x1, x2])\n",
" w = np.array([0.5, 0.5])\n",
" b = -0.2\n",
" tmp = np.sum(w*x) + b\n",
" if tmp <= 0:\n",
" return 0\n",
" else:\n",
" return 1\n",
" \n",
"print(\"OR(0,0) : \",OR(0, 0))\n",
"print(\"OR(0,1) : \",OR(0, 1))\n",
"print(\"OR(1,0) : \",OR(1, 0))\n",
"print(\"OR(1,1) : \",OR(1, 1))"
],
"execution_count": 3,
"outputs": [
{
"output_type": "stream",
"text": [
"OR(0,0) : 0\n",
"OR(0,1) : 1\n",
"OR(1,0) : 1\n",
"OR(1,1) : 1\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "QNVbxbomhgFN",
"colab_type": "code",
"colab": {
"autoexec": {
"startup": false,
"wait_interval": 0
},
"output_extras": [
{
"item_id": 1
}
],
"base_uri": "https://localhost:8080/",
"height": 85
},
"outputId": "1ef9624b-cc99-4936-af5a-1e61033a29ef",
"executionInfo": {
"status": "ok",
"timestamp": 1520427295222,
"user_tz": -540,
"elapsed": 692,
"user": {
"displayName": "sj jin",
"photoUrl": "https://lh3.googleusercontent.com/a/default-user=s128",
"userId": "107618035827318999649"
}
}
},
"cell_type": "code",
"source": [
"def NAND(x1, x2):\n",
" x = np.array([x1,x2])\n",
" w = np.array([-0.5,-0.5])\n",
" b = 0.7\n",
" tmp = np.sum(w*x)+b\n",
" if tmp <= 0:\n",
" return 0\n",
" else:\n",
" return 1\n",
"\n",
"print(\"NAND(0,0) : \",NAND(0, 0))\n",
"print(\"NAND(0,1) : \",NAND(0, 1))\n",
"print(\"NAND(1,0) : \",NAND(1, 0))\n",
"print(\"NAND(1,1) : \",NAND(1, 1))"
],
"execution_count": 4,
"outputs": [
{
"output_type": "stream",
"text": [
"NAND(0,0) : 1\n",
"NAND(0,1) : 1\n",
"NAND(1,0) : 1\n",
"NAND(1,1) : 0\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "grl3Flnbj5Dy",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
" ![대체 텍스트](https://i.imgur.com/UEBgfhu.png)\n",
" \n",
" 출처 : 밑바닥부터 시작하는 딥러닝\n",
" \n",
" 퍼셉트론 하나로는 논리회로 중 XOR는 해결되지 않음.\n",
" \n",
" 이 퍼셉트론 하나로는 해결되지 않으니 다층 퍼셉트론으로는 해결 가능합니다.\n",
" (층을 늘리는 것입니다.)"
]
},
{
"metadata": {
"id": "2XTZYTa9lzxq",
"colab_type": "code",
"colab": {
"autoexec": {
"startup": false,
"wait_interval": 0
},
"output_extras": [
{
"item_id": 1
}
],
"base_uri": "https://localhost:8080/",
"height": 85
},
"outputId": "0ecdaf45-4bb3-4e21-b659-12dd59975469",
"executionInfo": {
"status": "ok",
"timestamp": 1520428413564,
"user_tz": -540,
"elapsed": 674,
"user": {
"displayName": "sj jin",
"photoUrl": "https://lh3.googleusercontent.com/a/default-user=s128",
"userId": "107618035827318999649"
}
}
},
"cell_type": "code",
"source": [
"def XOR(x1,x2):\n",
" s1 = NAND(x1, x2)\n",
" s2 = OR(x1, x2)\n",
" y = AND(s1, s2)\n",
" return y\n",
" \n",
"print(\"XOR(0,0) : \",XOR(0, 0))\n",
"print(\"XOR(0,1) : \",XOR(0, 1))\n",
"print(\"XOR(1,0) : \",XOR(1, 0))\n",
"print(\"XOR(1,1) : \",XOR(1, 1))"
],
"execution_count": 5,
"outputs": [
{
"output_type": "stream",
"text": [
"XOR(0,0) : 0\n",
"XOR(0,1) : 1\n",
"XOR(1,0) : 1\n",
"XOR(1,1) : 0\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "-ZULcQaQmM7d",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
" #### 퍼셉트론 정리\n",
"\n",
" - 퍼셉트론은 입출력을 갖춘 알고리즘. 입력을 주면 정해진 규칙에 따른 값을 출력.\n",
" - 퍼셉트론에서는 '가중치'와 '편향'을 매개변수로 설정\n",
" - 단층 퍼셉트론은 직선형 영역만 표현할 수 있고, 다층 퍼셉트론은 비선형 영역도 표현할 수 있음."
]
},
{
"metadata": {
"id": "WnEmZIaMBZKA",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"### 1-2. 활성화 함수\n",
"\n",
"활성화함수란 임계값을 경계로 출력이 바꿔집니다."
]
},
{
"metadata": {
"id": "b-Gam261qg5G",
"colab_type": "code",
"colab": {
"autoexec": {
"startup": false,
"wait_interval": 0
},
"output_extras": [
{
"item_id": 1
}
],
"base_uri": "https://localhost:8080/",
"height": 347
},
"outputId": "e0b1c8d7-bc71-415b-ebce-522c79f13715",
"executionInfo": {
"status": "ok",
"timestamp": 1520429572124,
"user_tz": -540,
"elapsed": 717,
"user": {
"displayName": "sj jin",
"photoUrl": "https://lh3.googleusercontent.com/a/default-user=s128",
"userId": "107618035827318999649"
}
}
},
"cell_type": "code",
"source": [
"import matplotlib.pylab as plt\n",
"\n",
"def step_function(x):\n",
" return np.array(x > 0, dtype=np.int)\n",
"\n",
"x = np.arange(-5.0, 5.0, 0.1)\n",
"y = step_function(x)\n",
"plt.plot(x,y)\n",
"plt.ylim(-0.1,1.1)\n",
"plt.show()"
],
"execution_count": 6,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f674d7c94a8>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"metadata": {
"id": "VMR1j_SMqk43",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"위와 같은 함수처럼 임계값 0을 기준으로 출력값이 0과 1이 달라지게 됩니다.\n",
"\n",
"신경망에서 자주 쓰이는 시그모이드의 함수는 아래와 같습니다.\n",
"\n",
"![대체 텍스트](https://i.imgur.com/zr3NnxX.png)\n",
"\n",
"출처 : 밑바닥부터 시작하는 딥러닝 "
]
},
{
"metadata": {
"id": "vkucoIbtwOn8",
"colab_type": "code",
"colab": {
"autoexec": {
"startup": false,
"wait_interval": 0
},
"output_extras": [
{
"item_id": 1
}
],
"base_uri": "https://localhost:8080/",
"height": 347
},
"outputId": "5b1da6a0-cf2e-4d76-9d5f-81baed1c680f",
"executionInfo": {
"status": "ok",
"timestamp": 1520431073315,
"user_tz": -540,
"elapsed": 1487,
"user": {
"displayName": "sj jin",
"photoUrl": "https://lh3.googleusercontent.com/a/default-user=s128",
"userId": "107618035827318999649"
}
}
},
"cell_type": "code",
"source": [
" def sigmoid(x):\n",
" return 1 / (1 + np.exp(-x))\n",
"\n",
"x = np.arange(-5.0, 5.0, 0.1)\n",
"y = sigmoid(x)\n",
"plt.plot(x,y)\n",
"plt.ylim(-0.1, 1.1)\n",
"plt.show()"
],
"execution_count": 7,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f674d74dda0>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"metadata": {
"id": "g-6lEQhtwbya",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"활성화 함수인 두 함수의 특징은 비선형 함수라는 것.\n",
"\n",
"선형함수의 경우 층을 아무리 깊게해도 '은닉층이 없는 네트워크'와 똑같은 기능을 할 수 있는 문제가 있음.\n",
"\n",
"h(x) = cx인 경우 3층일때 y(x) = h(h(h(x))) = c*c*c*x \n",
"\n",
"a = c^3라고 한다면 y(x) = ax\n",
"\n",
"위와 같은 문제가 있기 때문에 활성화 함수는 선형이 아닌 비선형으로 사용됨."
]
},
{
"metadata": {
"id": "I4yvtDnTx__5",
"colab_type": "code",
"colab": {
"autoexec": {
"startup": false,
"wait_interval": 0
},
"output_extras": [
{
"item_id": 1
}
],
"base_uri": "https://localhost:8080/",
"height": 347
},
"outputId": "dd170f95-693d-42e7-8b3f-787fedaa258d",
"executionInfo": {
"status": "ok",
"timestamp": 1520431533397,
"user_tz": -540,
"elapsed": 637,
"user": {
"displayName": "sj jin",
"photoUrl": "https://lh3.googleusercontent.com/a/default-user=s128",
"userId": "107618035827318999649"
}
}
},
"cell_type": "code",
"source": [
"def relu(x):\n",
" return np.maximum(0, x)\n",
"\n",
"x = np.arange(-1.0, 1.0, 0.1)\n",
"y = relu(x)\n",
"plt.plot(x,y)\n",
"plt.ylim(-0.1, 1.1)\n",
"plt.show()"
],
"execution_count": 8,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f674b71d320>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"metadata": {
"id": "xg1SRxlvyBdJ",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"2006년 hinton교수가 sigmoid함수의 문제점을 제기하고 대신 사용된 활성화함수인 Relu의 그래프입니다.\n",
"지금은 거의 시그모이드 함수 대신 Relu함수가 각광받고 있습니다.\n",
"\n",
"![대체 텍스트](https://i.imgur.com/MVQZy25.png)\n",
"\n",
"출처 : 밑바닥부터 시작하는 딥러닝\n",
"\n",
"### 1-3. 파이썬으로 구성하는 심층 신경망"
]
},
{
"metadata": {
"id": "dXH8-g_i_syx",
"colab_type": "code",
"colab": {
"autoexec": {
"startup": false,
"wait_interval": 0
},
"output_extras": [
{
"item_id": 1
}
],
"base_uri": "https://localhost:8080/",
"height": 170
},
"outputId": "1fe840a6-60a4-47b1-95d6-4634de4476d0",
"executionInfo": {
"status": "ok",
"timestamp": 1520435170703,
"user_tz": -540,
"elapsed": 742,
"user": {
"displayName": "sj jin",
"photoUrl": "https://lh3.googleusercontent.com/a/default-user=s128",
"userId": "107618035827318999649"
}
}
},
"cell_type": "code",
"source": [
"X = np.array([1.0, 0.5])\n",
"W1 = np.array([[0.1, 0.3, 0.5], [0.2, 0.4, 0.6]])\n",
"B1 = np.array([0.1, 0.2, 0.3])\n",
"\n",
"print(W1.shape)\n",
"print(X.shape)\n",
"print(B1.shape)\n",
"\n",
"A1 = np.dot(X, W1) + B1\n",
"Z1 = sigmoid(A1)\n",
"\n",
"print(A1)\n",
"print(Z1)\n",
"\n",
"W2 = np.array([[0.1, 0.4], [0.2, 0.5], [0.3, 0.6]])\n",
"B2 = np.array([0.1,0.2])\n",
"\n",
"print(Z1.shape)\n",
"print(W2.shape)\n",
"print(B2.shape)\n",
"\n",
"A2 = np.dot(Z1, W2) + B2\n",
"Z2 = sigmoid(A2)\n",
"\n",
"def identity_function(x):\n",
" return x\n",
"\n",
"W3 = np.array([[0.1, 0.3],[0.2, 0.4]])\n",
"B3 = np.array([0.1, 0.2])\n",
"\n",
"A3 = np.dot(Z2, W3) + B3\n",
"Y = identity_function(A3)\n",
"\n",
"print(Y)"
],
"execution_count": 9,
"outputs": [
{
"output_type": "stream",
"text": [
"(2, 3)\n",
"(2,)\n",
"(3,)\n",
"[0.3 0.7 1.1]\n",
"[0.57444252 0.66818777 0.75026011]\n",
"(3,)\n",
"(3, 2)\n",
"(2,)\n",
"[0.31682708 0.69627909]\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "My6t_9ZSAUNo",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"### 1-4. softmax 함수\n",
"\n",
"softmax함수는 출력을 확률로 해석될 수 있게 해줍니다.\n"
]
},
{
"metadata": {
"id": "VSB46Fn7ArbY",
"colab_type": "code",
"colab": {
"autoexec": {
"startup": false,
"wait_interval": 0
},
"output_extras": [
{
"item_id": 1
}
],
"base_uri": "https://localhost:8080/",
"height": 51
},
"outputId": "1385df1f-1e26-4ca1-e62b-4716c7da18ed",
"executionInfo": {
"status": "ok",
"timestamp": 1520435381198,
"user_tz": -540,
"elapsed": 662,
"user": {
"displayName": "sj jin",
"photoUrl": "https://lh3.googleusercontent.com/a/default-user=s128",
"userId": "107618035827318999649"
}
}
},
"cell_type": "code",
"source": [
"def softmax(a):\n",
" c = np.max(a)\n",
" exp_a = np.exp(a - c)\n",
" sum_exp_a = np.sum(exp_a)\n",
" y = exp_a / sum_exp_a\n",
" \n",
" return y\n",
"\n",
"a = np.array([0.3, 2.9, 4.0])\n",
"y = softmax(a)\n",
"print(y)\n",
"print(np.sum(y))"
],
"execution_count": 10,
"outputs": [
{
"output_type": "stream",
"text": [
"[0.01821127 0.24519181 0.73659691]\n",
"1.0\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "q72LxN67AtGI",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"출력의 총합은 1이되며 y[0]=1.8%, y[1]=24.5% y[2]=73.65% 등 확률로 해석가능."
]
},
{
"metadata": {
"id": "4tT0Xnb0CMPF",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"신경망 정리\n",
"\n",
"\n",
"* 기계학습 문제는 크게 회귀와 분류로 나누어짐\n",
"* 출력층의 활성화 함수로는 회귀에서는 주로 항등 함수를, 분류에서는 소프트맥스함수 사용\n",
"* 입력 데이터를 묶은 것을 배치라 하며, 배치 단위로 추론 처리를 진행하면 결과를 훨씬 빠르게 얻을 수 있음. \n",
"\n",
"\n",
"\n"
]
},
{
"metadata": {
"id": "arcRC0nmB9rW",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"### 1-5. 손실함수\n",
"\n",
"\n",
"손실함수에는 평균 제곱 오차와 교차 엔트로피 오차를 사용합니다.\n",
"\n",
"-평균 제곱 오차\n",
"\n",
"![대체 텍스트](https://i.imgur.com/HobMT11.png)\n",
"\n",
"출처 : 밑바닥부터 시작하는 딥러닝"
]
},
{
"metadata": {
"id": "p3LZx82qDJAF",
"colab_type": "code",
"colab": {
"autoexec": {
"startup": false,
"wait_interval": 0
},
"output_extras": [
{
"item_id": 1
}
],
"base_uri": "https://localhost:8080/",
"height": 51
},
"outputId": "a7d604ea-ab58-4176-f740-b7f376c58346",
"executionInfo": {
"status": "ok",
"timestamp": 1520436260328,
"user_tz": -540,
"elapsed": 803,
"user": {
"displayName": "sj jin",
"photoUrl": "https://lh3.googleusercontent.com/a/default-user=s128",
"userId": "107618035827318999649"
}
}
},
"cell_type": "code",
"source": [
"# 평균 제곱 오차\n",
"def mean_spuared_error(y, t):\n",
" return 0.5 * np.sum((y-t)**2)\n",
"\n",
"t = [0, 0, 1, 0, 0, 0, 0, 0, 0, 0]\n",
"y1 = [0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0]\n",
"y2 = [0.1, 0.05, 0.1, 0.0, 0.05, 0.1, 0.0, 0.6, 0.0, 0.0]\n",
"\n",
"print(mean_spuared_error(np.array(y1),np.array(t)))\n",
"print(mean_spuared_error(np.array(y2),np.array(t)))"
],
"execution_count": 12,
"outputs": [
{
"output_type": "stream",
"text": [
"0.09750000000000003\n",
"0.5975\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "k4LjxqxnEMNK",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"평균 제곱 오차가 적은 것이 정답에 더 가깝다는 것을 볼 수 있습니다.\n",
"\n",
"-교차 엔트로피 오차\n",
"\n",
"![대체 텍스트](https://i.imgur.com/CYuaj8x.png)\n",
"\n",
"\n",
"출처 : 밑바닥부터 시작하는 딥러닝"
]
},
{
"metadata": {
"id": "aScd8eCwEXRP",
"colab_type": "code",
"colab": {
"autoexec": {
"startup": false,
"wait_interval": 0
},
"output_extras": [
{
"item_id": 1
}
],
"base_uri": "https://localhost:8080/",
"height": 51
},
"outputId": "056859da-3ec8-4996-92b3-6a0539f6ba0f",
"executionInfo": {
"status": "ok",
"timestamp": 1520436460041,
"user_tz": -540,
"elapsed": 607,
"user": {
"displayName": "sj jin",
"photoUrl": "https://lh3.googleusercontent.com/a/default-user=s128",
"userId": "107618035827318999649"
}
}
},
"cell_type": "code",
"source": [
"# 교차 엔트로피 오차\n",
"def cross_entropy_error(y, t):\n",
" delta = 1e-7\n",
" return -np.sum(t*np.log(y + delta))\n",
"\n",
"print(cross_entropy_error(np.array(y1),np.array(t)))\n",
"print(cross_entropy_error(np.array(y2),np.array(t)))"
],
"execution_count": 13,
"outputs": [
{
"output_type": "stream",
"text": [
"0.510825457099338\n",
"2.302584092994546\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "H5PrQZY6E4AH",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"교차 엔트로피 오차도 적은 것이 정답에 가깝다는 것을 볼 수 있습니다. \n",
"\n",
"![대체 텍스트](https://i.imgur.com/O317hMu.png)\n",
"\n",
"출처 : 밑바닥부터 시작하는 딥러닝\n",
"\n",
"계단함수는 한순간만 변화가 일어나지만 시그모이드 함수 미분(접선)은 위의 그림과 같이 출력(세로축의 값)이 연속적으로 변하고 곡선의 기울기도 연속적으로 변합니다.\n",
"\n",
"시그모이드 함수의 이러한 성질은 신경망이 올바르게 학습할 수 있도록 하게합니다. \n",
"\n",
"(어느 장소에서도 함수의 미분이 0이 되지 않는 성질입니다.)\n"
]
},
{
"metadata": {
"id": "Y0pgJLtKYy0K",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"### 1-6. 기울기(미분)"
]
},
{
"metadata": {
"id": "HyS18hOvbibI",
"colab_type": "code",
"colab": {
"autoexec": {
"startup": false,
"wait_interval": 0
},
"output_extras": [
{
"item_id": 1
},
{
"item_id": 2
}
],
"base_uri": "https://localhost:8080/",
"height": 379
},
"outputId": "9e51b8d3-da23-428e-bbfe-a0d7e3bacd4a",
"executionInfo": {
"status": "ok",
"timestamp": 1520475995330,
"user_tz": -540,
"elapsed": 890,
"user": {
"displayName": "sj jin",
"photoUrl": "https://lh3.googleusercontent.com/a/default-user=s128",
"userId": "107618035827318999649"
}
}
},
"cell_type": "code",
"source": [
"import numpy as np\n",
"import matplotlib.pylab as plt\n",
"\n",
"\n",
"def numerical_diff(f, x):\n",
" h = 1e-4 # 0.0001\n",
" return (f(x+h) - f(x-h)) / (2*h)\n",
"\n",
"\n",
"def function_1(x):\n",
" return 0.01*x**2 + 0.1*x \n",
"\n",
"\n",
"def tangent_line(f, x):\n",
" d = numerical_diff(f, x)\n",
" print(d)\n",
" y = f(x) - d*x\n",
" return lambda t: d*t + y\n",
" \n",
"x = np.arange(0.0, 20.0, 0.1)\n",
"y = function_1(x)\n",
"plt.xlabel(\"x\")\n",
"plt.ylabel(\"f(x)\")\n",
"\n",
"tf = tangent_line(function_1, 5)\n",
"y2 = tf(x)\n",
"\n",
"plt.plot(x, y)\n",
"plt.plot(x, y2)\n",
"plt.show()\n"
],
"execution_count": 9,
"outputs": [
{
"output_type": "stream",
"text": [
"0.1999999999990898\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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\nAMAw/wG+MuaMLBR4owAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fb433742d68>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"metadata": {
"id": "sM2qUlnZbper",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"2차 방정식의 미분을 그래프화한 것입니다. \n",
"\n",
"파란색의 선이 2차 방정식의 선이고 초록색은 2차 방정식을 미분한 값입니다."
]
},
{
"metadata": {
"id": "-JcE9HnFbom9",
"colab_type": "code",
"colab": {
"autoexec": {
"startup": false,
"wait_interval": 0
},
"output_extras": [
{
"item_id": 1
},
{
"item_id": 2
}
],
"base_uri": "https://localhost:8080/",
"height": 383
},
"outputId": "d6d8bee1-d9d4-4277-c591-b8e0704730bd",
"executionInfo": {
"status": "ok",
"timestamp": 1520476171806,
"user_tz": -540,
"elapsed": 1101,
"user": {
"displayName": "sj jin",
"photoUrl": "https://lh3.googleusercontent.com/a/default-user=s128",
"userId": "107618035827318999649"
}
}
},
"cell_type": "code",
"source": [
"import numpy as np\n",
"import matplotlib.pylab as plt\n",
"from mpl_toolkits.mplot3d import Axes3D\n",
"\n",
"\n",
"def _numerical_gradient_no_batch(f, x):\n",
" h = 1e-4 # 0.0001\n",
" grad = np.zeros_like(x) # x와 형상이 같은 배열을 생성\n",
" \n",
" for idx in range(x.size):\n",
" tmp_val = x[idx]\n",
" \n",
" # f(x+h) 계산\n",
" x[idx] = float(tmp_val) + h\n",
" fxh1 = f(x)\n",
" \n",
" # f(x-h) 계산\n",
" x[idx] = tmp_val - h \n",
" fxh2 = f(x) \n",
" \n",
" grad[idx] = (fxh1 - fxh2) / (2*h)\n",
" x[idx] = tmp_val # 값 복원\n",
" \n",
" return grad\n",
"\n",
"\n",
"def numerical_gradient(f, X):\n",
" if X.ndim == 1:\n",
" return _numerical_gradient_no_batch(f, X)\n",
" else:\n",
" grad = np.zeros_like(X)\n",
" \n",
" for idx, x in enumerate(X):\n",
" grad[idx] = _numerical_gradient_no_batch(f, x)\n",
" \n",
" return grad\n",
"\n",
"\n",
"def function_2(x):\n",
" if x.ndim == 1:\n",
" return np.sum(x**2)\n",
" else:\n",
" return np.sum(x**2, axis=1)\n",
"\n",
"\n",
"def tangent_line(f, x):\n",
" d = numerical_gradient(f, x)\n",
" print(d)\n",
" y = f(x) - d*x\n",
" return lambda t: d*t + y\n",
" \n",
"if __name__ == '__main__':\n",
" x0 = np.arange(-2, 2.5, 0.25)\n",
" x1 = np.arange(-2, 2.5, 0.25)\n",
" X, Y = np.meshgrid(x0, x1)\n",
" \n",
" X = X.flatten()\n",
" Y = Y.flatten()\n",
" \n",
" grad = numerical_gradient(function_2, np.array([X, Y]) )\n",
" \n",
" plt.figure()\n",
" plt.quiver(X, Y, -grad[0], -grad[1], angles=\"xy\",color=\"#666666\")#,headwidth=10,scale=40,color=\"#444444\")\n",
" plt.xlim([-2, 2])\n",
" plt.ylim([-2, 2])\n",
" plt.xlabel('x0')\n",
" plt.ylabel('x1')\n",
" plt.grid()\n",
" plt.legend()\n",
" plt.draw()\n",
" plt.show()\n"
],
"execution_count": 10,
"outputs": [
{
"output_type": "stream",
"text": [
"No handles with labels found to put in legend.\n"
],
"name": "stderr"
},
{
"output_type": "display_data",
"data": {
"image/png": "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\nNFNdPfy49fb2ADB9+gzOnDk96rqRkVFkZeWMKcftdtPU1EB1dSVVVRUYDP0AZGfnkZ9/8qq/Ex+f\nwPTp165Vn+dyuWhoqL30uFViMg0CMGfOfE6fPnHN37399s3XlTXiC189jz/+OFlZWVd9gXV0dIwp\nrK+vj9zcXO/PkZGR9Pb2otfr6e3tJTIyctS61tbWL73Nw4f3Y7N9tZG7LMs0NzfS0tJEZWU5y5at\nIDd31lcu+pIksW/f3i+9nsfjob6+hsbGOioqyli1ah0zZmR8pYzL2WzWa+a5XC6qqyu9hWXNmg2k\npEy97pwRRqPhqnkOh4Py8gvU1FRSXZ3F2rU3ExeXMOacEV1dHZw4ccz7s81m5fz5EqqrK8jMzGHd\nuo1jPli6mpaWJiRJujTSKaSqqpycnJmsW3czISGhiuWM6O3t5syZ01RUlDFr1hxWr15PYGCQ4jkj\nLlw4h8PhYMWK1aodxIxobm7k8OH9fP/7T6iaA8OzZ0ePHmbr1u2qPE8jGhrqOHbsCE1N9fj7+7N5\n820EBCjby12WZaqqKjh58hgtLU3eEWNjY73iOaWlZykoOEl7e9uodX19vRw9eliRgu/xeCgqKqCo\nqIDu7s5R69rb27zZKSlTx1XwXS4Xp09/RklJEf39faPWNTTU0dAwejY4J2fmmAq+w2Hns8+OUlp6\nlsFB46h1lZVlVFaWXfX3lixZfl0F32od4ujRT7h4sRSLZXSL99LSs5SWnr3m74+14GvkL5ijePfd\nd6moqOAXv/jFFeseeughduzYcd1hv/zlL1m1apV3lH/ffffx29/+ltTUVEpKSnjppZe85+737NlD\na2srP/nJT655m21tvVxrlkWSJP7wh//EZrORnp5BZmbOmEepsizjcDiuus7pdPA///P/0Gg0pKdn\nkZWVM+5RqiRJV0zbm0yD/OEP/0lAQCCZmTlkZeWQlpaOv//4d/AejweXywVAT08XL7zwe0JDwy7N\niOQoPkr1eDxUV1fwxhuvEhUV7X1upk2brsootb+/j127XiMjY/j5SU6eotoIDqCnpxuXy0ViYtJ1\nzSQJf1l2u43GxgYyM7NV3T6GhoaoqamiurocP78A7rzzblVyTKZBamqqqKqqoL6+hoiISP72b7+v\n+MHM8OxIBVVVFTQ21jNlyjQeeOBvANBqNYodhH5+diQ3dxa3375t1HW0Wi1+fn5jzvjz7Mjw6Lut\n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\n/8XLPjYZzNoxAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fb430dfc860>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"metadata": {
"id": "JQIqhElycWwb",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"기울기(미분)를 좀 더 명확하게 표현한 모습입니다\n",
"\n",
"책에서는 **기울기가 가리키는 쪽은 각 장소에서 함수의 출력 값을 가장 크게 줄이는 방향**이라고 표현하고 있습니다.\n",
"\n",
"이제 신경망 학습에서 사용되는 경사하강법에서 살펴보면 글로 풀자면 아래와 같습니다.\n",
"\n",
"경사하강법은 현 위치에서 기울어진 방향으로 일정 거리만큼 이동합니다.\n",
"그런 다음 이동한 곳에서도 마찬가지로 기울기를 구하고, 또 그 기울어진 방향으로 나아가기를 반복합니다.\n",
"이렇게 함수 값을 점차 줄이는 것을 경사하강법이라고 합니다.\n",
"\n",
"![대체 텍스트](https://i.imgur.com/gFwbYl3.png)\n",
"\n",
"출처 : 밑바닥부터 시작하는 딥러닝\n"
]
},
{
"metadata": {
"id": "DCrIMoHSepO5",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"#### 신경망 학습 정리\n",
"\n",
"* 기계학습에서 사용하는 데이터셋은 훈련 데이터와 시험 데이터를 나눠 사용\n",
"* 훈련 데이터로 학습한 모델의 범용 능력을 시험 데이터로 평가\n",
"* 신경망 학습은 손실 함수를 지표로, 손실 함수의 값이 작아지는 방향으로 가중치 매개변수를 갱신\n",
"* 가중치 매개변수를 갱신할 때는 가중치 매개변수의 기울기를 이용하고, 기울어진 방향으로 가중치의 값을 갱신하는 작업을 반복\n",
"* 아주 작은 값을 주었을 때의 차분으로 미분하는 것을 수치 미분이라고 한다.\n",
"* 수치 미분을 이용해 가중치 매개변수의 기울기를 구할 수 있다\n",
"\n",
"\n"
]
},
{
"metadata": {
"id": "QGpfexgmxoEn",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"#### 1-7. 오차역전파법\n",
"\n",
"* 순전파는 통상의 계산을 수행. 역전파는 노드의 미분을 구함\n",
"* 오차역전파법 : 신경망의 구성 요소를 계층으로 구현하여 기울기를 효율적으로 계산\n",
"* 수치 미분에 비해 오차역전파법이 더 빠르게 기울기를 구할 수 있음 (구체적인 계산 과정은 http://nbviewer.jupyter.org/github/SDRLurker/deep-learning/blob/master/5%EC%9E%A5.ipynb 참고)\n",
"\n",
"예시) ReLU 의 오차역전파법\n",
"\n",
"![대체 텍스트](https://i.imgur.com/oid5cch.png)\n",
"\n",
"출처 : 밑바닥부터 시작하는 딥러닝\n",
"\n",
"ReLU 계층은 전기 회로의 '스위치' 비유\n",
"\n",
"순전파 때 전류가 흐르고 있으면 스위치가 ON, 흐르지 않으면 OFF\n",
"\n",
"역전파 때 스위치가 ON이라면 전류가 그대로 흐르고, OFF면 더 이상 흐리지 않습니다."
]
},
{
"metadata": {
"id": "3TylPxEd72l2",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"### 1-8. 최적화(optimiztion) 방법\n",
"\n",
"![대체 텍스트](https://i.imgur.com/XMPO5Lp.png)\n",
"\n",
"출처 : 밑바닥부터 시작하는 딥러닝\n",
"\n",
"SGD(확률적 경사 하강법) : 매개변수 기울기를 구해 기울어진 방향으로 매개변수 값을 갱신하여 점점 최적의 매개변수로 다가가는 방법\n",
"\n",
"Momentum : 공이 그릇을 구르는 듯한 물리 법칙에 따르는 움직임\n",
"\n",
"AdaGrad: 매개변수의 원소마다 적응적으로 갱신 정도를 조정\n",
"\n",
"Adam: 모멘텀과 Adagrad 기법을 융합\n",
"\n",
"![대체 텍스트](https://i.imgur.com/CIrgMm8.png)\n",
"\n",
"일반적으로 SGD보다 다른 세 기법이 빠르게 학습하고, 때로는 최종 정확도도 높음.\n",
"요즘은 거의 Adam으로 쓰는 추세임.\n",
"\n",
"### 1-9. 드롭아웃\n",
"\n",
"![대체 텍스트](https://i.imgur.com/tGpF9Mz.png)\n",
"\n",
"뉴런을 임의로 삭제하면서 학습하는 방법으로 오버피팅을 방지하는 방법 중 하나입니다.\n",
"\n",
"훈련때에만 뉴런을 랜덤하게 삭제하며 시험때에는 모든 뉴런에 신호를 전달합니다.\n"
]
},
{
"metadata": {
"id": "-FSJzH6BLPuI",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"## 2. 텐서플로우 맛 정리\n",
"\n",
"### 2-1. 선형 회귀 모델"
]
},
{
"metadata": {
"id": "6K0R4NWfTOVe",
"colab_type": "code",
"colab": {
"autoexec": {
"startup": false,
"wait_interval": 0
},
"output_extras": [
{
"item_id": 4
}
],
"base_uri": "https://localhost:8080/",
"height": 10925
},
"outputId": "f9c82aa8-7e81-4290-f193-73cf8946080e",
"executionInfo": {
"status": "ok",
"timestamp": 1520502524721,
"user_tz": -540,
"elapsed": 1580,
"user": {
"displayName": "sj jin",
"photoUrl": "https://lh3.googleusercontent.com/a/default-user=s128",
"userId": "107618035827318999649"
}
}
},
"cell_type": "code",
"source": [
"import tensorflow as tf\n",
"\n",
"x_data = [1, 2, 3]\n",
"y_data = [1, 2, 3]\n",
"\n",
"W = tf.Variable(tf.random_uniform([1], -1.0, 1.0))\n",
"b = tf.Variable(tf.random_uniform([1], -1.0, 1.0))\n",
"\n",
"# name: 나중에 텐서보드등으로 값의 변화를 추적하거나 살펴보기 쉽게 하기 위해 이름을 붙여줍니다.\n",
"X = tf.placeholder(tf.float32, name=\"X\")\n",
"Y = tf.placeholder(tf.float32, name=\"Y\")\n",
"print(X)\n",
"print(Y)\n",
"\n",
"# X 와 Y 의 상관 관계를 분석하기 위한 가설 수식을 작성합니다.\n",
"# y = W * x + b\n",
"# W 와 X 가 행렬이 아니므로 tf.matmul 이 아니라 기본 곱셈 기호를 사용했습니다.\n",
"hypothesis = W * X + b\n",
"\n",
"# 손실 함수를 작성합니다.\n",
"# mean(h - Y)^2 : 예측값과 실제값의 거리를 비용(손실) 함수로 정합니다.\n",
"cost = tf.reduce_mean(tf.square(hypothesis - Y))\n",
"# 텐서플로우에 기본적으로 포함되어 있는 함수를 이용해 경사 하강법 최적화를 수행합니다.\n",
"optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.1)\n",
"# 비용을 최소화 하는 것이 최종 목표\n",
"train_op = optimizer.minimize(cost)\n",
"\n",
"# 세션을 생성하고 초기화합니다.\n",
"with tf.Session() as sess:\n",
" sess.run(tf.global_variables_initializer())\n",
"\n",
" # 최적화를 100번 수행합니다.\n",
" for step in range(100):\n",
" # sess.run 을 통해 train_op 와 cost 그래프를 계산합니다.\n",
" # 이 때, 가설 수식에 넣어야 할 실제값을 feed_dict 을 통해 전달합니다.\n",
" _, cost_val = sess.run([train_op, cost], feed_dict={X: x_data, Y: y_data})\n",
" \n",
" print(\"Step : \",step)\n",
" print(\"X : \",sess.run(X, feed_dict={X:x_data}))\n",
" print(\"W : \",sess.run(W))\n",
" print(\"b : \",sess.run(b))\n",
" print(\"hypothesis : \", sess.run(hypothesis, feed_dict={X: x_data, Y: y_data}))\n",
" print(\"cost : \", sess.run(cost, feed_dict={X: x_data, Y: y_data}))\n",
"\n",
" # 최적화가 완료된 모델에 테스트 값을 넣고 결과가 잘 나오는지 확인해봅니다.\n",
" print(\"\\n=== Test ===\")\n",
" print(\"X: 5, Y:\", sess.run(hypothesis, feed_dict={X: 5}))\n",
" print(\"X: 2.5, Y:\", sess.run(hypothesis, feed_dict={X: 2.5}))"
],
"execution_count": 26,
"outputs": [
{
"output_type": "stream",
"text": [
"Tensor(\"X_9:0\", dtype=float32)\n",
"Tensor(\"Y_9:0\", dtype=float32)\n",
"Step : 0\n",
"X : [1. 2. 3.]\n",
"W : [0.70372397]\n",
"b : [0.9006662]\n",
"hypothesis : [1.6043901 2.308114 3.0118382]\n",
"cost : 0.15345395\n",
"Step : 1\n",
"X : [1. 2. 3.]\n",
"W : [0.61998177]\n",
"b : [0.8390433]\n",
"hypothesis : [1.4590251 2.079007 2.6989887]\n",
"cost : 0.102518\n",
"Step : 2\n",
"X : [1. 2. 3.]\n",
"W : [0.6390481]\n",
"b : [0.82324195]\n",
"hypothesis : [1.46229 2.1013381 2.7403862]\n",
"cost : 0.09712694\n",
"Step : 3\n",
"X : [1. 2. 3.]\n",
"W : [0.64663976]\n",
"b : [0.80297434]\n",
"hypothesis : [1.449614 2.0962539 2.7428937]\n",
"cost : 0.09250709\n",
"Step : 4\n",
"X : [1. 2. 3.]\n",
"W : [0.65525293]\n",
"b : [0.7837236]\n",
"hypothesis : [1.4389765 2.0942295 2.7494824]\n",
"cost : 0.08811288\n",
"Step : 5\n",
"X : [1. 2. 3.]\n",
"W : [0.6635274]\n",
"b : [0.7648777]\n",
"hypothesis : [1.428405 2.0919325 2.7554598]\n",
"cost : 0.08392746\n",
"Step : 6\n",
"X : [1. 2. 3.]\n",
"W : [0.67161745]\n",
"b : [0.7464912]\n",
"hypothesis : [1.4181087 2.089726 2.7613435]\n",
"cost : 0.079940856\n",
"Step : 7\n",
"X : [1. 2. 3.]\n",
"W : [0.67951137]\n",
"b : [0.72854596]\n",
"hypothesis : [1.4080573 2.0875688 2.76708 ]\n",
"cost : 0.07614359\n",
"Step : 8\n",
"X : [1. 2. 3.]\n",
"W : [0.6872157]\n",
"b : [0.7110322]\n",
"hypothesis : [1.398248 2.0854635 2.772679 ]\n",
"cost : 0.072526745\n",
"Step : 9\n",
"X : [1. 2. 3.]\n",
"W : [0.6947349]\n",
"b : [0.6939395]\n",
"hypothesis : [1.3886744 2.0834093 2.7781441]\n",
"cost : 0.06908164\n",
"Step : 10\n",
"X : [1. 2. 3.]\n",
"W : [0.70207316]\n",
"b : [0.67725766]\n",
"hypothesis : [1.3793309 2.081404 2.7834773]\n",
"cost : 0.0658002\n",
"Step : 11\n",
"X : [1. 2. 3.]\n",
"W : [0.70923513]\n",
"b : [0.6609768]\n",
"hypothesis : [1.370212 2.079447 2.7886822]\n",
"cost : 0.06267464\n",
"Step : 12\n",
"X : [1. 2. 3.]\n",
"W : [0.71622497]\n",
"b : [0.6450874]\n",
"hypothesis : [1.3613124 2.0775373 2.7937624]\n",
"cost : 0.05969754\n",
"Step : 13\n",
"X : [1. 2. 3.]\n",
"W : [0.72304666]\n",
"b : [0.62957996]\n",
"hypothesis : [1.3526266 2.0756733 2.79872 ]\n",
"cost : 0.056861877\n",
"Step : 14\n",
"X : [1. 2. 3.]\n",
"W : [0.72970444]\n",
"b : [0.6144453]\n",
"hypothesis : [1.3441498 2.0738542 2.8035588]\n",
"cost : 0.054160893\n",
"Step : 15\n",
"X : [1. 2. 3.]\n",
"W : [0.7362021]\n",
"b : [0.59967446]\n",
"hypothesis : [1.3358766 2.0720787 2.8082807]\n",
"cost : 0.051588237\n",
"Step : 16\n",
"X : [1. 2. 3.]\n",
"W : [0.7425437]\n",
"b : [0.5852587]\n",
"hypothesis : [1.3278024 2.070346 2.8128898]\n",
"cost : 0.04913774\n",
"Step : 17\n",
"X : [1. 2. 3.]\n",
"W : [0.74873275]\n",
"b : [0.5711895]\n",
"hypothesis : [1.3199222 2.068655 2.8173876]\n",
"cost : 0.04680368\n",
"Step : 18\n",
"X : [1. 2. 3.]\n",
"W : [0.7547731]\n",
"b : [0.5574585]\n",
"hypothesis : [1.3122315 2.0670047 2.8217778]\n",
"cost : 0.04458044\n",
"Step : 19\n",
"X : [1. 2. 3.]\n",
"W : [0.7606681]\n",
"b : [0.5440576]\n",
"hypothesis : [1.3047256 2.065394 2.826062 ]\n",
"cost : 0.04246284\n",
"Step : 20\n",
"X : [1. 2. 3.]\n",
"W : [0.7664215]\n",
"b : [0.53097886]\n",
"hypothesis : [1.2974004 2.0638218 2.8302433]\n",
"cost : 0.040445838\n",
"Step : 21\n",
"X : [1. 2. 3.]\n",
"W : [0.77203655]\n",
"b : [0.51821446]\n",
"hypothesis : [1.290251 2.0622876 2.8343241]\n",
"cost : 0.03852463\n",
"Step : 22\n",
"X : [1. 2. 3.]\n",
"W : [0.77751666]\n",
"b : [0.505757]\n",
"hypothesis : [1.2832737 2.0607903 2.838307 ]\n",
"cost : 0.0366947\n",
"Step : 23\n",
"X : [1. 2. 3.]\n",
"W : [0.782865]\n",
"b : [0.4935989]\n",
"hypothesis : [1.2764639 2.0593288 2.8421938]\n",
"cost : 0.034951653\n",
"Step : 24\n",
"X : [1. 2. 3.]\n",
"W : [0.7880848]\n",
"b : [0.48173314]\n",
"hypothesis : [1.269818 2.0579028 2.8459876]\n",
"cost : 0.033291433\n",
"Step : 25\n",
"X : [1. 2. 3.]\n",
"W : [0.79317904]\n",
"b : [0.4701526]\n",
"hypothesis : [1.2633317 2.0565107 2.8496897]\n",
"cost : 0.031710066\n",
"Step : 26\n",
"X : [1. 2. 3.]\n",
"W : [0.7981509]\n",
"b : [0.45885044]\n",
"hypothesis : [1.2570014 2.0551522 2.853303 ]\n",
"cost : 0.030203834\n",
"Step : 27\n",
"X : [1. 2. 3.]\n",
"W : [0.80300325]\n",
"b : [0.44782]\n",
"hypothesis : [1.2508233 2.0538266 2.8568296]\n",
"cost : 0.02876912\n",
"Step : 28\n",
"X : [1. 2. 3.]\n",
"W : [0.8077389]\n",
"b : [0.43705472]\n",
"hypothesis : [1.2447937 2.0525324 2.8602715]\n",
"cost : 0.027402552\n",
"Step : 29\n",
"X : [1. 2. 3.]\n",
"W : [0.8123607]\n",
"b : [0.4265482]\n",
"hypothesis : [1.2389089 2.0512695 2.8636303]\n",
"cost : 0.026100906\n",
"Step : 30\n",
"X : [1. 2. 3.]\n",
"W : [0.81687146]\n",
"b : [0.4162943]\n",
"hypothesis : [1.2331657 2.0500371 2.8669088]\n",
"cost : 0.024861082\n",
"Step : 31\n",
"X : [1. 2. 3.]\n",
"W : [0.8212737]\n",
"b : [0.40628687]\n",
"hypothesis : [1.2275605 2.0488343 2.870108 ]\n",
"cost : 0.02368018\n",
"Step : 32\n",
"X : [1. 2. 3.]\n",
"W : [0.82557017]\n",
"b : [0.39652002]\n",
"hypothesis : [1.2220902 2.0476604 2.8732305]\n",
"cost : 0.022555368\n",
"Step : 33\n",
"X : [1. 2. 3.]\n",
"W : [0.82976335]\n",
"b : [0.38698795]\n",
"hypothesis : [1.2167513 2.0465147 2.876278 ]\n",
"cost : 0.021483973\n",
"Step : 34\n",
"X : [1. 2. 3.]\n",
"W : [0.8338557]\n",
"b : [0.377685]\n",
"hypothesis : [1.2115407 2.0453963 2.8792522]\n",
"cost : 0.020463442\n",
"Step : 35\n",
"X : [1. 2. 3.]\n",
"W : [0.8378497]\n",
"b : [0.36860573]\n",
"hypothesis : [1.2064555 2.044305 2.882155 ]\n",
"cost : 0.01949142\n",
"Step : 36\n",
"X : [1. 2. 3.]\n",
"W : [0.84174764]\n",
"b : [0.3597447]\n",
"hypothesis : [1.2014923 2.04324 2.8849876]\n",
"cost : 0.018565571\n",
"Step : 37\n",
"X : [1. 2. 3.]\n",
"W : [0.84555197]\n",
"b : [0.3510967]\n",
"hypothesis : [1.1966486 2.0422006 2.8877525]\n",
"cost : 0.017683683\n",
"Step : 38\n",
"X : [1. 2. 3.]\n",
"W : [0.8492648]\n",
"b : [0.34265658]\n",
"hypothesis : [1.1919214 2.041186 2.890451 ]\n",
"cost : 0.016843697\n",
"Step : 39\n",
"X : [1. 2. 3.]\n",
"W : [0.85288835]\n",
"b : [0.33441937]\n",
"hypothesis : [1.1873077 2.040196 2.8930845]\n",
"cost : 0.016043605\n",
"Step : 40\n",
"X : [1. 2. 3.]\n",
"W : [0.8564248]\n",
"b : [0.32638016]\n",
"hypothesis : [1.182805 2.0392299 2.8956547]\n",
"cost : 0.015281525\n",
"Step : 41\n",
"X : [1. 2. 3.]\n",
"W : [0.8598762]\n",
"b : [0.3185342]\n",
"hypothesis : [1.1784104 2.0382867 2.8981628]\n",
"cost : 0.014555651\n",
"Step : 42\n",
"X : [1. 2. 3.]\n",
"W : [0.8632447]\n",
"b : [0.31087688]\n",
"hypothesis : [1.1741216 2.0373664 2.900611 ]\n",
"cost : 0.013864257\n",
"Step : 43\n",
"X : [1. 2. 3.]\n",
"W : [0.8665322]\n",
"b : [0.30340362]\n",
"hypothesis : [1.1699358 2.036468 2.903 ]\n",
"cost : 0.013205693\n",
"Step : 44\n",
"X : [1. 2. 3.]\n",
"W : [0.8697407]\n",
"b : [0.29611]\n",
"hypothesis : [1.1658508 2.0355914 2.905332 ]\n",
"cost : 0.012578412\n",
"Step : 45\n",
"X : [1. 2. 3.]\n",
"W : [0.87287205]\n",
"b : [0.28899172]\n",
"hypothesis : [1.1618638 2.034736 2.9076078]\n",
"cost : 0.011980931\n",
"Step : 46\n",
"X : [1. 2. 3.]\n",
"W : [0.8759281]\n",
"b : [0.28204456]\n",
"hypothesis : [1.1579727 2.0339007 2.909829 ]\n",
"cost : 0.01141182\n",
"Step : 47\n",
"X : [1. 2. 3.]\n",
"W : [0.8789107]\n",
"b : [0.2752644]\n",
"hypothesis : [1.1541752 2.0330858 2.9119966]\n",
"cost : 0.01086975\n",
"Step : 48\n",
"X : [1. 2. 3.]\n",
"W : [0.88182163]\n",
"b : [0.26864725]\n",
"hypothesis : [1.1504688 2.0322905 2.914112 ]\n",
"cost : 0.010353425\n",
"Step : 49\n",
"X : [1. 2. 3.]\n",
"W : [0.88466257]\n",
"b : [0.26218915]\n",
"hypothesis : [1.1468518 2.0315142 2.9161768]\n",
"cost : 0.009861639\n",
"Step : 50\n",
"X : [1. 2. 3.]\n",
"W : [0.8874352]\n",
"b : [0.2558863]\n",
"hypothesis : [1.1433215 2.0307567 2.918192 ]\n",
"cost : 0.009393199\n",
"Step : 51\n",
"X : [1. 2. 3.]\n",
"W : [0.8901411]\n",
"b : [0.24973494]\n",
"hypothesis : [1.1398761 2.0300171 2.9201584]\n",
"cost : 0.008947014\n",
"Step : 52\n",
"X : [1. 2. 3.]\n",
"W : [0.8927821]\n",
"b : [0.2437315]\n",
"hypothesis : [1.1365136 2.0292957 2.9220777]\n",
"cost : 0.00852203\n",
"Step : 53\n",
"X : [1. 2. 3.]\n",
"W : [0.8953596]\n",
"b : [0.23787236]\n",
"hypothesis : [1.1332319 2.0285916 2.9239511]\n",
"cost : 0.008117214\n",
"Step : 54\n",
"X : [1. 2. 3.]\n",
"W : [0.897875]\n",
"b : [0.23215406]\n",
"hypothesis : [1.1300291 2.027904 2.925779 ]\n",
"cost : 0.0077316463\n",
"Step : 55\n",
"X : [1. 2. 3.]\n",
"W : [0.90033007]\n",
"b : [0.22657324]\n",
"hypothesis : [1.1269033 2.0272334 2.9275634]\n",
"cost : 0.0073643867\n",
"Step : 56\n",
"X : [1. 2. 3.]\n",
"W : [0.90272605]\n",
"b : [0.22112657]\n",
"hypothesis : [1.1238526 2.0265787 2.9293046]\n",
"cost : 0.007014578\n",
"Step : 57\n",
"X : [1. 2. 3.]\n",
"W : [0.90506446]\n",
"b : [0.21581085]\n",
"hypothesis : [1.1208754 2.0259397 2.931004 ]\n",
"cost : 0.006681388\n",
"Step : 58\n",
"X : [1. 2. 3.]\n",
"W : [0.90734667]\n",
"b : [0.2106229]\n",
"hypothesis : [1.1179695 2.0253162 2.932663 ]\n",
"cost : 0.0063639977\n",
"Step : 59\n",
"X : [1. 2. 3.]\n",
"W : [0.9095739]\n",
"b : [0.20555966]\n",
"hypothesis : [1.1151335 2.0247076 2.9342813]\n",
"cost : 0.006061711\n",
"Step : 60\n",
"X : [1. 2. 3.]\n",
"W : [0.91174775]\n",
"b : [0.20061816]\n",
"hypothesis : [1.112366 2.0241137 2.9358616]\n",
"cost : 0.0057737716\n",
"Step : 61\n",
"X : [1. 2. 3.]\n",
"W : [0.9138692]\n",
"b : [0.19579542]\n",
"hypothesis : [1.1096647 2.0235338 2.9374032]\n",
"cost : 0.005499514\n",
"Step : 62\n",
"X : [1. 2. 3.]\n",
"W : [0.91593975]\n",
"b : [0.19108863]\n",
"hypothesis : [1.1070284 2.022968 2.9389079]\n",
"cost : 0.005238284\n",
"Step : 63\n",
"X : [1. 2. 3.]\n",
"W : [0.9179605]\n",
"b : [0.186495]\n",
"hypothesis : [1.1044555 2.022416 2.9403765]\n",
"cost : 0.004989462\n",
"Step : 64\n",
"X : [1. 2. 3.]\n",
"W : [0.9199327]\n",
"b : [0.1820118]\n",
"hypothesis : [1.1019446 2.0218773 2.94181 ]\n",
"cost : 0.0047524665\n",
"Step : 65\n",
"X : [1. 2. 3.]\n",
"W : [0.9218575]\n",
"b : [0.17763634]\n",
"hypothesis : [1.0994939 2.0213513 2.943209 ]\n",
"cost : 0.004526711\n",
"Step : 66\n",
"X : [1. 2. 3.]\n",
"W : [0.9237359]\n",
"b : [0.17336607]\n",
"hypothesis : [1.0971019 2.0208378 2.9445739]\n",
"cost : 0.004311684\n",
"Step : 67\n",
"X : [1. 2. 3.]\n",
"W : [0.9255693]\n",
"b : [0.1691985]\n",
"hypothesis : [1.0947678 2.020337 2.9459064]\n",
"cost : 0.0041068844\n",
"Step : 68\n",
"X : [1. 2. 3.]\n",
"W : [0.92735857]\n",
"b : [0.16513108]\n",
"hypothesis : [1.0924896 2.019848 2.9472067]\n",
"cost : 0.003911801\n",
"Step : 69\n",
"X : [1. 2. 3.]\n",
"W : [0.9291048]\n",
"b : [0.16116145]\n",
"hypothesis : [1.0902662 2.019371 2.9484758]\n",
"cost : 0.0037259895\n",
"Step : 70\n",
"X : [1. 2. 3.]\n",
"W : [0.9308091]\n",
"b : [0.15728724]\n",
"hypothesis : [1.0880964 2.0189054 2.9497147]\n",
"cost : 0.0035490005\n",
"Step : 71\n",
"X : [1. 2. 3.]\n",
"W : [0.93247235]\n",
"b : [0.15350614]\n",
"hypothesis : [1.0859785 2.0184507 2.9509232]\n",
"cost : 0.0033804218\n",
"Step : 72\n",
"X : [1. 2. 3.]\n",
"W : [0.9340957]\n",
"b : [0.14981598]\n",
"hypothesis : [1.0839117 2.0180073 2.9521031]\n",
"cost : 0.0032198457\n",
"Step : 73\n",
"X : [1. 2. 3.]\n",
"W : [0.93568]\n",
"b : [0.1462145]\n",
"hypothesis : [1.0818945 2.0175745 2.9532545]\n",
"cost : 0.0030669074\n",
"Step : 74\n",
"X : [1. 2. 3.]\n",
"W : [0.9372262]\n",
"b : [0.1426996]\n",
"hypothesis : [1.0799258 2.0171518 2.9543781]\n",
"cost : 0.0029212234\n",
"Step : 75\n",
"X : [1. 2. 3.]\n",
"W : [0.93873525]\n",
"b : [0.13926922]\n",
"hypothesis : [1.0780045 2.0167396 2.9554749]\n",
"cost : 0.002782467\n",
"Step : 76\n",
"X : [1. 2. 3.]\n",
"W : [0.940208]\n",
"b : [0.13592128]\n",
"hypothesis : [1.0761293 2.0163374 2.9565454]\n",
"cost : 0.0026502965\n",
"Step : 77\n",
"X : [1. 2. 3.]\n",
"W : [0.9416453]\n",
"b : [0.13265382]\n",
"hypothesis : [1.0742991 2.0159445 2.9575896]\n",
"cost : 0.0025244073\n",
"Step : 78\n",
"X : [1. 2. 3.]\n",
"W : [0.9430482]\n",
"b : [0.12946494]\n",
"hypothesis : [1.0725131 2.0155613 2.9586093]\n",
"cost : 0.0024044975\n",
"Step : 79\n",
"X : [1. 2. 3.]\n",
"W : [0.94441724]\n",
"b : [0.12635268]\n",
"hypothesis : [1.0707699 2.0151873 2.9596045]\n",
"cost : 0.002290276\n",
"Step : 80\n",
"X : [1. 2. 3.]\n",
"W : [0.9457534]\n",
"b : [0.12331524]\n",
"hypothesis : [1.0690687 2.014822 2.9605756]\n",
"cost : 0.002181486\n",
"Step : 81\n",
"X : [1. 2. 3.]\n",
"W : [0.9470574]\n",
"b : [0.12035082]\n",
"hypothesis : [1.0674082 2.0144656 2.961523 ]\n",
"cost : 0.0020778647\n",
"Step : 82\n",
"X : [1. 2. 3.]\n",
"W : [0.94833016]\n",
"b : [0.1174577]\n",
"hypothesis : [1.0657879 2.014118 2.9624481]\n",
"cost : 0.0019791697\n",
"Step : 83\n",
"X : [1. 2. 3.]\n",
"W : [0.94957227]\n",
"b : [0.1146341]\n",
"hypothesis : [1.0642064 2.0137787 2.9633508]\n",
"cost : 0.0018851585\n",
"Step : 84\n",
"X : [1. 2. 3.]\n",
"W : [0.9507845]\n",
"b : [0.11187838]\n",
"hypothesis : [1.0626628 2.0134473 2.964232 ]\n",
"cost : 0.0017956044\n",
"Step : 85\n",
"X : [1. 2. 3.]\n",
"W : [0.9519676]\n",
"b : [0.10918891]\n",
"hypothesis : [1.0611565 2.013124 2.9650915]\n",
"cost : 0.0017103213\n",
"Step : 86\n",
"X : [1. 2. 3.]\n",
"W : [0.9531223]\n",
"b : [0.10656411]\n",
"hypothesis : [1.0596864 2.0128088 2.965931 ]\n",
"cost : 0.0016290784\n",
"Step : 87\n",
"X : [1. 2. 3.]\n",
"W : [0.9542492]\n",
"b : [0.10400236]\n",
"hypothesis : [1.0582516 2.0125008 2.9667501]\n",
"cost : 0.0015516911\n",
"Step : 88\n",
"X : [1. 2. 3.]\n",
"W : [0.95534897]\n",
"b : [0.1015022]\n",
"hypothesis : [1.0568511 2.0122 2.967549 ]\n",
"cost : 0.001477986\n",
"Step : 89\n",
"X : [1. 2. 3.]\n",
"W : [0.9564224]\n",
"b : [0.09906217]\n",
"hypothesis : [1.0554845 2.0119069 2.9683294]\n",
"cost : 0.0014077773\n",
"Step : 90\n",
"X : [1. 2. 3.]\n",
"W : [0.95746994]\n",
"b : [0.09668078]\n",
"hypothesis : [1.0541507 2.0116208 2.9690907]\n",
"cost : 0.0013409085\n",
"Step : 91\n",
"X : [1. 2. 3.]\n",
"W : [0.95849234]\n",
"b : [0.09435664]\n",
"hypothesis : [1.0528489 2.0113413 2.9698336]\n",
"cost : 0.0012772155\n",
"Step : 92\n",
"X : [1. 2. 3.]\n",
"W : [0.9594902]\n",
"b : [0.09208838]\n",
"hypothesis : [1.0515785 2.0110688 2.970559 ]\n",
"cost : 0.0012165473\n",
"Step : 93\n",
"X : [1. 2. 3.]\n",
"W : [0.960464]\n",
"b : [0.08987463]\n",
"hypothesis : [1.0503386 2.0108027 2.9712667]\n",
"cost : 0.0011587589\n",
"Step : 94\n",
"X : [1. 2. 3.]\n",
"W : [0.9614144]\n",
"b : [0.08771409]\n",
"hypothesis : [1.0491285 2.0105429 2.9719574]\n",
"cost : 0.0011037166\n",
"Step : 95\n",
"X : [1. 2. 3.]\n",
"W : [0.96234196]\n",
"b : [0.0856055]\n",
"hypothesis : [1.0479474 2.0102894 2.9726315]\n",
"cost : 0.0010512877\n",
"Step : 96\n",
"X : [1. 2. 3.]\n",
"W : [0.96324724]\n",
"b : [0.08354761]\n",
"hypothesis : [1.0467949 2.0100422 2.9732893]\n",
"cost : 0.0010013572\n",
"Step : 97\n",
"X : [1. 2. 3.]\n",
"W : [0.96413076]\n",
"b : [0.08153919]\n",
"hypothesis : [1.0456699 2.0098007 2.9739313]\n",
"cost : 0.0009537902\n",
"Step : 98\n",
"X : [1. 2. 3.]\n",
"W : [0.96499306]\n",
"b : [0.07957906]\n",
"hypothesis : [1.0445721 2.009565 2.9745584]\n",
"cost : 0.0009084807\n",
"Step : 99\n",
"X : [1. 2. 3.]\n",
"W : [0.96583456]\n",
"b : [0.07766602]\n",
"hypothesis : [1.0435005 2.009335 2.9751697]\n",
"cost : 0.00086532865\n",
"\n",
"=== Test ===\n",
"X: 5, Y: [4.9068384]\n",
"X: 2.5, Y: [2.4922523]\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "RcydvT3eTIKB",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"### 2-2. 기본 신경망"
]
},
{
"metadata": {
"id": "45CkEBxkL_an",
"colab_type": "code",
"colab": {
"autoexec": {
"startup": false,
"wait_interval": 0
},
"output_extras": [
{
"item_id": 2
}
],
"base_uri": "https://localhost:8080/",
"height": 1115
},
"outputId": "8b024795-1f3d-435c-d6fd-3aca6d1dbe7b",
"executionInfo": {
"status": "ok",
"timestamp": 1520496996875,
"user_tz": -540,
"elapsed": 1114,
"user": {
"displayName": "sj jin",
"photoUrl": "https://lh3.googleusercontent.com/a/default-user=s128",
"userId": "107618035827318999649"
}
}
},
"cell_type": "code",
"source": [
"# tensorflow와 numpy를 불러옵니다.\n",
"import tensorflow as tf\n",
"import numpy as np\n",
"\n",
"# 레이블의 데이터는 원-핫 인코딩형태로 구성됩니다.\n",
"# 원-핫 인코딩 : 표현하려는 값을 뜻하는 인덱스 원소만 1로 표기하고 나머지 원소는 모두 0으로 채우는 표기법입니다.\n",
"# [털, 날개]\n",
"x_data = np.array([[0,0], [1,0], [1,1], [0,0], [0,0], [0,1]])\n",
"print(\"x_data : \",np.shape(x_data))\n",
"# x_data 는 1X6의 행렬\n",
"# 기타 = [1, 0, 0] 포유류 = [0, 1, 0] 조류 = [0, 0, 1]\n",
"y_data = np.array([[1,0,0],[0,1,0],[0,0,1],[1,0,0],[1,0,0],[0,0,1]])\n",
"print(\"y_data : \",np.shape(y_data))\n",
"\n",
"X = tf.placeholder(tf.float32)\n",
"Y = tf.placeholder(tf.float32)\n",
"\n",
"# 편향을 각각 각 레이어의 아웃풋 갯수로 설정합니다.\n",
"# 편향은 아웃풋의 갯수, 즉 최종 결과값의 분류 갯수인 3으로 설정합니다.\n",
"W = tf.Variable(tf.random_uniform([2,3],-1.,1.))\n",
"# 가중치 변수 W는 [입력층(특징 수), 출력층(레이블 수)], 편향변수 b는 레이블 수인 3개의 요소를 가진 변수로 설정\n",
"b = tf.Variable(tf.zeros([3]))\n",
"\n",
"# 신경망에 가중치 W과 편향 b을 적용합니다\n",
"# L = tf.add(tf.matmul(X, W), b) 는 X*W+b를 구현한 것입니다.\n",
"L = tf.add(tf.matmul(X, W), b)\n",
"# 가중치와 편향을 이용해 계산한 결과 값에\n",
"# 텐서플로우에서 기본적으로 제공하는 활성화 함수인 ReLU 함수를 적용합니다\n",
"L = tf.nn.relu(L)\n",
"\n",
"# 마지막으로 softmax 함수를 이용하여 출력값을 사용하기 쉽게 만듭니다\n",
"# softmax 함수는 다음처럼 결과값을 전체합이 1인 확률로 만들어주는 함수입니다.\n",
"# 예) [8.04, 2.76, -6.52] -> [0.53 0.24 0.23]\n",
"model = tf.nn.softmax(L)\n",
"\n",
"# 신경망을 최적화하기 위한 비용 함수를 작성합니다.\n",
"# 각 개별 결과에 대한 합을 구한 뒤 평균을 내는 방식을 사용합니다.\n",
"# 전체 합이 아닌, 개별 결과를 구한 뒤 평균을 내는 방식을 사용하기 위해 axis 옵션을 사용합니다.\n",
"# axis 옵션이 없으면 -1.09 처럼 총합인 스칼라값으로 출력됩니다.\n",
"# Y model Y * tf.log(model) reduce_sum(axis=1)\n",
"# 예) [[1 0 0] [[0.1 0.7 0.2] -> [[-1.0 0 0] -> [-1.0, -0.09]\n",
"# [0 1 0]] [0.2 0.8 0.0]] [ 0 -0.09 0]]\n",
"# 즉, 이것은 예측값과 실제값 사이의 확률 분포의 차이를 비용으로 계산한 것이며,\n",
"# 이것을 Cross-Entropy 라고 합니다\n",
"cost = tf.reduce_mean(-tf.reduce_sum(Y*tf.log(model),axis=1))\n",
"\n",
"# 기본적인 경사하강법으로 최적화합니다.\n",
"optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)\n",
"train_op = optimizer.minimize(cost)\n",
"\n",
"# 텐서플로의 세션을 초기화합니다.\n",
"init = tf.global_variables_initializer()\n",
"sess = tf.Session()\n",
"sess.run(init)\n",
"\n",
"# 앞서 구성한 특징과 레이블 데이터를 이용해 학습을 100번 진행합니다.\n",
"# 신경망 모델 학습\n",
"for step in range(100):\n",
" sess.run(train_op, feed_dict={X:x_data, Y:y_data})\n",
" \n",
" # 학습 도중 20번에 한 번씩 손실값을 출력해봅니다.\n",
" if (step + 1) % 50 == 0:\n",
" print(step + 1,sess.run(cost, feed_dict={X: x_data, Y: y_data}))\n",
" print(\"X : \",sess.run(X, feed_dict={X:x_data}))\n",
" print(\"W : \",sess.run(W))\n",
" print(\"b : \",sess.run(b))\n",
" print(\"L : \",sess.run(L, feed_dict={X: x_data, Y: y_data}))\n",
" print(\"model : \",sess.run(model, feed_dict={X: x_data, Y: y_data}))\n",
" print(\"Y : \",sess.run(Y, feed_dict={Y:y_data}))\n",
" \n",
" \n",
"#########\n",
"# 결과 확인\n",
"# 0: 기타 1: 포유류, 2: 조류\n",
"######\n",
"# tf.argmax: 예측값과 실제값의 행렬에서 tf.argmax 를 이용해 가장 큰 값을 가져옵니다.\n",
"# 예) [[0 1 0] [1 0 0]] -> [1 0]\n",
"# [[0.2 0.7 0.1] [0.9 0.1 0.]] -> [1 0]\n",
"prediction = tf.argmax(model, axis=1)\n",
"target = tf.argmax(Y, axis=1)\n",
"print('예측값:',sess.run(prediction, feed_dict={X: x_data}))\n",
"print('실제값:',sess.run(target, feed_dict={Y: y_data}))\n",
"is_correct = tf.equal(prediction,target)\n",
"accuracy = tf.reduce_mean(tf.cast(is_correct, tf.float32))\n",
"print('정확도:%.2f' % sess.run(accuracy*100,feed_dict={X:x_data,Y:y_data}))"
],
"execution_count": 12,
"outputs": [
{
"output_type": "stream",
"text": [
"x_data : (6, 2)\n",
"y_data : (6, 3)\n",
"50 1.1919755\n",
"X : [[0. 0.]\n",
" [1. 0.]\n",
" [1. 1.]\n",
" [0. 0.]\n",
" [0. 0.]\n",
" [0. 1.]]\n",
"W : [[ 0.05458459 0.91043437 -0.24742794]\n",
" [-0.81989694 0.6731468 -0.05407214]]\n",
"b : [-0.01960769 -0.06307384 0. ]\n",
"L : [[0. 0. 0. ]\n",
" [0.0349769 0.84736055 0. ]\n",
" [0. 1.5205073 0. ]\n",
" [0. 0. 0. ]\n",
" [0. 0. 0. ]\n",
" [0. 0.610073 0. ]]\n",
"model : [[0.33333334 0.33333334 0.33333334]\n",
" [0.23702858 0.53409004 0.22888139]\n",
" [0.15210177 0.69579643 0.15210177]\n",
" [0.33333334 0.33333334 0.33333334]\n",
" [0.33333334 0.33333334 0.33333334]\n",
" [0.2603783 0.47924337 0.2603783 ]]\n",
"Y : [[1. 0. 0.]\n",
" [0. 1. 0.]\n",
" [0. 0. 1.]\n",
" [1. 0. 0.]\n",
" [1. 0. 0.]\n",
" [0. 0. 1.]]\n",
"100 1.1658512\n",
"X : [[0. 0.]\n",
" [1. 0.]\n",
" [1. 1.]\n",
" [0. 0.]\n",
" [0. 0.]\n",
" [0. 1.]]\n",
"W : [[ 0.03673292 0.8933381 -0.24742794]\n",
" [-0.81989694 0.5782817 -0.05407214]]\n",
"b : [-0.03745937 -0.11855632 0. ]\n",
"L : [[0. 0. 0. ]\n",
" [0. 0.77478176 0. ]\n",
" [0. 1.3530636 0. ]\n",
" [0. 0. 0. ]\n",
" [0. 0. 0. ]\n",
" [0. 0.45972538 0. ]]\n",
"model : [[0.33333334 0.33333334 0.33333334]\n",
" [0.23980133 0.5203973 0.23980133]\n",
" [0.17037918 0.6592416 0.17037918]\n",
" [0.33333334 0.33333334 0.33333334]\n",
" [0.33333334 0.33333334 0.33333334]\n",
" [0.27904594 0.4419081 0.27904594]]\n",
"Y : [[1. 0. 0.]\n",
" [0. 1. 0.]\n",
" [0. 0. 1.]\n",
" [1. 0. 0.]\n",
" [1. 0. 0.]\n",
" [0. 0. 1.]]\n",
"예측값: [0 1 1 0 0 1]\n",
"실제값: [0 1 2 0 0 2]\n",
"정확도:66.67\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "fQgXznXsRBBc",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"### 2-3. 심층 신경망"
]
},
{
"metadata": {
"id": "t7NBM4WbRSf3",
"colab_type": "code",
"colab": {
"autoexec": {
"startup": false,
"wait_interval": 0
},
"output_extras": [
{
"item_id": 2
}
],
"base_uri": "https://localhost:8080/",
"height": 6623
},
"outputId": "8b0a883a-5051-455d-90de-999e09739816",
"executionInfo": {
"status": "ok",
"timestamp": 1520501948614,
"user_tz": -540,
"elapsed": 1332,
"user": {
"displayName": "sj jin",
"photoUrl": "https://lh3.googleusercontent.com/a/default-user=s128",
"userId": "107618035827318999649"
}
}
},
"cell_type": "code",
"source": [
"import tensorflow as tf\n",
"import numpy as np\n",
"\n",
"# [털, 날개]\n",
"x_data = np.array([[0,0], [1,0], [1,1], [0,0], [0,0], [0,1]])\n",
"# 기타 = [1, 0, 0] 포유류 = [0, 1, 0] 조류 = [0, 0, 1]\n",
"y_data = np.array([[1,0,0],[0,1,0],[0,0,1],[1,0,0],[1,0,0],[0,0,1]])\n",
"\n",
"X = tf.placeholder(tf.float32)\n",
"Y = tf.placeholder(tf.float32)\n",
"\n",
"# 가중치\n",
"# W1 = [2,10] -> [특징,은닉층의 뉴런 수]\n",
"# W2 = [10, 3] -> [은닉층의 뉴런 수, 분류 수]\n",
"W1 = tf.Variable(tf.random_uniform([2, 10],-1.,1.))\n",
"W2 = tf.Variable(tf.random_uniform([10, 3],-1.,1.))\n",
"\n",
"# 편향\n",
"# b1 = [10] -> 은닉층의 뉴런 수\n",
"# b2 = [3] -> 분류 수\n",
"b1 = tf.Variable(tf.zeros([10]))\n",
"b2 = tf.Variable(tf.zeros([3]))\n",
"\n",
"L1 = tf.add(tf.matmul(X,W1),b1)\n",
"L1 = tf.nn.relu(L1)\n",
"\n",
"model = tf.add(tf.matmul(L1, W2), b2)\n",
"\n",
"# 텐서플로우에서 기본적으로 제공되는 크로스 엔트로피 함수를 이용해\n",
"# 복잡한 수식을 사용하지 않고도 최적화를 위한 비용 함수를 다음처럼 간단하게 적용할 수 있습니다.\n",
"cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(labels=Y, logits=model))\n",
"\n",
"optimizer = tf.train.AdamOptimizer(learning_rate=0.01)\n",
"train_op = optimizer.minimize(cost)\n",
"\n",
"# 텐서플로의 세션을 초기화합니다.\n",
"init = tf.global_variables_initializer()\n",
"sess = tf.Session()\n",
"sess.run(init)\n",
"\n",
"# 앞서 구성한 특징과 레이블 데이터를 이용해 학습을 100번 진행합니다.\n",
"for step in range(100):\n",
" sess.run(train_op, feed_dict={X:x_data, Y:y_data})\n",
" # 학습 도중 10번에 한 번씩 손실값을 출력해봅니다.\n",
" if (step + 1) % 10 == 0:\n",
" print(\"step cost : \",step + 1,sess.run(cost, feed_dict={X: x_data, Y: y_data}))\n",
" print(\"W1:\",sess.run(W1))\n",
" print(\"b1:\",sess.run(b1))\n",
" print(\"L1 : \",sess.run(L1, feed_dict={X: x_data, Y: y_data}))\n",
" print(\"W2:\",sess.run(W2))\n",
" print(\"b2:\",sess.run(b2))\n",
" print(\"model : \",sess.run(model, feed_dict={X: x_data, Y: y_data}))\n",
"\n",
"#########\n",
"# 결과 확인\n",
"# 0: 기타 1: 포유류, 2: 조류\n",
"######\n",
"prediction = tf.argmax(model, axis=1)\n",
"target = tf.argmax(Y, axis=1)\n",
"print('예측값:',sess.run(prediction, feed_dict={X: x_data}))\n",
"print('실제값:',sess.run(target, feed_dict={Y: y_data}))\n",
"is_correct = tf.equal(prediction,target)\n",
"accuracy = tf.reduce_mean(tf.cast(is_correct, tf.float32))\n",
"print('정확도:%.2f' % sess.run(accuracy*100,feed_dict={X:x_data,Y:y_data}))"
],
"execution_count": 24,
"outputs": [
{
"output_type": "stream",
"text": [
"step cost : 10 1.046596\n",
"W1: [[ 0.44128552 -0.44811106 0.8791843 0.6113248 0.43066537 0.5246577\n",
" -0.841825 -0.2559269 0.45148063 0.16197136]\n",
" [ 0.72483337 -0.154984 0.20120563 -0.01535047 0.26277563 0.43975636\n",
" 0.94219226 0.87467366 -0.6602466 -0.90898824]]\n",
"b1: [-0.09093576 0. -0.09742142 0.00153605 -0.0020352 -0.09632207\n",
" -0.01681095 0.08506852 -0.09935971 -0.00422897]\n",
"L1 : [[0. 0. 0. 0.00153605 0. 0.\n",
" 0. 0.08506852 0. 0. ]\n",
" [0.35034975 0. 0.7817629 0.61286086 0.42863017 0.42833567\n",
" 0. 0. 0.3521209 0.1577424 ]\n",
" [1.0751832 0. 0.98296857 0.5975104 0.69140583 0.86809206\n",
" 0.0835563 0.7038153 0. 0. ]\n",
" [0. 0. 0. 0.00153605 0. 0.\n",
" 0. 0.08506852 0. 0. ]\n",
" [0. 0. 0. 0.00153605 0. 0.\n",
" 0. 0.08506852 0. 0. ]\n",
" [0.6338976 0. 0.1037842 0. 0.26074043 0.3434343\n",
" 0.9253813 0.9597422 0. 0. ]]\n",
"W2: [[-0.11425611 0.4787352 -0.7090023 ]\n",
" [-0.7382896 -0.8083072 -0.7351637 ]\n",
" [ 0.5935315 -0.71486104 0.17703556]\n",
" [-0.49861172 0.18725947 0.37600482]\n",
" [ 0.73518544 0.9159453 0.99590224]\n",
" [ 0.22151259 -0.3138446 -0.07132074]\n",
" [-0.2500444 -0.93867046 -0.23836116]\n",
" [-0.58228636 -0.7518243 0.48466045]\n",
" [-0.10730918 -0.3736293 0.66574574]\n",
" [ 0.18450767 0.77178454 0.22611931]]\n",
"b2: [ 0.10010476 -0.10012923 0.00313705]\n",
"model : [[ 0.04980464 -0.16379817 0.04494395]\n",
" [ 0.6198197 -0.1281409 0.78999287]\n",
" [ 0.53264564 -0.42293102 0.58737135]\n",
" [ 0.04980464 -0.16379817 0.04494395]\n",
" [ 0.04980464 -0.16379817 0.04494395]\n",
" [-0.43318635 -1.3299981 0.05182776]]\n",
"step cost : 20 0.769567\n",
"W1: [[ 0.5477355 -0.44811106 0.79130936 0.70395225 0.5376948 0.44385803\n",
" -0.75392246 -0.16158065 0.35752207 0.26653734]\n",
" [ 0.6379079 -0.154984 0.1614185 0.08370687 0.36722857 0.37756398\n",
" 1.0401912 0.9691953 -0.6602466 -0.90898824]]\n",
"b1: [-0.12050851 0. -0.18291223 -0.00163834 -0.00114634 -0.1746296\n",
" 0.07783379 0.12597395 -0.19331829 0.01705815]\n",
"L1 : [[0. 0. 0. 0. 0. 0.\n",
" 0.07783379 0.12597395 0. 0.01705815]\n",
" [0.427227 0. 0.6083971 0.7023139 0.5365485 0.26922843\n",
" 0. 0. 0.16420378 0.2835955 ]\n",
" [1.0651349 0. 0.7698156 0.78602076 0.90377706 0.6467924\n",
" 0.3641025 0.9335886 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0.\n",
" 0.07783379 0.12597395 0. 0.01705815]\n",
" [0. 0. 0. 0. 0. 0.\n",
" 0.07783379 0.12597395 0. 0.01705815]\n",
" [0.51739943 0. 0. 0.08206853 0.36608222 0.20293438\n",
" 1.118025 1.0951693 0. 0. ]]\n",
"W2: [[-0.19638179 0.5567249 -0.6269227 ]\n",
" [-0.7382896 -0.8083072 -0.7351637 ]\n",
" [ 0.5151193 -0.62529045 0.24087179]\n",
" [-0.5929686 0.28560606 0.44676268]\n",
" [ 0.64079016 1.0141796 1.0876201 ]\n",
" [ 0.14481567 -0.23497994 0.00460113]\n",
" [-0.33647734 -1.039367 -0.1474528 ]\n",
" [-0.6662295 -0.8582434 0.5787157 ]\n",
" [-0.18581146 -0.2888994 0.57518804]\n",
" [ 0.07897314 0.8800484 0.11850635]]\n",
"b2: [ 0.20889041 -0.19955483 -0.09921846]\n",
"model : [[ 0.10012067 -0.37355703 -0.03577067]\n",
" [ 0.39662683 0.5414859 0.8061122 ]\n",
" [-0.1415208 -0.2785072 1.2421525 ]\n",
" [ 0.10012067 -0.37355703 -0.03577067]\n",
" [ 0.10012067 -0.37355703 -0.03577067]\n",
" [-0.78323567 -1.6664388 0.48110512]]\n",
"step cost : 30 0.5680456\n",
"W1: [[ 0.66127956 -0.44811106 0.71813077 0.78397447 0.64547217 0.3843968\n",
" -0.6439126 -0.08266614 0.27663434 0.37346637]\n",
" [ 0.5690191 -0.154984 0.17127572 0.17534187 0.4655936 0.3539456\n",
" 1.15106 1.0519838 -0.6602466 -0.90898824]]\n",
"b1: [-0.07162697 0. -0.25316194 -0.00224788 -0.00154764 -0.22944479\n",
" 0.18438636 0.08044125 -0.27420595 -0.00243953]\n",
"L1 : [[0. 0. 0. 0. 0. 0.\n",
" 0.18438636 0.08044125 0. 0. ]\n",
" [0.5896526 0. 0.46496883 0.7817266 0.64392453 0.154952\n",
" 0. 0. 0.00242838 0.37102684]\n",
" [1.1586716 0. 0.63624454 0.9570685 1.109518 0.5088976\n",
" 0.69153374 1.0497589 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0.\n",
" 0.18438636 0.08044125 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0.\n",
" 0.18438636 0.08044125 0. 0. ]\n",
" [0.49739212 0. 0. 0.17309399 0.46404597 0.12450083\n",
" 1.3354464 1.1324251 0. 0. ]]\n",
"W2: [[-0.25909302 0.6618335 -0.56965005]\n",
" [-0.7382896 -0.8083072 -0.7351637 ]\n",
" [ 0.46150565 -0.55113846 0.26633397]\n",
" [-0.67680275 0.37884077 0.46246976]\n",
" [ 0.55753386 1.110683 1.1600943 ]\n",
" [ 0.09515897 -0.18188785 0.05301772]\n",
" [-0.39433217 -1.1505216 -0.06762698]\n",
" [-0.72270924 -0.9628158 0.6585504 ]\n",
" [-0.2349643 -0.23251928 0.51197314]\n",
" [-0.02865156 0.99391127 0.0035303 ]]\n",
"b2: [ 0.3239862 -0.2959552 -0.21644154]\n",
"model : [[ 0.1931411 -0.5855458 -0.17593642]\n",
" [ 0.21927607 1.1893995 0.69080615]\n",
" [-0.69467807 -0.18377838 1.694269 ]\n",
" [ 0.1931411 -0.5855458 -0.17593642]\n",
" [ 0.1931411 -0.5855458 -0.17593642]\n",
" [-0.99649 -2.0352032 0.7806543 ]]\n",
"step cost : 40 0.42227545\n",
"W1: [[ 0.76687676 -0.44811106 0.6623411 0.85057926 0.7467051 0.34422618\n",
" -0.53343177 -0.01940797 0.22825891 0.47620732]\n",
" [ 0.5160366 -0.154984 0.20384604 0.24859832 0.5519479 0.35463852\n",
" 1.259578 1.1219512 -0.6602466 -0.90898824]]\n",
"b1: [ 6.1690072e-03 0.0000000e+00 -3.0649495e-01 -1.3302882e-03\n",
" -5.4449891e-05 -2.6417199e-01 2.8146791e-01 -1.1838646e-02\n",
" -3.2258141e-01 3.9338274e-04]\n",
"L1 : [[6.1690072e-03 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00\n",
" 0.0000000e+00 2.8146791e-01 0.0000000e+00 0.0000000e+00 3.9338274e-04]\n",
" [7.7304578e-01 0.0000000e+00 3.5584617e-01 8.4924895e-01 7.4665064e-01\n",
" 8.0054194e-02 0.0000000e+00 0.0000000e+00 0.0000000e+00 4.7660071e-01]\n",
" [1.2890824e+00 0.0000000e+00 5.5969220e-01 1.0978473e+00 1.2985985e+00\n",
" 4.3469271e-01 1.0076141e+00 1.0907046e+00 0.0000000e+00 0.0000000e+00]\n",
" [6.1690072e-03 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00\n",
" 0.0000000e+00 2.8146791e-01 0.0000000e+00 0.0000000e+00 3.9338274e-04]\n",
" [6.1690072e-03 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00\n",
" 0.0000000e+00 2.8146791e-01 0.0000000e+00 0.0000000e+00 3.9338274e-04]\n",
" [5.2220565e-01 0.0000000e+00 0.0000000e+00 2.4726804e-01 5.5189341e-01\n",
" 9.0466529e-02 1.5410459e+00 1.1101125e+00 0.0000000e+00 0.0000000e+00]]\n",
"W2: [[-0.3068793 0.7788533 -0.5334075 ]\n",
" [-0.7382896 -0.8083072 -0.7351637 ]\n",
" [ 0.4282836 -0.49892232 0.2736163 ]\n",
" [-0.74707836 0.45898342 0.45415327]\n",
" [ 0.48743948 1.1965139 1.2163547 ]\n",
" [ 0.06691475 -0.15829413 0.08287332]\n",
" [-0.40083575 -1.2705028 -0.00581435]\n",
" [-0.7653872 -1.0536425 0.725689 ]\n",
" [-0.2566164 -0.20727827 0.4833121 ]\n",
" [-0.14157751 1.1058758 -0.10656934]]\n",
"b2: [ 0.43894976 -0.39553446 -0.33344257]\n",
"model : [[ 0.32417852 -0.7479005 -0.33841163]\n",
" [ 0.02149346 1.8265734 0.60129887]\n",
" [-1.1137376 -0.111285 2.0319176 ]\n",
" [ 0.32417852 -0.7479005 -0.33841163]\n",
" [ 0.32417852 -0.7479005 -0.33841163]\n",
" [-1.0983369 -2.356858 0.9757383 ]]\n",
"step cost : 50 0.3261352\n",
"W1: [[ 0.8534383 -0.44811106 0.6240174 0.9029966 0.8337729 0.31886485\n",
" -0.43068716 0.03503316 0.20939563 0.5667432 ]\n",
" [ 0.4746926 -0.154984 0.24187928 0.30558774 0.6270547 0.3666691\n",
" 1.3590336 1.1811123 -0.6602466 -0.90898824]]\n",
"b1: [ 0.01379027 0. -0.343046 -0.0019304 -0.00610155 -0.28433013\n",
" 0.36981604 -0.02841019 -0.34144464 -0.00276759]\n",
"L1 : [[0.01379027 0. 0. 0. 0. 0.\n",
" 0.36981604 0. 0. 0. ]\n",
" [0.86722857 0. 0.2809714 0.9010662 0.82767135 0.03453472\n",
" 0. 0.00662297 0. 0.56397563]\n",
" [1.3419212 0. 0.5228507 1.206654 1.454726 0.4012038\n",
" 1.2981625 1.1877352 0. 0. ]\n",
" [0.01379027 0. 0. 0. 0. 0.\n",
" 0.36981604 0. 0. 0. ]\n",
" [0.01379027 0. 0. 0. 0. 0.\n",
" 0.36981604 0. 0. 0. ]\n",
" [0.4884829 0. 0. 0.30365732 0.62095314 0.08233896\n",
" 1.7288496 1.1527021 0. 0. ]]\n",
"W2: [[-0.34239662 0.8835345 -0.5106834 ]\n",
" [-0.7382896 -0.8083072 -0.7351637 ]\n",
" [ 0.40913743 -0.46846545 0.27727577]\n",
" [-0.8026177 0.51926935 0.463073 ]\n",
" [ 0.43043724 1.2613165 1.265863 ]\n",
" [ 0.05183822 -0.15781784 0.10306045]\n",
" [-0.35616812 -1.3929045 0.03588193]\n",
" [-0.8102428 -1.1241943 0.78497964]\n",
" [-0.26505932 -0.19743595 0.47213614]\n",
" [-0.24370566 1.2066255 -0.2056114 ]]\n",
"b2: [ 0.54914564 -0.5004089 -0.44253775]\n",
"model : [[ 0.4127072 -1.0033431 -0.4363105 ]\n",
" [-0.14080572 2.3136551 0.55026567]\n",
" [-1.4426398 -0.30504295 2.4376683 ]\n",
" [ 0.4127072 -1.0033431 -0.4363105 ]\n",
" [ 0.4127072 -1.0033431 -0.4363105 ]\n",
" [-1.1400099 -2.844897 1.2100272 ]]\n",
"step cost : 60 0.25813708\n",
"W1: [[ 0.9249004 -0.44811106 0.59757984 0.9425649 0.90373546 0.30182326\n",
" -0.381842 0.04787391 0.20214416 0.64356846]\n",
" [ 0.4448757 -0.154984 0.27315143 0.3508953 0.69275975 0.3810067\n",
" 1.4392008 1.2284862 -0.6602466 -0.90898824]]\n",
"b1: [-0.01802473 0. -0.36822227 -0.00089578 -0.00920317 -0.29663065\n",
" 0.4381062 -0.01902648 -0.3486961 0.00131541]\n",
"L1 : [[0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00\n",
" 0.0000000e+00 4.3810621e-01 0.0000000e+00 0.0000000e+00 1.3154064e-03]\n",
" [9.0687567e-01 0.0000000e+00 2.2935757e-01 9.4166911e-01 8.9453226e-01\n",
" 5.1926076e-03 5.6264222e-02 2.8847439e-02 0.0000000e+00 6.4488387e-01]\n",
" [1.3517514e+00 0.0000000e+00 5.0250900e-01 1.2925644e+00 1.5872920e+00\n",
" 3.8619933e-01 1.4954649e+00 1.2573335e+00 0.0000000e+00 0.0000000e+00]\n",
" [0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00\n",
" 0.0000000e+00 4.3810621e-01 0.0000000e+00 0.0000000e+00 1.3154064e-03]\n",
" [0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00\n",
" 0.0000000e+00 4.3810621e-01 0.0000000e+00 0.0000000e+00 1.3154064e-03]\n",
" [4.2685097e-01 0.0000000e+00 0.0000000e+00 3.4999949e-01 6.8355656e-01\n",
" 8.4376037e-02 1.8773069e+00 1.2094597e+00 0.0000000e+00 0.0000000e+00]]\n",
"W2: [[-0.36825368 0.9812498 -0.49874935]\n",
" [-0.7382896 -0.8083072 -0.7351637 ]\n",
" [ 0.39848495 -0.4514943 0.27927235]\n",
" [-0.84527034 0.5658506 0.46795985]\n",
" [ 0.3847306 1.3152686 1.3039317 ]\n",
" [ 0.04383545 -0.16638058 0.1168832 ]\n",
" [-0.27488914 -1.5057642 0.0494817 ]\n",
" [-0.85281694 -1.1744142 0.8335357 ]\n",
" [-0.26830497 -0.19365232 0.46783987]\n",
" [-0.32901528 1.2935497 -0.292606 ]]\n",
"b2: [ 0.65211666 -0.5967883 -0.5457549 ]\n",
"model : [[ 0.5312532 -1.2547715 -0.52446157]\n",
" [-0.29427618 2.6136498 0.51180637]\n",
" [-1.5937482 -0.47085243 2.762156 ]\n",
" [ 0.5312532 -1.2547715 -0.52446157]\n",
" [ 0.5312532 -1.2547715 -0.52446157]\n",
" [-1.0817322 -3.3420596 1.4073325 ]]\n",
"step cost : 70 0.20631278\n",
"W1: [[ 0.9847492 -0.44811106 0.57854426 0.9729115 0.95998114 0.29198205\n",
" -0.430944 0.03369518 0.19939274 0.70864874]\n",
" [ 0.42344534 -0.154984 0.29675364 0.39024213 0.75414443 0.39490983\n",
" 1.501129 1.2676235 -0.6602466 -0.90898824]]\n",
"b1: [-0.00064985 0. -0.386333 -0.0021028 0.00161633 -0.30255502\n",
" 0.4788682 -0.01125351 -0.35144746 -0.00196835]\n",
"L1 : [[0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 1.6163329e-03\n",
" 0.0000000e+00 4.7886819e-01 0.0000000e+00 0.0000000e+00 0.0000000e+00]\n",
" [9.8409933e-01 0.0000000e+00 1.9221127e-01 9.7080868e-01 9.6159750e-01\n",
" 0.0000000e+00 4.7924191e-02 2.2441667e-02 0.0000000e+00 7.0668042e-01]\n",
" [1.4075447e+00 0.0000000e+00 4.8896492e-01 1.3610507e+00 1.7157420e+00\n",
" 3.8433689e-01 1.5490532e+00 1.2900653e+00 0.0000000e+00 0.0000000e+00]\n",
" [0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 1.6163329e-03\n",
" 0.0000000e+00 4.7886819e-01 0.0000000e+00 0.0000000e+00 0.0000000e+00]\n",
" [0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 1.6163329e-03\n",
" 0.0000000e+00 4.7886819e-01 0.0000000e+00 0.0000000e+00 0.0000000e+00]\n",
" [4.2279547e-01 0.0000000e+00 0.0000000e+00 3.8813934e-01 7.5576079e-01\n",
" 9.2354804e-02 1.9799972e+00 1.2563701e+00 0.0000000e+00 0.0000000e+00]]\n",
"W2: [[-0.38875142 1.0713208 -0.49240506]\n",
" [-0.7382896 -0.8083072 -0.7351637 ]\n",
" [ 0.39240932 -0.44204894 0.28069428]\n",
" [-0.87937784 0.60310537 0.4714641 ]\n",
" [ 0.34617093 1.362224 1.3348092 ]\n",
" [ 0.03917657 -0.17738724 0.12705888]\n",
" [-0.17988025 -1.604042 0.04028332]\n",
" [-0.8934655 -1.2095957 0.8740641 ]\n",
" [-0.26953644 -0.19221672 0.46620977]\n",
" [-0.3986392 1.3680363 -0.368955 ]]\n",
"b2: [ 0.7453628 -0.679308 -0.6414919]\n",
"model : [[ 0.6597834 -1.445231 -0.620044 ]\n",
" [-0.39299434 3.0481691 0.42994857]\n",
" [-1.6291015 -0.34282088 2.9733844 ]\n",
" [ 0.6597834 -1.445231 -0.620044 ]\n",
" [ 0.6597834 -1.445231 -0.620044 ]\n",
" [-0.9737658 -3.674835 1.531755 ]]\n",
"step cost : 80 0.16717894\n",
"W1: [[ 1.028487 -0.44811106 0.56588715 0.99581194 1.004492 0.29096392\n",
" -0.49372706 0.0182181 0.19835995 0.7605084 ]\n",
" [ 0.40597698 -0.154984 0.31674877 0.42830676 0.8164682 0.4090828\n",
" 1.5519956 1.3038825 -0.6602466 -0.90898824]]\n",
"b1: [-6.9554043e-03 0.0000000e+00 -3.9836952e-01 -5.2278368e-03\n",
" -4.6045557e-03 -3.0082297e-01 5.2494007e-01 -1.1519307e-03\n",
" -3.5248029e-01 -1.1902768e-05]\n",
"L1 : [[0. 0. 0. 0. 0. 0.\n",
" 0.5249401 0. 0. 0. ]\n",
" [1.0215316 0. 0.16751763 0.9905841 0.99988747 0.\n",
" 0.03121302 0.01706617 0. 0.7604965 ]\n",
" [1.4275086 0. 0.48426643 1.418891 1.8163557 0.39922374\n",
" 1.5832086 1.3209487 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0.\n",
" 0.5249401 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0.\n",
" 0.5249401 0. 0. 0. ]\n",
" [0.39902157 0. 0. 0.42307892 0.8118636 0.10825983\n",
" 2.0769358 1.3027306 0. 0. ]]\n",
"W2: [[-0.4056603 1.1369671 -0.48584038]\n",
" [-0.7382896 -0.8083072 -0.7351637 ]\n",
" [ 0.3887716 -0.43813068 0.28365943]\n",
" [-0.90807813 0.6280311 0.5098367 ]\n",
" [ 0.3113794 1.3926651 1.3720087 ]\n",
" [ 0.03580096 -0.18931144 0.13582961]\n",
" [-0.08747068 -1.6914091 0.02350491]\n",
" [-0.9345041 -1.2381704 0.9118388 ]\n",
" [-0.2699987 -0.19167782 0.4655978 ]\n",
" [-0.45316443 1.4278221 -0.43092594]]\n",
"b2: [ 0.82789505 -0.7529109 -0.7260748 ]\n",
"model : [[ 0.7819782 -1.6407993 -0.7137362 ]\n",
" [-0.4728657 3.3616974 0.39060974]\n",
" [-1.6444315 -0.31036052 3.2291408 ]\n",
" [ 0.7819782 -1.6407993 -0.7137362 ]\n",
" [ 0.7819782 -1.6407993 -0.7137362 ]\n",
" [-0.86056554 -4.049321 1.6610531 ]]\n",
"step cost : 90 0.13677566\n",
"W1: [[ 1.0603702 -0.44811106 0.5573263 1.0131958 1.0396906 0.29320666\n",
" -0.5503824 0.00590723 0.1979756 0.8020064 ]\n",
" [ 0.3913867 -0.154984 0.33385125 0.46751842 0.881699 0.4232686\n",
" 1.5927207 1.3386966 -0.6602466 -0.90898824]]\n",
"b1: [-3.5419962e-03 0.0000000e+00 -4.0650818e-01 -2.6689782e-03\n",
" -5.6741140e-03 -2.9609957e-01 5.8138901e-01 -2.5547170e-03\n",
" -3.5286468e-01 3.4843077e-05]\n",
"L1 : [[0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00\n",
" 0.0000000e+00 5.8138901e-01 0.0000000e+00 0.0000000e+00 3.4843077e-05]\n",
" [1.0568283e+00 0.0000000e+00 1.5081814e-01 1.0105268e+00 1.0340165e+00\n",
" 0.0000000e+00 3.1006634e-02 3.3525103e-03 0.0000000e+00 8.0204129e-01]\n",
" [1.4482150e+00 0.0000000e+00 4.8466936e-01 1.4780452e+00 1.9157155e+00\n",
" 4.2037567e-01 1.6237273e+00 1.3420490e+00 0.0000000e+00 0.0000000e+00]\n",
" [0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00\n",
" 0.0000000e+00 5.8138901e-01 0.0000000e+00 0.0000000e+00 3.4843077e-05]\n",
" [0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00\n",
" 0.0000000e+00 5.8138901e-01 0.0000000e+00 0.0000000e+00 3.4843077e-05]\n",
" [3.8784468e-01 0.0000000e+00 0.0000000e+00 4.6484944e-01 8.7602490e-01\n",
" 1.2716901e-01 2.1741097e+00 1.3361418e+00 0.0000000e+00 0.0000000e+00]]\n",
"W2: [[-0.4200906 1.1839536 -0.47862795]\n",
" [-0.7382896 -0.8083072 -0.7351637 ]\n",
" [ 0.38644823 -0.4371925 0.28745636]\n",
" [-0.93358046 0.6443597 0.5739237 ]\n",
" [ 0.27841353 1.4111049 1.4151918 ]\n",
" [ 0.03276787 -0.20070207 0.14395006]\n",
" [-0.00272439 -1.7683377 0.00440064]\n",
" [-0.9764934 -1.2622411 0.9481882 ]\n",
" [-0.2701708 -0.19147727 0.46537006]\n",
" [-0.49568695 1.4759438 -0.48149106]]\n",
"b2: [ 0.89982724 -0.816554 -0.8000608 ]\n",
"model : [[ 0.898226 -1.8445947 -0.7975191 ]\n",
" [-0.5422964 3.6036997 0.3979017 ]\n",
" [-1.6689184 -0.30781806 3.5456676 ]\n",
" [ 0.898226 -1.8445947 -0.7975191 ]\n",
" [ 0.898226 -1.8445947 -0.7975191 ]\n",
" [-0.75966954 -4.378287 1.8156247 ]]\n",
"step cost : 100 0.11280369\n",
"W1: [[ 1.086328 -0.44811106 0.5508285 1.0266662 1.0677403 0.29495913\n",
" -0.6024666 -0.00202137 0.19783355 0.8368313 ]\n",
" [ 0.3796946 -0.154984 0.34776643 0.50831246 0.9491911 0.4368597\n",
" 1.6226891 1.3717483 -0.6602466 -0.90898824]]\n",
"b1: [-1.7670796e-03 0.0000000e+00 -4.1268447e-01 -1.9812861e-03\n",
" 1.9724626e-05 -2.9156616e-01 6.4269489e-01 -3.2146806e-03\n",
" -3.5300675e-01 -1.1899581e-03]\n",
"L1 : [[0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 1.9724626e-05\n",
" 0.0000000e+00 6.4269489e-01 0.0000000e+00 0.0000000e+00 0.0000000e+00]\n",
" [1.0845610e+00 0.0000000e+00 1.3814405e-01 1.0246849e+00 1.0677600e+00\n",
" 3.3929646e-03 4.0228307e-02 0.0000000e+00 0.0000000e+00 8.3564132e-01]\n",
" [1.4642556e+00 0.0000000e+00 4.8591051e-01 1.5329974e+00 2.0169513e+00\n",
" 4.4025263e-01 1.6629174e+00 1.3665122e+00 0.0000000e+00 0.0000000e+00]\n",
" [0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 1.9724626e-05\n",
" 0.0000000e+00 6.4269489e-01 0.0000000e+00 0.0000000e+00 0.0000000e+00]\n",
" [0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 1.9724626e-05\n",
" 0.0000000e+00 6.4269489e-01 0.0000000e+00 0.0000000e+00 0.0000000e+00]\n",
" [3.7792754e-01 0.0000000e+00 0.0000000e+00 5.0633121e-01 9.4921082e-01\n",
" 1.4529353e-01 2.2653840e+00 1.3685336e+00 0.0000000e+00 0.0000000e+00]]\n",
"W2: [[-0.4326348 1.2233311 -0.47212407]\n",
" [-0.7382896 -0.8083072 -0.7351637 ]\n",
" [ 0.38487786 -0.4373335 0.2909657 ]\n",
" [-0.95710534 0.6568873 0.6445864 ]\n",
" [ 0.24657744 1.4253125 1.4594796 ]\n",
" [ 0.02973829 -0.21059227 0.15153414]\n",
" [ 0.07469666 -1.8345138 -0.01738664]\n",
" [-1.0186217 -1.2818373 0.98266417]\n",
" [-0.2702344 -0.19140315 0.4652859 ]\n",
" [-0.53013647 1.5165162 -0.5248227 ]]\n",
"b2: [ 0.9620118 -0.8685671 -0.86531174]\n",
"model : [[ 1.0100238 -2.0475717 -0.8764573 ]\n",
" [-0.61138237 3.7855392 0.44295907]\n",
" [-1.7090173 -0.30301517 3.8972335 ]\n",
" [ 1.0100238 -2.0475717 -0.8764573 ]\n",
" [ 1.0100238 -2.0475717 -0.8764573 ]\n",
" [-0.6725317 -4.661425 1.995426 ]]\n",
"예측값: [0 1 2 0 0 2]\n",
"실제값: [0 1 2 0 0 2]\n",
"정확도:100.00\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "EMywRDy8pjD0",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"## 3. 신경망 첫걸음 정리\n",
"\n",
"3-1. 간단한 예측자\n",
"\n",
"* 컴퓨터는 입력->연산->출력 시스템입니다. 인공신경망도 마찬가지입니다.\n",
"* 어떤 것의 동작 원리를 정확히 파악할 수 없을 때 취할 수 있는 한 방식은 우리가 조정할 수 있는 매개변수 값을 포함하는 모델을 만들어보는 것입니다.\n",
"* 모델을 정교화나가는 좋은 방법은 오차에 기초해 매개변수 값을 조정해나가는 것입니다.\n",
"\n",
"3-2. 분류자 학습시키기\n",
"\n",
"* 오차를 제거하기 위해 기울기를 조정해야함\n",
"* 이러한 과정의 문제점은 이전의 학습데이터는 무시하고 최종 학습 데이터만 맞춰 업데이트 되게 됩니다. 이를 해결하기 위해 학습률을 도입해 업데이트의 정도를 조정해줍니다. \n",
"\n",
"3-3 . 다중 계층에서의 오차 역전파\n",
"\n",
"* 인공 신경망에서 학습이란 연결 노드의 가중치를 업데이트하는 과정을 의미합니다. 가중치의 업데이트는 오차에 의해 주도되는데, 오차는 학습 데이터로부터 주어진 정답과 출력 값 간의 차이를 의미.\n",
"* 중간 계층에 존재하는 노드들의 오차는 명백하지 않습니다. 한 가지 접근 방법은 출력 계층의 노드들의 오차를 이와 연결된 가중치의 크기에 비례해 나눠서 역전파하고 이를 재조합하는 방법.\n",
"\n",
"3-4. 가중치의 진짜 업데이트\n",
"\n",
"* 신경망의 오차는 가중치의 함수\n",
"* 신경망을 개선한다는 것은 가중치의 변화를 통해 오차를 줄인다는 뜻\n",
"* 최적의 가중치에 접근하는 방법은 작은 발걸음으로 오차함수를 줄여가면서 반복적으로 가중치를 개선해나가는 방법. 각 발걸음은 현재 위치에서 볼 때 가장 급격히 낮아지는 경사의 방향으로 취해집니다. 이런 방법을 경사 하강법이라고 함.\n"
]
},
{
"metadata": {
"id": "8UG2ylbqjkIS",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"## 4. 내 멋대로 정리하는 딥러닝\n",
"\n",
"\n",
"![대체 텍스트](https://i.imgur.com/mGhooZr.png)"
]
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment