TensorFlow
딥러닝 프레임워크 텐서플로우에 대해 알아봅니다.읽는데 4분 정도 걸려요.Tensor
텐서플로우에서 사용하는 기본 자료형으로 다차원 배열이다.
텐서는 rank, shape, type의 세가지 속성을 갖는다.
-
rank
텐서의 차원수로 rank k는 k차원 배열이다. -
shape
텐서의 구조로, 각 축에 텐서의 원소 개수를 알려준다. -
type
텐서의 구성원소의 자료형을 알려준다.
축(axis)
대괄호의 가장 바깥부터 0, 1, 2 축이 된다.
Flow
텐서를 데이터 플로우 그래프를 이용하여 계산 과정과 모델을 표현하게 된다.
-
Op(eration)
하나 이상의 텐서를 받아 계산을 수행하고 결과를 하나 이상의 텐서로 변환 -
Session
그래프를 실행하기 위한 객체(세션) -
Variables
그래프 실행 시 파라미터를 저장하고 갱신하기 위해 사용
.pyW = tf.Variable(tf.randon_normal([4, 1]), name="weight") b = tf.Variable(tf.randon_normal([1]), name="bias")
-
Placeholder
데이터 플로우 그래프 실행 시 데이터(텐서)를 전달하기 위해 사용
.pyx = tf.placeholder(tf.float32) y = tf.placeholder(tf.float32) z = tf.multiply(x, y) sess.run(z, feed_dict=[x: 3, y: 4])
텐서 변환 연산
reshape
텐서의 원소를 새로운 shape에 맞게 배치합니다.
a = [[[1,2,3,4], [5,6,7,8]], [[9,10,11,12], [13, 14, 15, 16]], [[17,18,19,20], [21,22,23,24]]]
tf.shape(a) → [3, 2, 4]
tf.reshpae(a, [3, 8])
→ [[1,2,3,4,5,6,7,8], [9,10,11,12,13,14,15,16], [17,18,19,20,21,22,23,24]]
squeeze
텐서에서 크기가 1인 축을 제거합니다.
a = [[[1,2]], [[3,4]], [[5,6]]]
tf.shape(a) → [3, 1, 2]
tf.squeeze(a)
→ [[1,2], [3,4], [5,6]]
expand_dims
지정한 축 위치에 차원을 하나 추가합니다.
tf.expands_dims([[1,2,3], [4,5,6]], 0)
→ [[[1,2,3], [4,5,6]]]
tf.expands_dims([[1,2,3], [4,5,6]], 1)
→ [[[1,2,3]], [[4,5,6]]]
slice
텐서에서 일부분을 선택합니다.
slice(텐서, [축i 시작위치], [축i의 추출길이])
a = [[1,2,3,4,5,6,7], [8,9,10,11,12,13,14], [15,16,17,18,19,20,21]]
tf.slice(a, [0,2], [2,3])
→ [[3,4,5], [10,11,12]]
split
지정된 축을 분할개수로 분리합니다.
spilt(텐서, 분할개수, 축)
a = [[1,2,3,4], [5,6,7,8], [9,10,11,12], [13,14,15,16]]
tf.split(a, 2, 0)
→ [[[1,2,3,4], [5,6,7,8]], [[9,10,11,12], [13,14,15,16]]]
tf.split(a, 2, 1)
→ [[[1,2], [5,6], [9,10], [13,14]], [[3,4], [7,8], [11,12], [15,16]]]
concat
지정된 축 방향으로 두 텐서를 이어 붙힙니다.
a = [[1,2], [3,4]]
b = [[5,6], [7,8]]
tf.concat([a, b], 0)
→ [[1,2], [3,4], [5,6], [7,8]]
tf.concat([a, b], 1)
→ [[1,2,5,6], [3,4,7,8]]
reverse
지정된 축을 기준으로 원소를 역순으로 배열합니다.
a = [[1,2,3], [4,5,6]]
tf.reverse(a, [0])
→ [[4,5,6], [1,2,3]]
tf.reverse(a, [1])
→ [[3,2,1], [6,5,4]]
tf.reverse(a, [0, 1])
→ [[6,5,4], [3,2,1]]
transpose
지정된 축의 순서로 텐서를 transpose 합니다.
transpose(텐서, perm=[축])
(perm을 지정 안하면 [0, 1] 로 간주함)
a = [[1,2,3], [4,5,6]]
tf.transpose(a)
→ [[1,4], [2,5], [3,6]]
b = [[[1,2,3], [4,5,6]], [[7,8,9], [10,11,12]]]
tf.transpose(b, [0,2,1])
→ [[[1,4], [2,5], [3,6]], [[7,10], [8,11], [9,12]]]
gather
지정된 index의 원소들로 이루어진 텐서를 생성합니다.
gather(텐서, [index])
tf.gather([1,3,5,7,9,0,2,4,6,8], [2,5,2,5])
→ [5,0,5,0]
tf.gather([[1,2,3,4,5,6], [7,8,9,10,11,12]], [0,1])
→ [[1,2,3,4,5,6], [7,8,9,10,11,12]]
tf.gather([[1,2,3,4,5,6], [7,8,9,10,11,12]], [[0,0], [1,1]])
→ [[[1,2,3,4,5,6], [1,2,3,4,5,6]], [[7,8,9,10,11,12], [7,8,9,10,11,12]]]
ont_hot
정수값을 one-hot 벡터로 변환합니다.
tf.ont_hot([0,1,2], depth=3)
[[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]]
tf.ont_hot([0,1,2], depth=4)
[[1.0, 0.0, 0.0, 0.0], [0.0, 1.0, 0.0, 0.0], [0.0, 0.0, 1.0, 0.0]]