tf.add
: 덧셈tf.subtract
: 뺄셈tf.multiply
: 곱셈tf.divide
: 나눗셈tf.pow
: n-제곱tf.negative
: 음수 부호import tensorflow as tf
a = tf.range(6, dtype=tf.int32)
b = 2 * tf.ones(6, dtype=tf.int32)
tf.add(a, b)
a + b
tf.abs
: 절대값tf.sign
: 부호tf.round
: 반올림tf.ceil
: 올림tf.floor
: 내림tf.square
: 제곱tf.sqrt
: 제곱근tf.maximum
: 두 텐서의 각 원소에서 최댓값만 반환.tf.minimum
: 두 텐서의 각 원소에서 최솟값만 반환.tf.cumsum
: 누적합tf.cumprod
: 누적곱rank_2 = tf.random.normal((3, 3))
'''
<tf.Tensor: shape=(3, 3), dtype=float32, numpy=
array([[ 1.0219942 , 0.8496209 , -0.12634476],
[-0.36742872, -0.9638588 , 0.86198586],
[ 1.2553971 , -0.3270209 , -0.65407085]], dtype=float32)>
'''
rank_2[0]
# <tf.Tensor: shape=(3,), dtype=float32, numpy=array([ 1.0219942 , 0.8496209 , -0.12634476], dtype=float32)>
rank_2[0, 0] #axis, index
# <tf.Tensor: shape=(), dtype=float32, numpy=1.0219942>
---------------------------------------------------------
rank_3 = tf.random.normal((3, 3, 3))
'''
<tf.Tensor: shape=(3, 3, 3), dtype=float32, numpy=
axis=0, index=0
array([[[ 1.0201453 , 0.10598245, 1.6207016 ],axis=0, index=0
[-0.71964407, -0.8997607 , -1.5360591 ],
[ 1.0973806 , -1.2254598 , 1.0305752 ]],
[[ 1.3389021 , -0.2408786 , -0.8961792 ],
[-0.28417823, 2.3027785 , -0.6820288 ],
[-0.5578357 , -0.15919904, 1.4385182 ]],
[[-1.3937014 , -2.959658 , -0.138779 ],
[-1.5080395 , -0.52344275, -0.5894229 ],
[-0.01310016, 0.5227121 , 1.9863173 ]]], dtype=float32)>
'''
rank_3[1, 1, 2]
# <tf.Tensor: shape=(), dtype=float32, numpy=-0.6820288>
tf.reduce_mean
: 설정한 축의 평균을 구한다.tf.reduce_max
: 설정한 축의 최댓값을 구한다.tf.reduce_min
: 설정한 축의 최솟값을 구한다.tf.reduce_prod
: 설정한 축의 요소를 모두 곱한 값을 구한다.tf.reduce_sum
: 설정한 축의 요소를 모두 더한 값을 구한다.tf.reduce_sum(a, axis=0)
#keepdims=True 차원을 줄이는 연산을 하지만 유지하고 싶을 때 사용
tf.reduce_sum(a, axis=0, keepdims=True)
b = tf.random.normal((2,7))
tf.reduce_mean(b, axis=1) #평균값 2개로
tf.reduce_mean(b, axis=0) #평균값 7개로
tf.matmul
: 내적tf.linalg.inv
: 역행렬a = tf.constant([[2, 0], [0, 1]], dtype=tf.float32)
b = tf.constant([[1, 1], [1, 1]], dtype=tf.float32)
tf.matmul(a, b)
tf.linalg.inv(a)
tf.reshape
: 벡터 행렬의 크기 변환tf.transpose
: 전치 연산tf.expand_dims
: 지정한 축으로 차원을 추가tf.squeeze
: 벡터로 차원을 축소a = tf.range(6, dtype=tf.int32) # [0, 1, 2, 3, 4, 5]
a_2d = tf.reshape(a, (2, 3)) # 1차원 벡터는 2x3 크기의 2차원 행렬로 변환
a_2d_t = tf.transpose(a_2d) # 2x3 크기의 2차원 행렬을 3x2 크기의 2차원 행렬로 변환
a_3d = tf.expand_dims(a_2d, 0) # 2x3 크기의 2차원 행렬을 1x2x3 크기의 3차원 행렬로 변환
a_4d = tf.expand_dims(a_3d, 3) # 1x2x3 크기의 3차원 행렬을 1x2x3x1 크기의 4차원 행렬로 변환
# a_4d = tf.expand_dims(a_3d, -1)
a_1d = tf.squeeze(a_4d) # 1x2x3x1 크기의 4차원 행렬을 1차원 벡터로 변환
# 원소 한개인 차원을 줄여준다. a_1d = tf.squeeze(a_4d, axis=0), a_1d = tf.squeeze(a_4d, axis=3) 원소가 한 개가 아니라 에러
tf.slice
: 특정 부분을 추출tf.split
: 분할tf.concat
: 합치기tf.tile
: 복제-붙이기tf.stack
: 합성tf.unstack
: 분리a = tf.reshape(tf.range(12), (3, 4))
'''
<tf.Tensor: shape=(3, 4), dtype=int32, numpy=
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]], dtype=int32)>
'''
tf.slice(a, [0, 1], [2, 3]) # (0, 1)위치에서 (2개, 3개)만큼 뽑아낸다.?
a1, a2 = tf.split(a, num_or_size_splits=2, axis=1) # 가로축(axis=1)을 따라 2개로 분할
tf.concat([a1, a2], 1) # 가로축(axis=1)을 따라 a1, a2를 합치기
tf.tile(a1, [1, 3]) # 가로축(axis=1)을 따라 3개로 복사-붙이기
a3 = tf.stack([a1, a2]) # 3x2 행렬 a1, a2를 추가적인 차원으로 붙여서 2x3x2 고차원 텐서 생성
tf.unstack(a3, axis=1) # 2x3x2 고차원 텐서를 0차원으로 풀어서 3개의 2x2 행렬 생성
에러없이 다음 코드 실행하기
a = tf.constant(((1, 2, 3), (1, 2, 3)))
b = tf.constant([1, 2, 3])
tf.matmul(a, tf.expand_dims(b, axis=1))
Reference
1) 제로베이스 데이터스쿨 강의자료