<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>
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 입니다.
확률을 출력하기 위해 시그모이드 활성화 함수를 사용한다.
이진 분류 문제에서 시그모이드 출력에 대해 사용하는 손실함수는 binary_crossentropy이다.
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개의 훈련 데이터로 이루어져 있음
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)
문제들
P1. 훈련이 되지 않습니다.(훈련 손실이 줄어들지 않습니다.)