[머신러닝] Tensor 데이터 처리하기 Part.2

in #kr-steemit7 years ago (edited)

Matmul vs Multiply

중학교 수학 시간에 우리는 행렬의 곱셈을 배웠으므로 TensorFlow를 사용해 같은 연산을 할 수 있다.

# multiply for matrix

matrix1 = tf.constant([[1.,2.], [3.,4.]])
matrix2 = tf.constant([[1.], [2.]])
print('Matrix 1 shape', matrix1.get_shape())
print('Matrix 2 shape', matrix2.get_shape())

먼저 matrix1matrix2의 형태를 알아보자.

Matrix 1 shape (2, 2)
Matrix 2 shape (2, 1)

matrix1(2, 2), matrix2(2, 1)의 형태를 가지고 있다. 중학교 수학 시간에 배웠듯이 앞 행렬 형태의 끝자리 숫자와 뒷 행렬 행텨의 앞자리 숫자가 일치해야 행렬의 곱셈이 가능하다.

with tf.Session() as sess:
    print(sess.run(tf.matmul(matrix1, matrix2)))

matmul로 행렬의 곱을 해보면,

[[1. 2.]
 [6. 8.]]

이제 우리가 행렬의 곱셈을 손으로 계산하지 않아도 된다는 사실에 기뻐할 수 있다.

Broadcasting

하지만 언제나 그렇듯 주의해야 할 사항이 있다. 행렬의 형태를 맞추지 않은 상태에서 여러 문제가 발생한다.

# Operations between the same shapes
matrix1 = tf.constant([[3., 3.]])
matrix2 = tf.constant([[2., 2.]])
with tf.Session() as sess:
    print(sess.run(matrix1 + matrix2))

행렬의 덧셈은 어렵지 않다. 둘 모두 (1, 2)라는 같은 형태를 가지고 있는 행렬이므로 같은 자리에 있는 숫자끼리 더하면 된다.

[[5. 5.]]

마찬가지로 (1, 2)라는 같은 형태의 행렬이 도출된다.

matrix1 = tf.constant([[1., 2.]])
matrix2 = tf.constant(3.)
with tf.Session() as sess:
    print(sess.run(matrix1 + matrix2))

한 행렬에 상수를 더하는 것은 어떨까. 사실 엄격한 의미에서 행렬의 덧셈이 아니지만 TensorFlow는 개념을 임의적으로 확장해서 오류가 아닌 결과를 나타낸다.

[[4. 5.]]

행렬 각 자리의 숫자에 상수를 더한 결과값을 나타낸다.

matrix1 = tf.constant([[1., 2.]])
matrix2 = tf.constant([3., 4.])
with tf.Session() as sess:
    print(sess.run(matrix1 + matrix2))

행렬의 차원과 형태가 달라도 덧셈을 진행한다. matrix1의 형태는 (1, 2)이고 matrix2(2)의 형태를 가지고 있는 상태에서 덧셈을 하면,

[[4. 6.]]

어떻게든 결과값을 도출해낸다.

matrix1 = tf.constant([[1., 2.]])
matrix2 = tf.constant([[3.], [4.]])
with tf.Session() as sess:
    print(sess.run(matrix1 + matrix2))

matrix1(1, 2)의 형태를, matrix2(2, 1)를 가지고 있다. 곱셈은 가능하지만 덧셈은 불가능하다. 하지만 TensorFlowBrodcasting이라는 개념을 사용해 결과를 보여준다.

[[4. 5.]
 [5. 6.]]

(2, 2)라는 새로운 형태의 행렬을 만들어냈다. Brodcasting 개념을 잘 알고 활용할 수 있다면 강력한 처리 도구로 사용할 수 있겠지마, 개념을 잘 모르는 상태에서 실수로 곱셈이나 덧셈을 할 경우에는 의도와 전혀 다른 결과가 나올 수 있으니 항상 Tensor의 차원과 형태를 확인한 후 학습을 진행하는 습관을 가져야 한다.


Sort:  

짱짱맨 호출에 출동했습니다!!

Coin Marketplace

STEEM 0.27
TRX 0.26
JST 0.039
BTC 94609.92
ETH 3354.39
SBD 3.33