๐Ÿ“ AI & Bigdata/AI & ML & DL

[DL] TensorFlow- ์‹ฌ์ธต์‹ ๊ฒฝ๋ง ๋ชจ๋ธ ์ฝ”๋“œ ๊ตฌํ˜„

SOIT 2022. 8. 19. 18:48
  1. import: ํ•„์š”ํ•œ ๋ชจ๋“ˆ import
  2. ์ „์ฒ˜๋ฆฌ: ํ•™์Šต์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ชจ๋ธ๋ง(model): ๋ชจ๋ธ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  4. ์ปดํŒŒ์ผ(compile): ๋ชจ๋ธ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  5. ํ•™์Šต (fit): ๋ชจ๋ธ์„ ํ•™์Šต์‹œํ‚ต๋‹ˆ๋‹ค.

 


์ด๋ฏธ์ง€: ๋ฐ์ดํ„ฐ ๋กœ๋“œ

1) load_data()๋ฅผ ํ†ตํ•ด train, validation ๋‚˜๋ˆˆ๋‹ค. 

(x_train, y_train), (x_valid, y_valid) = fashion_mnist.load_data()

 

์ „์ฒ˜๋ฆฌ

1) ์ด๋ฏธ์ง€ ์ •๊ทœํ™” (Normalization)- ๋ชจ๋“  ํ”ฝ์…€์€ 0~255(8bit)

x_train = x_train / 255.0
x_valid = x_valid / 255.0

 

3) Flatten- 2D> 1D

x = Flatten(input_shape=(28, 28))  #x_train์˜ shape ์ฐ์–ด๋ณด๊ณ , 28*28-> 784
print(x(x_train).shape)

4) Dense Layer- ๋งจ ๋งˆ์ง€๋ง‰ ์ถœ๋ ฅ์ธต ํ™œ์„ฑํ•จ์ˆ˜: 'softmax', ๋‹จ์ˆœ ๋ถ„๋ฅ˜:  'sigmoid'

Dense(10, activation='softmax')

 

๋ชจ๋ธ ์ •์˜ (Sequential)

1) Sequential ๋ชจ๋ธ ์•ˆ์—์„œ ์ธต์„ ์Œ“๋Š”๋‹ค

  • 2D > 1D
  • Dense Layer์— activation='relu'
  • ๋งˆ์ง€๋ง‰ ์ธต์˜ ์ถœ๋ ฅ ์ˆซ์ž๋Š” ๋ถ„๋ฅ˜ํ•˜๊ณ ์ž ํ•˜๋Š” ํด๋ž˜์Šค ๊ฐฏ์ˆ˜
model = Sequential([
    # Flatten์œผ๋กœ shape ํŽผ์น˜๊ธฐ
    Flatten(input_shape=(28, 28)), # 28 * 28 -> 784์˜ ํ‰ํ‰ํ•œ vecter
    # Dense Layer
    Dense(1024, activation='relu'),
    Dense(512, activation='relu'),
    Dense(256, activation='relu'),
    Dense(128, activation='relu'),
    Dense(64, activation='relu'),
    # Classification์„ ์œ„ํ•œ Softmax 
    Dense(10, activation='softmax'),
])

ํŒŒ๋ผ๋ฏธํ„ฐ ์ค„์–ด๋“œ๋Š” ๋ชจ์Šต ํ™•์ธ

 

์ปดํŒŒ์ผ (compile)

  1. optimizer: 'adam' ,
  2. loss:  
    • (activation)sigmoid: binary_crossentropy
    • (activation)softmax:
      • ์›ํ•ซ์ธ์ฝ”๋”ฉ(O): categorical_crossentropy
      • ์›ํ•ซ์ธ์ฝ”๋”ฉ(X): sparse_categorical_crossentropy
  • metrics: 'acc' ํ˜น์€ 'accuracy'
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['acc'])

 

ํ•™์Šต (fit)

ModelCheckpoint: ์ฒดํฌํฌ์ธํŠธ ์ƒ์„ฑ: val_loss ๊ธฐ์ค€์œผ๋กœ epoch ๋งˆ๋‹ค ์ตœ์ ์˜ ๋ชจ๋ธ์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด

  • checkpoint_path
  • ModelCheckpoint
checkpoint_path = "my_checkpoint.ckpt"
checkpoint = ModelCheckpoint(filepath=checkpoint_path, 
                             save_weights_only=True, 
                             save_best_only=True, 
                             monitor='val_loss', 
                             verbose=1)

ํ•™์Šต

history = model.fit(x_train, y_train,
                    validation_data=(x_valid, y_valid),
                    epochs=20,
                    callbacks=[checkpoint],
                   )

 

ํ•™์Šต ์™„๋ฃŒ ํ›„ Load Weights (ModelCheckpoint)

# checkpoint ๋ฅผ ์ €์žฅํ•œ ํŒŒ์ผ๋ช…์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
model.load_weights(checkpoint_path)

 

ํ•™์Šตํ•œ ํ›„ ๊ฒ€์ฆํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด?

model.evaluate(x_valid, y_valid)

 

ํ•™์Šต loss / acc ์‹œ๊ฐํ™”

plt.figure(figsize=(12, 9))
plt.plot(np.arange(1, 21), history.history['loss'])
plt.plot(np.arange(1, 21), history.history['val_loss'])
plt.title('Loss / Val Loss', fontsize=20)
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend(['loss', 'val_loss'], fontsize=15)
plt.show()

plt.figure(figsize=(12, 9))
plt.plot(np.arange(1, 21), history.history['acc'])
plt.plot(np.arange(1, 21), history.history['val_acc'])
plt.title('Acc / Val Acc', fontsize=20)
plt.xlabel('Epochs')
plt.ylabel('Acc')
plt.legend(['acc', 'val_acc'], fontsize=15)
plt.show()

 

 

์ˆ˜์น˜: ๋ฐ์ดํ„ฐ ๋กœ๋“œ

 

1) tensorflow-datasets (tfds): train, validation ๋‚˜๋ˆˆ๋‹ค.

train_dataset = tfds.load('iris', split='train[:80%]')
valid_dataset = tfds.load('iris', split='train[80%:]')
#valid_dataset = tfds.load('iris', split='train[-20%:]')

 

์ „์ฒ˜๋ฆฌ

  1. label ๊ฐ’์„ one-hot encoding ํ•  ๊ฒƒ
  2. feature (x), label (y)๋ฅผ ๋ถ„ํ• ํ•  ๊ฒƒ
def preprocess(data):
    x = data['features']
    y = data['label']
    y = tf.one_hot(y, 3)
    return x, y

 

๋ชจ๋ธ ์ •์˜ (Sequential)

model = tf.keras.models.Sequential([
    # input_shape๋Š” X์˜ feature ๊ฐฏ์ˆ˜๊ฐ€ 4๊ฐœ ์ด๋ฏ€๋กœ (4, )๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
    Dense(512, activation='relu', input_shape=(4,)), #๋“ค์–ด์˜ค๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ 2D๊ฐ€ ์•„๋‹ˆ๋ผ flatten ํ•ด์ค„ ํ•„์š”๊ฐ€ ์—†์Œ, ์ •ํ˜•๋ฐ์ดํ„ฐ(1D)์ž„
    Dense(256, activation='relu'),
    Dense(128, activation='relu'),
    Dense(64, activation='relu'),
    Dense(32, activation='relu'),
    # Classification์„ ์œ„ํ•œ Softmax, ํด๋ž˜์Šค ๊ฐฏ์ˆ˜ = 3๊ฐœ
    Dense(3, activation='softmax'),
])

 

์ปดํŒŒ์ผ (compile)๋ถ€ํ„ฐ๋Š” ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ ๊ณผ์ •๊ณผ ๋™์ผ

 

 

728x90