일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 알고리즘 문제
- web
- CSS
- 백준
- 알고리즘
- DRF
- 파이썬 알고리즘
- Algorithm
- es6
- Baekjoon
- Git
- 알고리즘 연습
- AWS
- c++
- java
- react
- Django
- django rest framework
- 알고리즘 풀이
- form
- API
- HTML
- js
- django widget
- django ORM
- MAC
- javascript
- 장고
- PYTHON
- 파이썬
Archives
- Today
- Total
수학과의 좌충우돌 프로그래밍
[딥러닝]03.텐서연산 본문
텐서 연산
브로드 캐스팅
놀랍게도 2D 텐서와 벡터를 더할 수 있다. 두 텐서는 크기가 다른데 어떻게 더해질 수 있을까?
작은 텐서가 큰 텐서에게 맞춰져서 더해지게 되는데 이를 브로드 캐스팅 이라고 한다.
브로드 캐스팅은 다음과 같은 단계로 실행된다.
- 큰 텐서의 ndim에 맞도록 작은 텐서에 축이 추가된다.
- 작은 텐서가 새 축을 따라서 큰 텐서의 크기에 맞도록 반복된다.
예를 통해 알아보자.
x의 크기는 (32.10) 이고 y의 크기는 (10,) 일 때, 1번에 의해 y에 비어있는 축을 추가하여 크기를 (1,10) 으로 만든다. 그 후 y를 32번 반복하면 텐서 y의 크기는 (32,10)이 된다.
이를 코드로 구현해보자.
def braodcast(x,y):
assert len(x.shape) == 2
assert len(y.shape) == 1
assert x.shape[1] == y.shape[0]
x = x.copy()
for i in range(x.shape[0]):
for j in range(x.shape[1]):
x[i,j] += y[j]
return x
- assert 는 뒤의 조건이 False일 경우 에러를 발생시킨다.
텐서 크기 변환
텐서의 크기를 변환한다는 것의 의미는 열과 행을 재배치 하는 것을 의미한다. 당연히 크기가 변환된 텐서와 원래의 텐서는 원소수가 동일하다.
x = np.array([[0,1],
[2,3],
[4,5]])
>>> x.shape
(3,2)
x = x.reshape(2,3)
>>> x
array([[0, 1, 2],
[3, 4, 5]])
특별한 크기 변환으로 전치가 있습니다. 행렬의 전치는 행과 열을 바꾸는 것을 의미합니다.
x = np.array([[0,1],
[2,3],
[4,5]])
>>> x.shape
(3,2)
x = np.transpose(x)
>>> x
array([[0, 2, 4],
[1, 3, 5]])
'인공지능 > 케라스창시자에게 배우는 딥러닝' 카테고리의 다른 글
[딥러닝]05.imdb 영화 리뷰 이진 분류 (1) | 2019.03.25 |
---|---|
[딥러닝]05. 신경망의 구조 (0) | 2019.03.18 |
[딥러닝]04.그레디언트 (0) | 2019.03.15 |
[딥러닝]02.신경망을 위한 데이터 표현 (0) | 2019.03.15 |
딥러닝이란 무엇인가? (0) | 2019.03.13 |
Comments