인공지능 응용 공학 51

tf.keras.preprocessing.image.ImageDataGenerator 에서 tf.keras.utils.image _dataset_from_directory 로 변경하여 이미지 분류

헤더 영역에 필요한 라이브러리들을 선언하자. 1 import os import tensorflow as tf from keras.models import Sequential from keras.layers import Dense, Dropout, Flatten from keras.constraints import maxnorm from keras.optimizers import Adam from keras.layers.convolutional import Conv2D from keras.layers.convolutional import MaxPooling2D from keras.utils import np_utils import numpy as np import time import matplotlib...

학습가중치 저장 및 업로딩에 의한 Keras MNIST 수기문자 판독

참조: 구글 Save and load models https://www.tensorflow.org/tutorials/keras/save_and_load TensorFlow.Keras 에 의한 MNIST 수기문자 판독 머신러닝 학습과정에서 생성되는 학습 가중치값을 checkpoint 폴더에 저장했다가 다시 불러내서 즉 사전학습시킨 가중치를 활용하는 방법을 살펴보자. 이 기법은 다른 OS 시스템에 porting 을 목적으로 하는 TensorFlow Lite 에서의 기법과는 다른 방법이다. 예를 들면 아나콘다에서 TensorFlow 로 학습 시킨 가중치를 저장해 두었다가 아나콘다 OpenCV 에서 캡춰한 이미지를 대상으로 객체를 탐지해 볼 수 있다. 텐서플로우 케라스를 사용한 MNIST 학습 및 검증 과정에서..

Attention RNN 모델

seq2seq RNN 모델에서 인코더 알고리듬을 개량해 보자. 앞서 기술된 인코더 구조에서는 마지막 LSTM 셀로부터 출력되는 은닉층 정보 h 가 디코더의 LSTM 첫 번째 셀에 전달하는 단순한 구조를 보여주었다. 개선 이전의 인코더에서는 문장 전체를 쪼개서 각각의 LSTM 셀에 입력하여 은닉층 연산 후 펼쳐진 마지막 LSTM 셀에서 출력되는 은닉층 정보 h 를 디코더에 입력했었다. 개선 후에는 인코더 각각의 LSTM 셀로부터 출력되는 은닉층 정보를 모은 h 를 디코더에 입력하는 방법이다. 이렇게 하면 인코더 sequence 의 ‘고정길이’라는 제약을 벗어날 수 있다. 즉 마지막 LSTM 하나의 셀에서 결과를 넘기는 것에 비해 입력데이터 수에 해당하는 만큼의 은닉층 정보 전체를 전달하므로 고정된 길이의 ..

seq2seq RNN

기계 번역 분야에서 매우 인기가 있었던 Sequence to Sequence 모델은 두 개의 RNN 즉 인코더와 디코더를 짝으로 구성된다. 인코더는 입력을 순차적으로 처리하고 모든 입력 데이터를 감안한 은닉층 벡터를 생성한다. 그 생성된 은닉층 데이터는 해당 컨텍스트를 사용하여 적절한 대상 시퀀스(번역, 챗봇의 응답)를 예측 학습하는 디코더로 전달된다. 중요 응용 분야는 다음과 같다. 기계 번역: 한 언어의 문장을 다른 언어로 번역 자동 용약: 긴 문장을 짧게 요약된 문장으로 변환 질의 응답: 질문을 응답으로 변환 메일 자동 응답: 수신한 이메일 문장을 답변 글로 변환 sequence는 RNN 이나 LSTM에서 일정한 길이를 가지는 데이터를 의미한다. 인코더의 역할은 특정 언어의 입력 데이터를 받아들여 ..

텍스트 생성(text generation) 알고리듬

LSTM을 사용하는 텍스트 즉 문장 생성의 원리에 대해서 살펴보자. “You say goodbye and I say hello.” 라는 단어장으로부터 학습하는 모델을 생각해보자. 이 절의 내용은 2022년 12월 베타버전이 오픈된 오늘날의 chatGPT3.5 버전의 기원이 될 수도 있는 중요한 알고리듬의 영역에 해당함에 유의하자. 그림과 같이 ‘I’가 입력 데이터일 때 출력을 ‘say’라는 단어 자체로 결정론적으로 학습시키는 것이 아니라 ‘say’라는 단어의 출현 확률로도 학습이 가능하다. 6.7절에서 사용했던 특정한 단어를 직접 지정하는 경우는 결정론적(deterministic) 방법에 해당한다, 이는 출현 단어의 확률 분포 측면에서 보면 해당 단어의 출현 확률이 1.0 이고 나머지는 모두 0.0 이 ..

Rnnlm 클라스를 사용 PTB 데이터세트 전체를 대상으로 학습시켜보자.

Time RNN 계층을 Time LSTM 계층으로 대체한 Rnnlm 클라스를 사용하여 PTB 데이터세트 전체에 대해 학습시켜보자. LSTM계층으로 변경함에 따라 하이퍼 파라메터 설정에 변동이 큼에 유의하자. Rnnlm 클라스는 SimpleRnnlm 클라스와 거의 동일하지만 몇가지 메서드들이 추가되었다. save_params, load_params 메서드들은 가중치와 기울기 데이터를 피클링하여 저장하거나 부를 때 사용된다. 아우러 predict 메서드는 다음 절의 text generation에서 사용된다. 참조: 밑바닥부터 시작하는 딥러닝 2, 6장 perplexity 계산 결과 첨부된 Colab 파일을 다운받아 반드시 GPU 사용 설정 후에 실행해보자. (실행시간 27분)

Simple Rnnlm 클라스를 사용한 학습에 관해서 살펴보자

그림에서처럼 상류방향으로 4개의 Time 계층으로 이루어지는 SimpleRnnlm 클라스를 사용하여 PTB 데이터를 학습시키자. PTB 데이터 전체를 학습시키기에는 코드 효율이 너무 떨어지므로 앞부분 1000개만 사용해서 학습을 시켜보도록 한다. 정답 레이블에 입력 데이터를 한자리씩 민 데이터를 준 상태에서 Corpus 수를 제한하여 softmax를 적용한다. 원리적인 측면에서 알고리듬 이해에 도움을 줄 수 있는 예제이지 실전에서 사용하기에는 컴퓨팅 부담이 큰 알고리듬이다. Time 계층의 입혁을 위해 batch_size = 2 를 사용하면 500개씩 배치를 형성하여 입력하도록 한다. batch =2 일 때 마지막 1000번째는 제외시키고 다시 첫 번쩨 데이터를 입력 처리하자. Time 계층을 구성하는 ..

word2vec 알고리듬 CBOW 모델의 PTB(Pen Treebank) 데이터 세트 적용

제법 방대한 규모의 PTB 데이터 세트를 사용해서 참조의 179페이지 4.3.2 CBOW 모델 학습 코드를 적용해 보자. GPU가 없는 PC에서 실행해 보면 무려 160분 연산 시간이 소요되며 연산 결과는 binary 파일 형태로 cbow_params.pkl 즉 피클 형태 파일로 저장된다. 대략 7배 정도 가속이 가능한 GPU 지원이 있어도 반나절 가량의 컴퓨팅이 필요하다. 따라서 컴퓨팅이 완료된 즉 사전학습된 binary 형태의 결과물을 피클링 파일로 저장했다가 불러 쓰는 것이 편리하다. 피클링 파일에 저장되어있는 내용물은 word_vecs, word_to_id, id_to_word 이다. 181페이지 4.3.3 CBOW 모델평가 코드를 불러서 활용해보자. query(탐색) 할 단어들을 지정해 입력하여..