관리 메뉴

너와 나의 스토리

tensorflow 기초 및 함수 정리 본문

Data Analysis/Machine learning

tensorflow 기초 및 함수 정리

노는게제일좋아! 2019. 7. 26. 17:46
반응형

● One-hot (vector)

데이터에 고유한 인덱스(숫자)를 붙여서 분류 

자신이 가진 인덱스에서는 1, 나머지는 0

ex) 딸기-0 사과-1 바나나-2 키위-3 수박-4

사과 -> [0,1,0,0,0]

 

 

● 상수 

- tf.constant(): 상수 선언

  ex) x=tf.constant(1) # 상수선언 x=1

- tf.zeros(<shape>,<dtype>,<name>): 모든 원소의 값이 0인 텐서 생성

  ex) tf.zeros([2,3], float32) => [ [0,0,0], [0,0,0] ]

- tf.ones

- tf.fill(<dims>,<value>,<name>): value 값으로 채워진 텐서를 생성함

- tf.constant(<value>,<dytpe>,<shape>,<name>): 상수 텐서 생성

- tf.range(<start>,<limit>,<delta>,<name>): start~limit 사이에서 delta 간격으로 뽑아낸 정수들의 리스트를 생성함

 

 

● 난수 상수 생성

- tf.random_normal(<shape>,<mean>,<stddev>,<dtype>,<seed>,<name>): 정규분포 난수를 생성

   mean: 정규분포의 평균

   stddev: 정규분포의 표준 편차

- tf.random_uniform(<shape>,<minval>,<maxval>,<dtype>,<seed>,<name>): 균등분포 난수를 생성

  minval: 최소값

 

● 난수 텐서

-  서로 다른 분포를 가진 난수 텐서들을 생성하는 여러가지 연산들이 있다.

   난수 연산들은 상태를 가지며, 계산될 때마다 새로운 난수를 생성한다.

- 이러한 함수들의 'seed' 키워드 인자는 그래프 수준의 난수 시드값과 함께 작용합니다.

- set_random_seed(seed): 그래프 수준의 난수 시드를 설정한다.

 

● Variable 

- tf.Variable()

  : 변수 생성 (tensor를 메모리에 저장하는 변수)

  ex) tf.Variable((tf.random_uniform([2, 3], -1., 1.))

  *텐서플로우에서 변수형은 그래프를 실행하기 전에 초기화를 해줘야 그 값이 변수에 지정된다.

 x = tf.constant(1)
 y = tf.Variable(x+2)
 
...
sess=tf.Session()
sess.run(y)  # 오류
...

init = tf.global_variables_initializer() # 변수 초기화 먼저 해주기

sess=tf.Session()
sess.run(init)
sess.run(y)

#출력: 3

- tf.get_variable(<name>, <shape>,<dtype>,<initializer>)

  : dtype 타입이고 이름이 name인 변수가 initializer(shape) 값으로 초기화되어 생성된다. 

 

- tf.variable_scope(<scope_name>): tf.get_variable()에 전달된 name의 namespace를 관리함

 

 

● feeding

- feed_dict

inputs=np.arange(10) # inputs=[0,1,2,3,4,5,6,7,8,9]
a=tf.placeholder(dtype=tf.float32)
b=a+10

sess=tf.Session()
sess.run(b,feed_dict={a:inputs})
# a에 순차적으로 inputs 값을 넣고, 값이 들어간 a를 가지고 연산 후 b에 값 넣음

 

 

 행렬 곱

- tf.matmul(A,B): A,B가 행렬

 

● 활성 함수

- tf.nn.relu(L)기존의 linear 함수인 sigmoid를 개선한 것

  max(0, x)처럼 음수에 대해서만 0으로 처리하는 함수
 

 

● softmax

- softmax()

: 입력을 0~1 사이의 값으로 변환한다. 변환된 결과의 전체 합이 1이 된다. -> 확률

  ex) [8.04, 2.76, -6.52] -> [0.53 0.24 0.23]

 

 

● axis 인수

- 연산의 대상이 2차원 이상일 경우, 어느 차원으로 계산 할 지 axis 인수로 결정

  axis=0: 열 연산 / axis=1: 행 연산

 

 

● reduce_

- reduce_mean(): 텐서에 존재하는 모든 값의 평균

- reduce_sum(): 텐서에 존재하는 모든 값의 평균 (차원 달라도 다 더함) 

 

 

● RNN - 정적으로 time step 펼치기 

BasicRNNCell

- tf.contrib.rnn.BasicRNNCell()

- 셀의 복사본을 만드는 팩토리

 

static_rnn()

- 셀을 연결하여 펼쳐진 RNN 네트워크를 만든다.

- 입력마다 셀의 __call__() 함수를 호출하여 가중치와 편향을 공유하는 셀 복사본 두 개를 만들고 서로 연결한다

n_inputs =3
n_neurons =5

X0 = tf.placeholder(tf.float32, [None, n_inputs])
X1 =tf.placeholder(tf.float32, [None, n_inputs])

basic_cell =tf.contrib.rnn.BasicRNNCell(num_units=n_neurons)
output_seqs, states =tf.contrib.rnn.static_rnn(basic_cell, [X0,X1], dtype=tf.float32)

Y0,Y1 = output_seqs

 

● transpose

- tf.transpose(<바꿀 행렬>,<perm=>)

- perm대로 <바꿀 행렬>의 차원을 바꿈

- ex) X_seqs=tf.unstack(tf.transpose(X,perm=[1,0,2]))

 

● unstaack

- tf.unstack()

- 첫 번째 차원을 따라 텐서의 파이썬 리스트를 추출한다. (타임 스텝마다 하나의 텐서)

 

 

● dynamic_rnn()

- 적절한 타임 스텝에 걸쳐 셀을 실행하기 위해 while_loop() 연산을 사용한다.

- backpropagation 시에 OOM 에러를 피하고 싶다면 swap_memory=True 옵션 설정

  (GPU 메모리에서 CPU 메모리로 바꿈)

- 각 타임 스텝의 모든 입력에 대해 텐서 하나를 받고([None, n_steps,n_inputs]),

  타임 스텝마다 모든 출력을 하나의 텐서([None, n_steps, n_neurons])로 반환한다. 

 

 

● sparse_softmax_cross_entropy_with_logits()

tf.nn.sparse_softmax_cross_entropy_with_logits(<labels><logits>)

- 비용함수 정의하기 위해 쓰임

- 크로스 엔트로피는 모델이 타깃 클래스에 대해 낮은 확률을 추정하지 않도록 제약을 가한다.

- logit(softmax 활성화 함수로 들어가기 전의 네트워크 출력)을 기반으로 크로스 엔트로피 계산

- 0~(클래스 수-1) 사이의 정수로 된 레이블 기대

- 각 샘플에 대한 크로스 엔트로피를 담은 ID 텐서를 반환

- labels_placeholder에서 1-hot label을 자동으로 생성하고

- inference() 함수의 1-hot labels 출력 logits을 비교하기 위해 추가된다.

 

 

● _in_top_k

- tf.nn.in_top_k(<predictions>,<target>,<k>)

- 예측값, 타깃 레이블을 입력받아 타깃 레이블의 예측값이 크기순으로 K번째 안에 들면 True, 그렇지 않으면 False 반환

 

반응형
Comments