Created
September 28, 2015 08:43
-
-
Save beomjunshin-ben/8e0200b26a2814fb7624 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "import numpy as np" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### TASK #1 (Matrix-Matrix=>Tensor)\n", | |
| "\n", | |
| "즉, 모든 X 각각에 대해 c1, c2, .. cH를 뺀 Tensor 를 얻고자 함\n", | |
| "\n", | |
| "```\n", | |
| "X: (N, I)\n", | |
| "Center: (H, I)\n", | |
| "```\n", | |
| "=>`X - Center: (N, H, I)` \n", | |
| "\n", | |
| "Braodcasting & reshaping\n", | |
| "\n", | |
| "```\n", | |
| "X_reshaped (3d array): N x 1 x I\n", | |
| "Center (2d array): H x I\n", | |
| "Result (3d array): N x H x I\n", | |
| "```\n", | |
| "\n", | |
| "Example Case N = 5, H = 3, I = 2" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 17, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[1, 1],\n", | |
| " [2, 2],\n", | |
| " [3, 3],\n", | |
| " [4, 4],\n", | |
| " [5, 5]])" | |
| ] | |
| }, | |
| "execution_count": 17, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "X = np.array(\n", | |
| " [\n", | |
| " [1, 1],\n", | |
| " [2, 2],\n", | |
| " [3, 3],\n", | |
| " [4, 4],\n", | |
| " [5, 5]\n", | |
| " ]\n", | |
| ")\n", | |
| "X" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 18, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[2, 2],\n", | |
| " [2, 2],\n", | |
| " [2, 2]])" | |
| ] | |
| }, | |
| "execution_count": 18, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "Center = np.array(\n", | |
| " [\n", | |
| " [2, 2],\n", | |
| " [2, 2],\n", | |
| " [2, 2]\n", | |
| " ]\n", | |
| ")\n", | |
| "Center" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 19, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "(5, 2) (3, 2)\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "print(X.shape, Center.shape)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 23, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "(5, 3, 2)\n", | |
| "[[[-1 -1]\n", | |
| " [-1 -1]\n", | |
| " [-1 -1]]\n", | |
| "\n", | |
| " [[ 0 0]\n", | |
| " [ 0 0]\n", | |
| " [ 0 0]]\n", | |
| "\n", | |
| " [[ 1 1]\n", | |
| " [ 1 1]\n", | |
| " [ 1 1]]\n", | |
| "\n", | |
| " [[ 2 2]\n", | |
| " [ 2 2]\n", | |
| " [ 2 2]]\n", | |
| "\n", | |
| " [[ 3 3]\n", | |
| " [ 3 3]\n", | |
| " [ 3 3]]]\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "# reshaping & broadcasting\n", | |
| "Result = X.reshape((5,1,2)) - Center\n", | |
| "print(Result.shape)\n", | |
| "print(Result)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### TASK #2 (Matrix tensordot Tensor => Tensor)\n", | |
| "\n", | |
| "Matrix(아래 예에선 Vector)와 Tensor의 곱으로 Matrix 얻기 ( 뉴럴넷에서 흔히 등장하는 패턴 )\n", | |
| "\n", | |
| "$$\n", | |
| "\\frac {\\partial L} {\\partial Z} \\frac {\\partial Z} {\\partial W} \\\\\n", | |
| "$$\n", | |
| "\n", | |
| "(1, H) tensordot (H, H, I)\n", | |
| "\n", | |
| "즉, 오른쪽 Tensor는 (H, I) 매트릭스가 (H, 1)만큼 있는 벡터인 셈\n", | |
| "\n", | |
| "```\n", | |
| "Delta: (1, H) (매칭될 axis = 1)\n", | |
| "A: (H, H, I) (매칭될 axis = 0) // H, H 일 필요는 없음\n", | |
| "```\n", | |
| "\n", | |
| "Example Case H = 3, I = 2" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 28, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[1, 2, 3]])" | |
| ] | |
| }, | |
| "execution_count": 28, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "Delta = np.array(\n", | |
| " [\n", | |
| " [1, 2, 3]\n", | |
| " ]\n", | |
| ")\n", | |
| "Delta" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 30, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[[2, 4],\n", | |
| " [3, 5],\n", | |
| " [3, 5]],\n", | |
| "\n", | |
| " [[1, 2],\n", | |
| " [3, 4],\n", | |
| " [3, 4]],\n", | |
| "\n", | |
| " [[1, 0],\n", | |
| " [0, 1],\n", | |
| " [0, 1]]])" | |
| ] | |
| }, | |
| "execution_count": 30, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "A = np.array(\n", | |
| " [\n", | |
| " [\n", | |
| " [2,4],\n", | |
| " [3,5],\n", | |
| " [3,5]\n", | |
| " ],\n", | |
| " [\n", | |
| " [1,2],\n", | |
| " [3,4],\n", | |
| " [3,4]\n", | |
| " ],\n", | |
| " [\n", | |
| " [1,0],\n", | |
| " [0,1],\n", | |
| " [0,1]\n", | |
| " ]\n", | |
| " ]\n", | |
| ")\n", | |
| "A" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 34, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[[ 7, 8],\n", | |
| " [ 9, 16],\n", | |
| " [ 9, 16]]])" | |
| ] | |
| }, | |
| "execution_count": 34, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# Using tensor dot with axis Concept\n", | |
| "np.tensordot(Delta, A, (1, 0))" | |
| ] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python 3", | |
| "language": "python", | |
| "name": "python3" | |
| }, | |
| "language_info": { | |
| "codemirror_mode": { | |
| "name": "ipython", | |
| "version": 3 | |
| }, | |
| "file_extension": ".py", | |
| "mimetype": "text/x-python", | |
| "name": "python", | |
| "nbconvert_exporter": "python", | |
| "pygments_lexer": "ipython3", | |
| "version": "3.4.3" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 0 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment