2023/01 22

Colab에서 CNN을 사용한 Keras MNIST 코드 작성

Colab에서 Untitled0.ipynb를 연 후 kerascnnmnist.ipynb 로 파일명을 부여한 후 저장하자. tensorflow를 호출하여 약어 tf 로 정의하고 버전을 출력해 보자. 아래 코드를 Colabs에서 실행하기 전에 반드시 런타임 유형 변경에서 반드시 하드웨어 가속기 GPU를 설정하도록 하자. 그러히치 않으면 실행은 가능하지만 10배 가량의 상당한 연산 시간이 소요됨에 유의하자. tensorflow.keras를 상속하는 datasets, layers, modles, losses 라이브러리를 선언한다. 이들은 tensorflow.keras에서 제공하는 메서드(method)들이다. 이 선언을 사용하면 tf.keras.layers.⦁⦁⦁를 간단하게 layers.⦁⦁⦁로 쓸 수 있는 장점..

Attention RNN 알고리듬에서의 shape 변경 기법

LSTM Attention 알고리듬을 살펴보wk. hs 벡터에 포함된 각 단어 별 중요도를 나타내는 확률 가중치 벡터 a와 hs 벡터를 아마디르 곱셈 후 특정 축을 중심으로 합산하여 shape을 변경하는 기법을 볼 수 있다. 이 과정을 학습하자. 텐서플로우 리스트 데이터 A에 대해서 shape 과 argmax 값을 살펴보자. 일차원적 리스트 구조의 데이터는 (5,)로 표현된다. argmax(A)에서 numpy=2는 A의 최대값이 위치한 30의 위치를 나타낸다. 1 import tensorflow as tf A = tf.constant([2, 20, 30, 3, 6]) print(A.shape) tf.math.argmax(A) 텐서플로우 2차원 리스트 데이터 B에 대해서 shape 과 argmax 값을 살..

자연어처리 2023.01.20

인공지능 응용 공학 Image Classification

1998년 LeNet-5 발명 이후로 10 여년간 MNIST에 관한 알고리듬 벤치마킹이 활발히 이루어진 이후 20212년 스탠포드 대학에서 주최한 ILSVRC 컨퍼런스에서 AlexNet 이 우승한 이후 CNN을 기반으로 하는 Image Classification 분야가 급속히 발전하였다. LeNet 에 있어서 인식(지)의 목표는 이미지에 포함된 하나의 객체 즉 숫자가 무엇인지 알아내는 비교적 간단한 문제였지만 AlexNet 이후로부터는 이미지에 포함된 여러 이미지들이 각각 무엇인가를 인식하는 인간과 거의 비슷한 인식능력을 시험하는 단계로 발전하였다. 32X32 수기문자 이미지는 1024 비트 즉 1K 비트급 이미지로서 일 단계 Convolution 처리 과정의 첫 번째 Convolution 에서 6개의 ..

구글 Colab에서 TensorFlow 버전 2.92를 사용한 MNIST 예제

텐서플로우는 2.x 버전에서는 초기의 1.x 버전에서 사용했던 그래프 파트와 실행 파트의 명확한 구분이 없어지고 일반적인 파이선 코드 특성을 보여준다. 이번 절에서는 1.15 버전의 MNIST 코드들이 진화되어 변형된 형태를 면밀하게 살펴보기로 하자. 라이브러리 TensorFlow 와 matplotlib.pyplot을 불러오자. 앞 절과의 차이점은 최종 인식률을 92.6%에서 98% 이상으로 높일 수 있도록 중간에 784->128로 압축하는 은닉층을 하나 부과하였다는 점이다. 출력 결과 버전 2.9.2를 확인할 수 있다. 1 import tensorflow as tf print("TensorFlow version:", tf.__version__) import matplotlib.pyplot as plt ..

구글 Colab에서 TensorFlow 버전 1.15를 사용한 MNIST 예제

구글의 머신러닝 지원 라이브러리인 텐서플로우는 1.x 버전에서 1.15까지 업그레이드 된 후 2.x 버전으로 넘어와 현재 2.92까지 진화하였다. 초기의 1.x 버전에서는 그래프 파트와 실행 파트를 명확하게 구분해서 코드 작업이 이루어졌던 반면 2.x 버전에서는 그러한 구분이 사라져버린 근본적인 차이를 보여준다. 초보자들이 Colab에서 처음으로 2.x 버전의 텐서플로우를 사용한 MNIST 코드를 갑자기 경험하는 경우 머신러닝의 진면목을 제대로 이해하기 어려운 상황을 겪을 수 있기 때문에, 버전 1.15에서 사용했던 MNIST 코드 그래프 구조를 살펴만 보고 2.x 버전에서 어떤 방식으로 진화했는지 직접 Colab에서의 코딩 작업을 통해 살펴보도록 하자. 1 !pip install tensorflow==..

구글 Colab 노트북 사용법

컴퓨터 코딩을 다루다 보면 흔하게 접하는 용어로서 Front end 와 Back end 가 있다. 컴퓨터 코딩에서 Front end 란 코드를 작성 수정 빌드 업로딩 저장 및 라이브러리 설치를 지원하기 위한 편집 시스템을 뜻한다. 간단한 예로서는 아두이노 IDE를 들 수 있을 것이다. 마찬가지로 머신 러닝을 위한 코드 편집 작업을 위해서는 이미 잘 알려진 툴이 있다. 너무나 잘 알려진 아나콘다를 비롯하여 여러 가지 툴이 있을 수 있다. 특히 아나콘다에는 Spyder 편집기와 Jupyter Notebook 이 대표적이다. 반면에 Back end 는 일종의 Solver를 뜻한다. TensorFlow, Keras, PyTorch 와 같은 라이브러리들이 머신러닝을 위해 Front end에 설치되는 대표적인 Ba..

다층신경망(multilayer neural network) 확장

이 그림은 퍼셉트론 네트워크 구조를 나타낸다. 입력항 xi 가 가중치 wi 를 적용한 후 편향 값을 반영하여 y 가 연산되며 y 에 대해 문턱값 처리 후 출력이 일어난다. 생체 내에서는 다수의 뉴론들이 엮여있는 것처럼 이러한 단위 뉴론 구조를 어떻게 복합적으로 직병렬 연결할 것인지 고려해보자. 이 그림에서는 입력데이터가 복합적으로 처리되는 신경망 사례를 나타낸다. 실제로 MNIST 수기문자 판독을 위한 단일 레이어 머신러닝 코드 작성 시 하나의 문자 28X28=784 이미지 데이터는 1X784 리스트 데이터로 표현되며 이에 상응하는 가중치 매트릭스는 784X10 리스트 데이터 구조로 사용됨에 유의하자. 단일 레이어 신경망을 아래와 같이 2단 구조로 확장해 보자. 2단에서는 bias(바이어스, 편향) 항을..

라벨값 암호화 설정과 One Hot Code

이진 분류(binary classification) 예제에서 입력 데이터에 대한 단위 신경망의 출력은 판별이 가능하도록 라벨값을 “1” 과 “-1”( 또는 “0”)로 설정된다. 따라서 학습과정에서는 주어진 학습데이터인 라벨값에 맞춰 Cost 함수의 Gradient Search 기법을 성공적으로 적용하면 학습 결과 가중치(weight)가 결정된다. 2종류 이상의 분류(classification)를 위한 종류 수가 많아지게 되면 머신러닝 작업을 위한 적절한 암호화 표기 체제가 필요하게 되며, 그 대표적인 사례가 one hot 코드이다. MNIST 예제에서는 0~9까지의 10종류 수기문자를 분류해야 하며 위 표와 같은 one hot 코드가 사용된다. 10 종류의 서로 독립적인 클라스를 표현하기 위해서는 10 ..

word2vec, CBOW (Continuous Bags of Words)

참조: ”Deep Learning from Scratch ⓶: 밑바닥부터 시작하는 딥러닝2“, 3장 word2vec, pp.113 ~ 141., 사이토 고키 지음, 한빛미디어. 분산가설에 따른 통계적 기법과 달리 신경망 학습법을 사용하는 추론적 방법 즉 word2vec 알고리듬에 대해서 살펴보자. word2vec 알고리듬에서는 인접한 맥락(문맥, context)이 주어져 있을 때 무슨 단어가 가장 적합할지 추론하는 알고리듬이다. 즉 맥락이 주어진 상태에서 ? 에 적합한 단어를 단어장에서 확률적으로 가장 높은 확률값을 가지는 단어를 찾아내는 작업이다. 맥락으로 주어지는 입력 단어들은 숫자 라벨 값을 가지고 있는바 이들을 one-hot 코드화 하여 사용하면 편리하지만 통계적 방법에서 동시발생 매트릭스처럼 그..

자연어처리 2023.01.03

Simple Bow 알고리듬에서의 Back-propagation of Matrix Multiplication

다음 그림의 Simple CBOW 알고리듬에 의한 알고리듬을 살펴보면 입력 데이터의 은닉층 처리와 출력층 처리에 Matrix Multiplication 처리가 핵심적인 역할을 담당한다. Simple CBOW 알고리듬 학습과정 알고리듬을 코딩하려면 MatMul층에 대한 순전파(forward propagation)와 역전파(back-propagation) 연산이 필수적일 것이다. 순전파 연산은 메트릭스의 곱셈과 덧셈 연산을 이해하면 쉽게 코딩이 충분히 가능하지만 다층 구조에서 역전파는 합성함수의 편미분 값들을 체계적으로 연산할 필요가 있다. 머신러닝에서 역전파 연산의 필요성은 웨이트 값들을 랜덤한 값으로 초기화하므로 Cost 함수가 취해야 할 최소값과는 큰 차이가 있다. 이러한 차이를 줄여 학습을 통해 Co..

자연어처리 2023.01.03