일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Value too long for column
- VARCHAR (1)
- JanusWebRTC
- PytestPluginManager
- 자원부족
- 깡돼후
- python
- preemption #
- addhooks
- JanusWebRTCGateway
- pytest
- 헥사고날아키텍처 #육각형아키텍처 #유스케이스
- JanusWebRTCServer
- 코루틴 컨텍스트
- JanusGateway
- 티스토리챌린지
- 오블완
- 겨울 부산
- Spring Batch
- terminal
- taint
- mp4fpsmod
- table not found
- 달인막창
- PersistenceContext
- vfr video
- tolerated
- 코루틴 빌더
- 개성국밥
- kotlin
너와 나의 스토리
tensorflow 기초 및 함수 정리 본문
● 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 반환
'Data Analysis > Machine learning' 카테고리의 다른 글
Keras 함수 / Numpy 함수 정리 (0) | 2019.07.29 |
---|---|
NN(Neural Network) - backpropagation (0) | 2019.07.29 |
Computer Network Traffic - kaggle 실습 / RNN (0) | 2019.07.25 |
RNN & LSTM & GRU 완벽 정리 (0) | 2019.07.25 |
RNN의 변형 - LSTM(Long Short Term Memory) (0) | 2019.07.24 |