cf) 판별 모델링(Discriminative Modeling)
입력받은 데이터를 특정 기준에 따라 판별하는 것이 목표인 모델링
for i in range(10):
plt.subplot(2, 5, i+1) # 1
plt.imshow(train_x[i].reshape(28, 28), cmap='gray') # 2
plt.title(f'index: {i}') # 3
plt.axis('off') # 4
plt.show()
random_idx = np.random.randint(1, 60000)
train_dataset = tf.data.Dataset.from_tensor_slices(train_x).shuffle(BUFFER_SIZE).batch(BATCH_SIZE)
# train_x라는 넘파이 배열형 자료를 섞음, 배치 사이즈에 따라서 나눔
model.add(layers.Conv2DTranspose(128, kernel_size=(5, 5), strides=(1, 1), padding='same', use_bias=False))
model.add(layers.BatchNormalization())
model.add(layers.LeakyReLU())
Conv2DTranspose: Conv2D와 반대로 이미지 사이즈를 넓혀주는 층 (upsampling)
출처
BatchNormalization: 가중치가 폭발하지 않도록 가중치 값을 정규화 해줌.
LeakyReLU: 중간층의 활성화 함수로 쓰임
출처
tanh: 마지막의 활성화 함수로 쓰임 - 앞서 0-255를 -1~1 이내의 값으로 정규화 시켰던 것과 동일하게 맞추기 위함
손실함수: binary cross entropy 사용
tf.ones_like(vector) / zeros_like: 0 또는 1로 채워진 넘겨진 vector와 같은 크기의 벡터를 반환함
출처: 파이썬 - 퍼스트클래스 함수
1. 의미
함수 자체를 인자로써 다른 함수에 전달하거나 다른 함수의 결과값으로 리턴 할 수 있음.
특정 변수에 함수를 할당할 수도 있고, 데이터 구조 안에 저장도 가능함
def plus(x, y):
return x + y
print(plus(5, 3))
f = plus
print(plus)
print(f)
>> 8
>> <function plus at ---->
>> <function plus at ---->
f(5, 3)
>> 8
def logger(msg):
def log_message(): # 1
print('Log: ', msg)
return log_message
log_hi = logger('Hi')
print(log_hi) # log_message 오브젝트가 출력됩니다.
log_hi() # "Log: Hi"가 출력됩니다.
del logger # 글로벌 네임스페이스에서 logger 오브젝트를 지웁니다.
# logger 오브젝트가 지워진 것을 확인합니다.
try:
print(logger)
except NameError:
print('NameError: logger는 존재하지 않습니다.')
log_hi() # logger가 지워진 뒤에도 Log: Hi"가 출력됩니다.
>> $ python first_class_function.py
>> <function logger.<locals>.log_message at 0x0000022EC0BBAAF0>
>> Log: Hi
>> NameError: logger는 존재하지 않습니다.
>> Log: Hi
def outer_func(): # 1
message = 'Hi' # 3
def inner_func(): # 4
print message # 6
return inner_func() # 5
outer_func() # 2
def outer_func(): # 1
message = 'Hi' # 3
def inner_func(): # 4
print(message) # 6
return inner_func # 5
my_func = outer_func() # 2
my_func() # 7
my_func() # 8
my_func() # 9
>> Hi
>> Hi
>> Hi
프리 변수
코드 블럭 안에서 정의되지 않았으나 사용된 함수
ex) 함수 안에서 변수와 함수를 선언. 이때 함수 안에 있는 함수에서 해당 변수를 사용하면 이 변수를 프리 변수라고 함
이전에 배웠던 데코레이터 개념을 복습할 수 있었다. 그때 이해가 안돼서 그냥 그런가보다 하고 넘어갔었는데 그때에 비해선 이해가 잘 되는 느낌이다. 다만 지금도 주어진 내용만 이해한 거지 새롭게 사용해보라고 하면 잘 할 수 있을진 모르겠다.
오늘 checkpoint를 이용해서 학습된 내용을 저장한 후 이어서 학습시키는 방법을 배웠는데 유용하게 쓰일 거 같다. 다만 자꾸 파일 경로를 잘못 설정해서 checkpoint와 상관없이 다시 실행해야하는 불상사가 일어났다.. 한 번 할 때 제대로 하자.