<aside> 💡

점수 실습

1번 10점 2번 10점 3번 10점

이론 1번 10점
2번 10점 3번 10점 4번 10점 5번 10점 6번 10점 7번 10점


total 100점

</aside>

<aside> 💡 점수 실습

1번 0점 2번 9점 3번 10점

이론 1번 10점
2번 10점 3번 8점 4번 8점 5번 7점 6번 10점 7번 10점


total 82점

</aside>

실습문제 1.


from tensorflow.keras.datasets import imdb
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(
    num_words=10000)

word_index = imdb.get_word_index()
reverse_word_index = dict(
    [(value, key) for (key, value) in word_index.items()])
decoded_review = " ".join(
    [reverse_word_index.get(i - 3, "?") for i in train_data[0]])

#decoded_review를 " "를 기준으로 나누어 dataset으로 저장
dataset = decoded_review.split(" ")

from tensorflow.keras.layers import TextVectorization
text_vectorization = TextVectorization(
    output_mode="int",
)

import re
import string
import tensorflow as tf

def custom_standardization_fn(string_tensor):
    lowercase_string = tf.strings.lower(string_tensor)
    return tf.strings.regex_replace(
        lowercase_string, f"[{re.escape(string.punctuation)}]", "")

def custom_split_fn(string_tensor):
    return tf.strings.split(string_tensor)

text_vectorization = TextVectorization(
    output_mode="int",
    standardize=custom_standardization_fn,
    split=custom_split_fn,
)

#dataset으로 어휘 사전을 만들기
text_vectorization.adapt(dataset)

#문장을 encoding
test_sentence = "Everyone except my father loves the released film."
encoded_sentence = text_vectorization(test_sentence)
print(encoded_sentence)

아래와 같은 출력값이 나옵니다.

tf.Tensor([97 1 1 94 1 2 61 6], shape=(8,), dtype=int64)

어휘 사전에 없으면 인덱스가 1이기 때문에 문장에 포함된 단어 중 사전에 없는 단어의 개수는 3 입니다.

실습문제 2.


  1. 1, sigmoid

확률을 출력하기 위해 시그모이드 활성화 함수를 사용한다.

  1. binary_crossentropy

이진 분류 문제에서 시그모이드 출력에 대해 사용하는 손실함수는 binary_crossentropy이다.

  1. 5000

x_val와 y_val은 검증 데이터이고, partial_x_train과 partial_y_train은 훈련 데이터이기 때문이다.

(문제에서 검증 데이터를 test data라고 하는 오류가 있었습니다. 죄송합니다. 1점 감점은 fit 안에 partial_x_train과 partial_y_train을 보고 둘이 훈련 데이터임을 알고 해당 부분을 partial_x_train = x_train[5000:] partial_y_train = y_train[5000:] 라고 할 수 있기 때문입니다.)

참고) IMDB 데이터셋은 2만 5000개의 훈련 데이터로 이루어져 있음

실습문제 3.


MaxPooling을 이용하여 데이터의 수를 줄여주어야 심각한 과대적합을 예방할 수 있다.

from tensorflow import keras
from tensorflow.keras import layers

inputs = keras.Input(shape=(180, 180, 3))
x = layers.Rescaling(1./255)(inputs)
x = layers.Conv2D(filters=32, kernel_size=3, activation="relu")(x)
x = layers.MaxPooling2D(pool_size=2)(x)
x = layers.Conv2D(filters=64, kernel_size=3, activation="relu")(x)
x = layers.MaxPooling2D(pool_size=2)(x)
x = layers.Conv2D(filters=128, kernel_size=3, activation="relu")(x)
x = layers.Flatten()(x)
outputs = layers.Dense(1, activation="sigmoid")(x)
model = keras.Model(inputs=inputs, outputs=outputs)

이론 문제 1.


문제들

P1. 훈련이 되지 않습니다.(훈련 손실이 줄어들지 않습니다.)