티스토리 뷰


모두를 위한 머신러닝 / 딥러닝 김성훈 교수님 강의를 듣고 정리한 내용입니다.

Lab 08 - Tensor Manipulation  


@ 배열(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

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함