본문 바로가기

전체 글101

12.4 텐서플로 함수와 그래프 텐서플로 함수 만들기 텐서플로 함수는 사용하지 않는 노드를 제거하고 표현을 단순화하는 등의 방식으로 계산 그래프를 최적화하고, 연산을 효율적으로 실행하기 때문에 원본 파이썬 함수보다 빠르게 실행하는 것이 가능하다. 사용자 정의 함수를 케라스에 적용할 때는 tf.function()을 통해 텐서플로 함수로 변환하지 않아도 자동으로 변환된다. 케라스가 파이썬 함수를 텐서플로 함수로 바꾸지 않게 하려면 사용자 정의 층이나 모델을 만들 대 dynamic=True 혹은 compile()메소드 호출 시 run_eagerly=True로 지정하면 된다. def cube(x): return x**3 tf_cube=tf.function(cube) tf_cube(tf.constant(2.0)) # 텐서플로 함수는 위와 같이 .. 2021. 11. 11.
12.3 사용자 정의 모델과 훈련 알고리즘 12.3.1 사용자 정의 손실 함수 Huber 손실 훈련 데이터셋에 outlier가 존재한다고 가정해보자. mse를 사용하면 outlier로 인해 손실함수의 크기가 너무 커지기 때문에 적절치 않다. mae를 사용하면 outlier에 대한 규제가 너무 적기 때문에 또한 적절치 않을 것이다. 이럴 때 Huber 손실 함수를 사용한다. 위 식에서 $e$는 true y와 pred y의 차이인 error를 뜻한다. error가 $\delta$ 보다 작거나 같으면, 손실함수로 $frac{1}{2}e^2$를 적용한다. 다른 경우엔 $\delta(|e| - frac{1}{2} \delta)$를 적용한다. Huber 손실은 공식 keras api에서는 제공하지 않고 tf.keras의 keras.losses.Huber 클.. 2021. 11. 11.
12.2 넘파이처럼 텐서플로 사용하기 Tensorflow : tensor가 한 연산에서 다른 연산으로 흐르기 때문에 tensor + flow 가 되었다. Tensor : ndarray와 매우 비슷하고 기본적으로 다차원 배열을 다룬다. 스칼라 값을 가질 수도 있다. 12.2.1 텐서와 연산 텐서 생성 import tensorflow as tf tf.constant([[1,2,3], [4,5,6]]) #matrix # tf.constant()를 통해 tensor를 생성할 수 있다. 텐서는 ndarray와 같이 shape와 dtype을 가진다. 인덱스 참조 t=tf.constant([[1.,2.,3.],[4.,5.,6.]]) t.shape t[:, 1:] # 인덱스 참조 또한 가능하다. 텐서 연산 t=tf.constant([[1.,2.,3.],[.. 2021. 9. 29.
12.1 텐서플로 훑어보기 Tensorflow 가 제공하는 것 핵심 구조는 numpy와 비슷하지만 GPU를 지원한다는 점에서 다르다. (여러 장치와 서버에 대해) 분산 컴퓨팅을 지원한다. 코드 실행 전에 컴파일을 하는 전통 컴파일러와는 달리 Tensorflow는 JIT(Just In Time) 컴파일러를 포함한다. 계산그래프(Computation Graph)를 추출해 사용하지 않는 node를 가지치기 하고, 독립적인 연산을 자동 병렬 시행함으로서 계산 최적화를 시행한다. 이를 통해 속도는 올라가고 메모리 사용량은 줄어든다. 계산 그래프는 플랫폼에 중립적인 포맷으로 내보낼 수 있다. 때문에 리눅스에 있는 파이썬 환경에서 개발을 해서 안드로이드 기기의 자바에서 실행 하는것이 가능하다. 자동미분, 고성능 옵티마이저를 제공한다. Tens.. 2021. 9. 29.