-
[HandsOn]12. 텐서플로를 사용한 사용자 정의 모델과 훈련 - 연습문제 풀이[도서완독]Hands On Machine Learning 2022. 7. 21. 17:00
12. 층 정규화(layer normalization)을 수행하는 사용자 정의 층을 구현하세요.
a. build() 메서드에서 두 개의 훈련 가능한 가중치 a와 b를 정의합니다. 두 가중치 모두 크기가 input_shape[-1:]이고 데이터 타입은 tf..float32 입니다. a는 1로 초기화되고 b는 0으로 초기화되어야 합니다.
b. call()메서드에서는 샘플의 특성마다 평균 \mu와 표준편차 \sigma를 계산해야 합니다. 이를 위해 전체 샘플의 평균과 분산을 반환하는 tf.nn.moments(inputs,axes=-1, keepdims=True)을 사용할 수 있습니다. 그다음 α⊗(X - μ)/(σ + ε) + β 를 계산하여 반환합니다.
c. 사용자 정의 층이 keras.layers.LayerNormalization 층과 동일한(또는 거의 동일한) 출력을 만드는지 확인하세요.
import tensorflow as tf from tensorflow import keras from tensorflow.keras.layers import Layer import numpy as np #%% #층 정규화를 수행하는 사용자 정의 층을 구현하세요. class custom_normalization(Layer): def __init__(self,**kwargs): super().__init__(**kwargs) def build(self, batch_input_shape): self.a = self.add_weight( name='kernel', shape=batch_input_shape[-1:], initializer = 'ones' ) self.b = self.add_weight( name='bias', shape= batch_input_shape[-1:], initializer='zeros' ) super().build(batch_input_shape) def call(self, X): mu,sigma=tf.nn.moments(X,axes=-1,keepdims=True) return self.a*(X-mu)/(tf.sqrt(sigma+1e-6))+self.b def comput_output_shape(self, batch_input_shape): return batch_input_shape
특별할 건 없고 keras 의 사용자 정의 층 형식에 따라 만들었다.
여기서는 문제에서 힌트를 다 줘서 쉬웠는데 내가 아무것도 없는 상태에서 만들려면 어려울 듯....
#사용자 정의 층이 keras.layers.LayerNormalization 층과 거의 동일한 출력을 만드는지 확인하세요. (X_train_full, y_train_full), (X_test, y_test) = keras.datasets.fashion_mnist.load_data() X_train_full = X_train_full.astype(np.float32) / 255. X_valid, X_train = X_train_full[:5000], X_train_full[5000:] y_valid, y_train = y_train_full[:5000], y_train_full[5000:] X_test = X_test.astype(np.float32) / 255. custom_layer_norm = custom_normalization() keras_layer_norm = keras.layers.LayerNormalization() X = X_train.astype(np.float32) tf.reduce_mean(keras.losses.mean_absolute_error(keras_layer_norm(X), custom_layer_norm(X)))
'[도서완독]Hands On Machine Learning' 카테고리의 다른 글
[HandsOn]13. 텐서플로에서 데이터 적재와 전처리하기 - 내용 정리2 (0) 2022.07.29 [HandsOn]13. 텐서플로에서 데이터 적재와 전처리하기 - 내용 정리1 (0) 2022.07.26 [HandsOn]12. 텐서플로를 사용한 사용자 정의 모델과 훈련 - 내용 정리 2 (0) 2022.07.20 [HandsOn]12. 텐서플로를 사용한 사용자 정의 모델과 훈련 - 내용 정리 1 (0) 2022.07.19 [HandsOn]11. 심층 신경망 훈련하기 - 내용 정리 3 (0) 2022.07.08