모델구조 이해하기텐서플로 2.0 버전에서 케라스를 이용해 모델을 구현하는 방법을 알아보자. 전반적인 자연어처리에 대해 알려면 아래의 블로그를 참고하자' Show han-py.tistory.com/281 구현 순서전처리 => 모델만들기 => 학습하기 1.단계 전처리하기컴퓨터는 한국어를 이해할 수 없습니다. 그래서 Deep learning을 하기 위해 한국어를 컴퓨터가 이해할 수 있게 Vector로 변환하는 과정이 필요합니다. 이를 우리는 전처리라고 하고, 입력값을 임베딩된 벡터로 변형한다라고도 합니다.
시작해 볼까요? 다음의 전처리 코드를 한 줄씩 이해해 봅시다.(궁금한 줄을 선택해 주세요)
import tensorflow as tf
from tensorflow.keras import preprocessing
samples = ['날이 좋아, 기분이 너무 좋다',
labels = [[1], [0], [0], [1], [1]]
tokenizer = preprocessing.text.Tokenizer()
tokenizer.fit_on_texts(samples)
sequences = tokenizer.texts_to_sequences(samples)
word_index = tokenizer.word_index
자연어 토크나이저 알아보기. https://codetorial.net/tensorflow/natural_language_processing_in_tensorflow_01.html 공식문서 관련 구현 https://www.tensorflow.org/tutorials/keras/text_classification?hl=ko 2.단계 모델 구현하기심층 신경망 모델을 만드는 방법에는 Sequential API 방법과 Function API 방법이 있습니다. 우리는 Sequential API 방법을 활용하여 모델을 만들어 봅시다. 모델의 만드는 원리는 거름종이를 한 층씩 만들어서 한 층씩 통과시키는 것이라고 생각해 주시면 됩니다. 즉, 모델을 만들기 위해서는 layer를 하나씩 쌓아주면 된다.
model = tf.keras.Sequential()
model.add(layers.Embedding(vacab_size, emb_size, input_length = 4))
model.add(layers.lambda(lambda x: tf.reduce_mean(x, axis = 1)))
model.add(layers.Dense(hidden_dimension, activation='relu'))
model.add(layers.Dense(output_dimension, activation='sigmoid'))
필요 변수
위에서 적의한 변수는 학습 과정에서 적용할 배치 사이즈, 에폭 수, 모델의 하이퍼파라미터에 해당하는 여러차원의 크기(임베딩 층, 은닉 층, 출력 층)입니다. 모델이 완성됐다. 3단계. 학습하기학습하기 위해서는 Keras 내장 API인 compile 메서드와 fit 메서드를 사용하면 됩니다. 우선은 Compile 매서트를 사용해 학습과정을 정의해 봅시다.
optimizer의 경우 아담(Adam) 최적화 알고리즘을 사용했습니다. 그리고 이진 분류 문제에서 loss값으로는 binary cross-entropy(이진 교차 엔트로피 손실 함수)를 사용합니다다. metrics 부분은 모델의 성능을 측정하기 위한 기준인 평가지표를 정의하는데, 이진 분류의 평가 지표로 가장 널리 사용되는 accuracy(정확도)를 평가 지표로 사용합니다. 이제 fit 메서드로 학습을 진행하면 된다. [딥러닝] Tensorflow 에서 모델 생성하는 법 모델 생성 방법Tensorflow에서는 딥러닝 모델을 만드는 방법이 아래와 같이 3가지가 있습니다.
1, 2번은 기존 Keras를 사용하셨다면 이해하기 쉽고, 3번은 pytorch와 비슷한 방법입니다. 각각 어떻게 모델을 만드는지 알아보겠습니다. Sequential 모델가장 구현하기 쉬운 방법입니다. Sequential 모델을 생성하여 원하는 layer를 순차적으로 add하는 방식입니다. 다만 이 방법으로는 직관적인 모델을 빠르게 구현할 수 있지만, 구조가 조금 복잡해지면 구현하기 어려울 수 있다는 단점이 있습니다.
Functional 모델두번째로 Functional 모델입니다. input layer부터 output layer까지 직접 forward 순서대로 함수 끝에 입력 변수를 넣어 줍니다. 최종적으로는 Model(inputs, outputs) 과 같이 입력 layer와 출력 layer를 지정해 줌으로써 모델을 만들 수 있습니다. 무난하게 자주 사용하는 방법입니다.
Subclassing 모델마지막으로 Subclassing 모델입니다. pytorch와 구현 방식이 비슷하여 개인적으로 가장 선호하는 방법입니다. 직접 모델 클래스를 생성하고 Model 모듈을 상속 받습니다. 그리고 __init__함수에는 사용할 layer들을 작성하고, call함수에는 init에서 작성한 layer에 맞게 forward 해 줍니다.
기타 팁모델 시각화위에서 생성한 모델에 대해 네트워크 구조를 시각화 할 수 있습니다.
모델 컴파일 방법모델을 fit 함수로 학습하기 위해서는 compile을 해야 합니다. 아래는 원하는 loss와 optimizer를 사용해서 compile 하는 방법들의 예시입니다. tensorflow에서 기본으로 제공하는 'categorical_crossentropy', 'adam', 'accuracy'등 문자열로도 구현할 수 있고, 직접 모듈을 가져와서 사용할 수 있습니다. 단, fit 함수로 학습하지 않고 tf.GradientTape()로 직접 train loop로 학습할 때에는 아래 방법이 아니라, loss와 optimizer를 직접 작성해 주어야 합니다.
|