๐Ÿ“– ์ผ€๋ผ์Šค ์ฐฝ์‹œ์ž์—๊ฒŒ ๋ฐฐ์šฐ๋Š” ๋”ฅ๋Ÿฌ๋‹ (ํ”„๋ž‘์†Œ์™€ ์ˆ„๋ ˆ, ๋ฐ•ํ•ด์„ , ๊ธธ๋ฒ—) ์ฐธ๊ณ 

๐Ÿ“ Tensor?

Tensor๋Š” Neural Network ํ•™์Šต์˜ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ๋‹จ์œ„์ด๋‹ค. Numeric(์ˆ˜์น˜ํ˜•) ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ธฐ ์œ„ํ•œ Container์ด๋‹ค. ํ…์„œ๋Š” ์ž„์˜์˜ ์ฐจ์› ํ˜น์€ Rank(์ถ•)์„ ๊ฐ€์ง„๋‹ค.

0D Tensor (Scalar)

ํ•˜๋‚˜์˜ ์ˆซ์ž๋งŒ ๋‹ด๊ณ  ์žˆ๋Š” ํ…์„œ๋ฅผ 0D Tensor, ์Šค์นผ๋ผ๋ผ๊ณ  ํ•œ๋‹ค. ์Šค์นผ๋ผ ํ…์„œ๋Š” ์ถ•์ด 0๊ฐœ์ด๋‹ค.

>>> x = np.array(7)
>>> x.ndim
0

1D Tensor (Vector)

1D Tensor, ๋ฒกํ„ฐ๋Š” ์ˆซ์ž์˜ ๋ฐฐ์—ด์„ ์˜๋ฏธํ•œ๋‹ค. ๋ฒกํ„ฐ๋Š” 1๊ฐœ์˜ ์ถ•์„ ๊ฐ€์ง„๋‹ค.

>>> x = np.array([1, 2, 3, 4, 5])
>>> x.ndim
1

์œ„์˜ ๋ฒกํ„ฐ๋Š” 5๊ฐœ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— 5D ๋ฒกํ„ฐ, 5์ฐจ์› ๋ฒกํ„ฐ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. 5D ํ…์„œ์™€ ํ—ท๊ฐˆ๋ฆฌ์ง€ ๋ง์ž

2D Tensor (Matrix)

2D Tensor, ํ–‰๋ ฌ์€ ๋ฒกํ„ฐ์˜ ๋ฐฐ์—ด์ด๋‹ค. 2๊ฐœ์˜ ์ถ•์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  row(ํ–‰)์™€ column(์—ด)์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

>>> x = np.array([[1, 3, 5, 7, 9],
		  [2, 4, 6, 8, 10],
          	  [11, 12, 13, 14, 15]])
>>> x.ndim
2

3D Tensor

ํ–‰๋ ฌ์„ ํ•˜๋‚˜์˜ ๋ฐฐ์—ด๋กœ ํ•ฉ์นœ ๊ฒƒ์ด 3D Tensor์ด๋‹ค.

>>> x = np.array([[[1, 2, 3, 4, 5],
		   [6, 7, 8, 9, 10],
                   [11, 12, 13, 14, 15]],
                  [[21, 22, 23, 24, 25],
                   [26, 27, 28, 29, 30],
                   [31, 32, 33, 34, 35]],
                  [[41, 42, 43, 44, 45],
                   [46, 47, 48, 49, 50],
                   [51, 52, 53, 54, 55]]])
>>> x.ndim
3

3D Tensor๋ฅผ ํ•˜๋‚˜์˜ ๋ฐฐ์—ด๋กœ ํ•ฉ์น˜๋ฉด 4D Tensor๊ฐ€ ๋˜๊ณ , 4D Tensor๋ฅผ ๋‹ค์‹œ ํ•˜๋‚˜์˜ ๋ฐฐ์—ด๋กœ ํ•ฉ์น˜๋ฉด 5D Tensor๊ฐ€ ๋œ๋‹ค.

๐Ÿ“ Tensor ์—ฐ์‚ฐ

์›์†Œ๋ณ„ ์—ฐ์‚ฐ

for i in range(x.shape[0]):
    for j in range(x.shape[1]):
        x[i, j] += y[i, j]
# ์›์†Œ๋ณ„ ๋ง์…ˆ
z = x + y

๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…

์ž‘์€ ํ…์„œ๊ฐ€ ํฐ ํ…์„œ์˜ ํฌ๊ธฐ์— ๋งž์ถ”์–ด์ง€๋Š” ๊ฒƒ

  1. ํฐ ํ…์„œ์˜ ndim์— ๋งž๋„๋ก ์ž‘์€ ํ…์„œ์— ์ถ• ์ถ”๊ฐ€
  2. ์ž‘์€ ํ…์„œ๊ฐ€ ์ƒˆ ์ถ•์„ ๋”ฐ๋ผ์„œ ํฐ ํ…์„œ์˜ ํฌ๊ธฐ์— ๋งž๋„๋ก ๋ฐ˜๋ณต
# x๋Š” 2D ๋„˜ํŒŒ์ด ๋ฐฐ์—ด
# y๋Š” ๋„˜ํŒŒ์ด ๋ฐฐ์—ด
for i in range(x.shape[0]):
    for j in range(x.shape[1]):
        x[i, j] += y[j]

ํ…์„œ ์ ๊ณฑ(dot operation)

import numpy as np
z = np.dot(x, y)

ํ…์„œ ํฌ๊ธฐ ๋ณ€ํ™˜

ํŠน์ • ํฌ๊ธฐ์— ๋งž๊ฒŒ ์—ด๊ณผ ํ–‰์„ ์žฌ๋ฐฐ์—ด

x = x.reshape(1, 2)

ํ–‰๊ณผ ์—ด์„ ๋ฐ”๊พธ๋Š” ์ „์น˜(transposition)

x = np.transpose(x)

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด

Powered by GraphCDN, the GraphQL CDN