import keras
class SimpleDense(keras.layers.Layer):
def __init__(self, units, activation=None):
super().__init__()
self.units = units
self.activation = activation
def build(self, input_shape):
input_dim = input_shape[-1]
self.W = self.add_weight(shape=(input_dim, self.units),
initializer="random_normal")
self.b = self.add_weight(shape=(self.units,),
initializer="zeros")
def call(self, inputs):
outputs = tf.matmul(inputs, self.W) + self.b
if self.activation is not None:
outputs = self.activation(outputs)
return outputs
🔸 함수 내용 비교
🔸 자동 크기 추론(층 만들기)
mnist
SimpleDense
input_tensor = tf.ones(shape=(2, 784))
my_dense = SimpleDense(units=32, activation=tf.nn.relu)
output_tensor = my_dense(input_tensor)
print(output_tensor.shape)
(2, 32)
🔸 __call__() 메서드: build, call 함수
build() 메서드
call() 메서드
기본 layer클래스의 __call__() 메서드
def __call__(self, inputs):
if not self.built:
self.build(inputs.shape)
self.built = True
return self.call(inputs)
🔸 케라스에서 모델을 만드는 방법
🔸 많이 사용되는 네트워크 종류: 함수형 API, Model 서브클래싱으로 주로 만든다.
🔸 예시
model.compile(optimizer = 'rmsprop',
loss = 'binary_crossentropy',
metrics='acc')
각각의 옵션에 맞는 함수를 사용하여야하며, 그 내용에 대해서는 간단하게는 신경망 모델의 함수알기에서 설명, 그 외 자세한 내용은 https://keras.io/guides/에서 확인
🔸 설명
1. optimizer:
2. loss(loss_function): (= objective function, cost function)
3. metrics: 측정지표
history = model.fit(
inputs,
targets,
epochs=5,
batch_size=128
)
inputs: 입력 샘플(데이터, 텐서)
targets: 훈련 타깃
epochs: 훈련루프를 몇 번 돌릴 것 인가
batch_size: n개의 샘플 배치로 이 데이터를 순회
prediction = model.predict(new_inputs, batch_size = 128)