본문 바로가기

딥러닝

[패스트캠퍼스 수강 후기] 인공지능강의 100% 환급 챌린지 31회차 미션

인공지능강의

05. PART 4) 딥러닝의 3 STEP의 기초

51. 순환 신경망(RNN) - 09. (STEP 3) 순환 신경망 구현 및 학습


## 순환신경망 구현 및 학습

import tensorflow as tf

## 하이퍼 파라미터

EPOCHS = 10
NUM_WORDS = 10000

## 모델 정의

class MyModel(tf.keras.Model):
def __init__(self):
super(MyModel, self).__init__()
self.emb = tf.keras.layers.Embedding(NUM_WORDS, 16)
self.rnn = tf.keras.layers.LSTM(32)
self.dense = tf.keras.layers.Dense(2, activation='softmax')

def call(self, x, training=None, mask=None):
x = self.emb(x)
x = self.rnn(x)
return self.dense(x)

## 학습, 테스트 루프 정의

# Implement training loop
@tf.function
def train_step(model, inputs, labels, loss_object, optimizer, train_loss, train_accuracy):
with tf.GradientTape() as tape:
predictions = model(inputs, training=True)
loss = loss_object(labels, predictions)
gradients = tape.gradient(loss, model.trainable_variables)

optimizer.apply_gradients(zip(gradients, model.trainable_variables))
train_loss(loss)
train_accuracy(labels, predictions)

# Implement algorithm test
@tf.function
def test_step(model, images, labels, loss_object, test_loss, test_accuracy):
predictions = model(images, training=False)

t_loss = loss_object(labels, predictions)
test_loss(t_loss)
test_accuracy(labels, predictions)

## 데이터셋 준비

imdb = tf.keras.datasets.imdb
(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=NUM_WORDS)

x_train = tf.keras.preprocessing.sequence.pad_sequences(x_train,
value=0,
padding='pre',
maxlen=32)
x_test = tf.keras.preprocessing.sequence.pad_sequences(x_test,
value=0,
padding='pre',
maxlen=32)

train_ds = tf.data.Dataset.from_tensor_slices((x_train, y_train)).shuffle(10000).batch(32)
test_ds = tf.data.Dataset.from_tensor_slices((x_test, y_test)).batch(32)

## 학습 환경 정의
### 모델 생성, 손실함수, 최적화 알고리즘, 평가지표 정의

# Create model
model = MyModel()

# Define loss and optimizer
loss_object = tf.keras.losses.SparseCategoricalCrossentropy()
optimizer = tf.keras.optimizers.Adam()

# Define performance metrics
train_loss = tf.keras.metrics.Mean(name='train_loss')
train_accuracy = tf.keras.metrics.SparseCategoricalAccuracy(name='train_accuracy')

test_loss = tf.keras.metrics.Mean(name='test_loss')
test_accuracy = tf.keras.metrics.SparseCategoricalAccuracy(name='test_accuracy')

## 학습 루프 동작

for epoch in range(EPOCHS):
for seqs, labels in train_ds:
train_step(model, seqs, labels, loss_object, optimizer, train_loss, train_accuracy)

for test_seqs, test_labels in test_ds:
test_step(model, test_seqs, test_labels, loss_object, test_loss, test_accuracy)

template = 'Epoch {}, Loss: {}, Accuracy: {}, Test Loss: {}, Test Accuracy: {}'
print(template.format(epoch + 1,
train_loss.result(),
train_accuracy.result() * 100,
test_loss.result(),
test_accuracy.result() * 100))
train_loss.reset_states()
train_accuracy.reset_states()
test_loss.reset_states()
test_accuracy.reset_states()

 

52. 맥락을 파악하는 Attention 기법 - 01. (STEP 1) Attention 기법의 이해

Sequence-to-sequence model

Seq2seq모델은 번역 문제를 학습하기 위해 널리 사용되고 있는 RNN 구조이다.

 

영어 문장의 데이터화

영어 문장을 데이터화 하기 위해서는, Tokenizer와 Embedding이 필요하다.

한글 문장의 경우에는 띄어쓰기 만으로 단어를 구분하지 않고 형태소 분석이 필요하다.

 

Gradient Vanishing in RNN

입출력 연관 관계가 너무 멀리 떨어져 있으면 기울기 소실이 일어나 잘 학습되지 않는다.

이를 해결하기 위해 모든 Encoder hidden state를 모아서 Decoder로 가각 적달하면 된다.

 

Attention 구조

기울기 소실 문제를 해결하기 위해 Decoder단에서 어떤 Encoder정보에 집중해야 하는지 대한 방법이 Attention mechanism의 아이디어이다.

 

 

https://bit.ly/3g72Rmm

 

딥러닝/인공지능 올인원 패키지 Online. | 패스트캠퍼스

Tensorflow2.0부터 Pytorch까지 딥러닝 대표 프레임워크를 정복하기. 생활 깊숙이 침투한 인공지능, 그 중심엔 딥러닝이 있습니다. 가장 강력한 머신러닝의 툴로서 주목받는 딥러닝은 생각보다 어려��

www.fastcampus.co.kr