티스토리 뷰
모두를 위한 머신러닝 / 딥러닝 김성훈 교수님 강의를 듣고 정리한 내용입니다.
@ 배열(Metrix)
- rank : 배열의 차원을 나타냄
- shape : 배열의 모양을 나타냄
- axis : 배열의 축을 나타냄 (rank의 개수만큼 축을 가지고 있으며, 0부터 시작해서 가장 큰 축은 가장 안쪽)
t = tf.constant( [[[[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]],
[[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]]] )
t의 rank : 4
t의 shape : [1, 2, 3, 4] !) shape은 배열의 제일 안쪽 차원의 형태부터 역순으로 나열한다. (4 = 가장 안쪽 차원)
t의 axis : 총 4개의 축을 가지고 있으며, 0번 째 축 = 가장 바깥 차원, 3번 째 축 = 가장 안쪽 차원([1, 2, 3, 4] = -1번 째 축)
@ Tensorflow Metrix 연산
- matmul : 일반적인 행렬의 곱셈
tf.matmul(matrix1, matrix2)
- * : 끼리 끼리 곱
matrix1 * matrix2
- broadcasting : shape이 다른 행렬을 연산 할 수 있도록 해주는 기능
!) 잘 알고사용하면 좋지만, 모르는 경우 산으로 갈 수 있으므로 주의!
matrix1 = tf.contant([[1., 2.]])
matrix2 = tf.constant(3.)
(matrix1 + matrix2).eval()
결과 : array([[4., 5.,]], dtype=float32)
matrix1 = tf.contant([[1., 2.]])
matrix2 = tf.constant([3., 4.])
(matrix1 + matrix2).eval()
결과 : array([[4., 6.,]], dtype=float32)
matrix1 = tf.contant([[1., 2.]])
matrix2 = tf.constant([[3.], [4.]])
(matrix1 + matrix2).eval()
결과 : array([[4., 5.,], [5., 6.]], dtype=float32)
- reduce mean : 평균 계산
tf.reduce_mean([1, 2], axis=0).eval()
결과 : 1
!!) dtype이 int이므로 1이 나온다. 평균 계산시에는 float를 사용하여야 한다!
x = [[1., 2.],
[3., 4.,]]
tf.reduce_mean(x).eval()
결과 : 2.5
tf.reduce_mean(x, axis=0).eval()
결과 : array([2., 3.,], dtype=float32)
tf.reduce_mean(x, axis=1).eval()
결과 : array([1.5, 3.5], dtype=float32)
tf.reduce_mean(x, axis=-1).eval()
결과 : array([1.5, 3.5], dtype=float32)
- reduce sum : 합 계산
tf.reduce_sum(x).eval()
결과 : 10.0
tf.reduce_sum(x, axis=0), eval()
결과 : array([4., 6.], dtype=float32)
tf.reduce_sum(x, axis=-1).eval()
결과 : array([3., 7.], dtype=float32)
tf.reduce_mean(tf.reduce_sum(x, axis=-1)).eval()
결과 : 5.0
- argmax : 큰 값의 위치를 반환
x = [[0, 1, 2],
[2, 1, 0]]
tf.argmax(x, axis=0).eval()
결과 : array([1, 0, 0])
tf.argmax(x, axis=1).eval()
결과 : array([2, 0])
tf.argmax(x, axis=-1).eval()
결과 : array([2, 0])
- reshape : matrix의 shape을 변경
!) 마지막 차원의 값을 reshape 하더라도 동일하게 유지시키면 값이 섞이지 않는다.
t = np.array([[[0, 1, 2],
[3, 4, 5]],
[[6, 7, 8],
[9, 10, 11]]])
t.shape
결과 : (2, 2, 3)
tf.reshape(t, shape=[-1, 3]).eval()
결과 : array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8],
[9, 10, 11]])
tf.reshape(t, shape=[-1. 1. 3]).eval()
결과 : array([[[0, 1, 2]],
[[3, 4, 5]],
[[6, 7, 8]],
[[9, 10, 11]]])
- squeeze : matrix의 차원을 낮춤
tf.squeeze([[0], [1], [2]]).eval()
결과 : array([0, 1, 2], dtype=int32)
- expand dims : matrix의 차원을 높임
tf.expand_dims([0, 1, 2], 1).eval()
결과 : array([[0], [1], [2]], dtype=int32)
- one hot : 값를 index로 인식하여, 해당 index만 1이고 나머지는 0인 matrix로 변경
!!) one hot을 사용할 경우 차원이 +1 되므로 reshape 해주어 사용
tf.one_hot([[0], [1], [2], [0]], depth=3).eval()
결과 : array([[[1., 0., 0.]],
[[0., 1., 0.]],
[[0., 0., 1.]],
[[1., 0., 0.]]], dtype=float32)
tf.one_hot([[0], [1], [2], [0]], depth=3).eval()
tf.reshape(t, shape=[-1, 3]).eval()
결과 : array([[1., 0., 0.]],
[0., 1., 0.]],
[0., 0., 1.]],
[1., 0., 0.]], dtype=float32)
- casting : 값의 형을 변환함
tf.cast([1.8, 2.2, 3.3, 4.9], tf.int32).eval()
결과 : array([1, 2, 3, 4], dtype=int32)
tf.cast([True, False, 1 == 1, 0 == 1], tf.int32).eval()
결과 : array([1, 0, 1, 0], dtype=int32)
- stack : matrix 여러개를 쌓음
x = [1, 4]
y = [2, 5]
z = [3, 6]
tf.stack([x, y, z]).eval()
결과 : array([[1, 4], [2, 5], [3, 6]], dtype=int32)
tf.stack([x, y, z], axis=1).eval()
결과 : array([[1, 2, 3,], [4, 5, 6]], dtype=in32)
- ones like, zeros like : 1 또는 0으로 된 행렬을 만든다.
x = [[0, 1, 2],
[2, 1, 0]]
tf.ones_like(x).eval()
결과 : array([[1, 1, 1], [1, 1, 1], dtype=int32)
tf.zeros_like(x).eval()
결과 : array([[0, 0, 0], [0, 0, 0], dtype=int32)
- zip : 여러개의 matrix를 묶어서 한번에 처리
for x, y in zip([1, 2, 3], [4, 5, 6]):
print(x, y)
결과 : 1 4
2 5
3 6
'ML (Machine Learning)' 카테고리의 다른 글
[딥러닝 기본 24] Lec 08_2 - 딥러닝의 기본 개념2: Back-propagation과 2006/2007 딥의 출현 (0) | 2017.07.10 |
---|---|
[딥러닝 기본 23] Lec 08_1 - 딥러닝의 기본 개념: 시작과 XOR 문제 (0) | 2017.07.05 |
[딥러닝 기본 22] Lab 07_2 - meet mnist dataset (정리) (0) | 2017.07.05 |
[딥러닝 기본 21] Lab 07_2 - meet mnist dataset (0) | 2017.06.08 |
[딥러닝 기본 20] Lab 07_1 - training / test data set, learning rate, normalization (0) | 2017.06.06 |