본문 바로가기

Deep Learning/Hands On Machine Learning34

13.2 TFRecord 포맷 TFRecord 포맷 tensorflow는 대용량 데이터를 저장하기 위해 tfrecord라는 포맷을 사용한다. tfrecord는 크기가 다른 여러가지 레코드를 저장하는 이진 포맷이다. 각 레코드는 레코드 길이 CRC checksum(길이가 올바른지 체크하는), 실제 데이터, 데이터를 위한 CRC checksum으로 구성된다. with tf.io.TFRecordWriter("my_data.tfrecord") as f: f.write(b"This is the first record") f.write(b"And this is the second record") 위 코드와 같은 방법으로 tfrecord를 작성할 수 있다. filepaths = ["my_data.tfrecord"] dataset = tf.data.. 2021. 11. 12.
13.1 데이터 API 데이터셋은 저장매체에 있는 데이터를 사용하기도 하지만, 직접 만들어 사용할 수도 있다. 직접 만들 때는 `tf.data.Dataset.from_tensor_slices()를 통해 객채를 만들어 여러가지 연산을 적용해 사용한다. import tensorflow as tf from tensorflow import keras X=tf.range(10) dataset=tf.data.Dataset.from_tensor_slices(X) dataset 이렇게 dataset이라는 객체를 생성하였다. 위 과정은 tf.data.Dataset.range(10)으로 만든 데이터셋과 동일하게 작동한다. for item in dataset: print(item) tf.Tensor(0, shape=(), dtype=int32) .. 2021. 11. 12.
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.