실습 환경은 Python 3.6과 tensorflow 1.5이다. GAN (이미지 출처: Thalles Silva) 생성자(Generator)와 구분자(Discriminator)를 설정하여 대립적으로 작용하게 함으로써, 생성자가 더욱 진짜에 가까운 데이터(Noise -> Fake image)를 생성해내도록 하는 비지도학습 모델. GAN에 대한 예시를 들 때 빠지지 않는 설명이 이안 굿펠로우의 논문에 제시된 비유이다. 이 비유에서는, 생성자를 위조지폐를 생성하는 위조지폐범, 구분자를 경찰로 설정한다. 경찰이 위조지폐를 최대한 감별하려고 노력할수록, 위조지폐범 역시 더욱 정교한 위조지폐를 만들어내게 된다. 개인적인 생각으로는 보안 관리자와 해커 사이의 상호작용과도 닮은 것 같다. 보안 기술이 발전하고 암호화..
실습 환경은 Python 3.6과 tensorflow 1.5이다. 오토인코더(AutoEncoder) 정답이 주어지지 않고, 비슷한 데이터끼리 묶는 군집화에 주로 사용되는 비지도학습의 대표적인 신경망. 은닉층의 노드 수가 입/출력 계층의 노드 수보다 적다는 특징을 가진다. 그 이유는, 오토인코더가 데이터를 압축하거나 노이즈를 제거하는 데에 주로 사용되기 때문이다. 오토인코더로는 변이형 오토인코더(VA), 후자를 잡음제거 오토인코더(DA) 등 다양한 방식이 존재한다. 오토인코더 구현 역시 이번에도 MNIST 데이터셋을 이용한다. MNIST에 대해 잘 모른다면, 이전 포스팅을 참고하라. 2020/07/19 - [개발 일지/ML] - MNIST 학습 모델 만들기 MNIST 학습 모델 만들기 실습 환경은 Pyth..
실습 환경은 Python 3.6과 tensorflow 1.5이다. CNN(합성곱 신경망) 이미지 인식 분야에 주로 사용되는 신경망. 기본적으로 컨볼루션 계층과 풀링 계층으로 구성된다. 컨볼루션(합성곱) 계층 2차원 평면 행렬에서 지정된 윈도우의 값에 가중치와 편향을 적용해 하나의 값으로 압축하는 계층 한 윈도우당, 가중치는 윈도우의 크기와 같은 가중치를 곱해야 한다. 편향은 1개만 있으면 된다. ex) 28x28 입력층(이미지)에 대하여 3x3의 윈도우를 구성했을 때 필요한 최소 가중치의 개수는 3x3 9개, 편향의 개수는 9개이다. 왜 최소라고 적었냐면, 윈도우가 이동할 때 몇 칸씩 이동하냐에 따라 필요한 윈도우 개수가 달라지기 때문이다. 이 이동 범위를 우리는 스트라이드(stride)라고 부른다. 또..
실습 환경은 Python 3.6과 tensorflow 1.5이다. 드롭아웃(Dropout) 과적합(모델의 학습 결과와 학습 데이터가 너무 일치하여 이외의 데이터(테스트 데이터)에 대한 인식률이 떨어지는 현상) 문제를 해결하기 위해 등장한 기법. 학습 시 전체 신경망 중 일부만을 사용하도록 하여 가중치의 균형을 잡게 한다. 일반 학습 방법보다 학습 시간이 더 오래 걸린다는 단점이 있다. 모델은 이전 포스팅에서 사용한 MNIST 모델을 사용하였다. 2020/07/19 - [개발 일지/ML] - MNIST 학습 모델 만들기 MNIST 학습 모델 만들기 실습 환경은 Python 3.6과 tensorflow 1.5이다. MNIST 손으로 쓴 숫자 이미지를 모아 둔 데이터셋. 데이터가 잘 정제되어 있어, 학습자들에..
실습 환경은 Python 3.6과 tensorflow 1.5이다. MNIST 손으로 쓴 숫자 이미지를 모아 둔 데이터셋. 데이터가 잘 정제되어 있어, 학습자들에게 머신러닝 학습의 기초로 쓰인다. 1. 데이터셋 읽어 오기 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data # read MNIST data mnist = input_data.read_data_sets("./mnist/data/", one_hot=True) 다음과 같이 간단하게 데이터를 읽어올 수 있다. 2. 신경망 모델 구성 MNIST 손글씨 이미지는 28x28 pixel로 이루어져 있다. 즉, 784개의 특징(X)으로 이루어져 있다. label ..
실습 환경은 Python 3.6과 tensorflow 1.5이다. 텐서보드(tensorboard) 텐서플로우에서 제공하는 기본 도구이다. 텐서보드를 이용하면 손실값, 정확도와 같은 결과값을 시각화하여 확인할 수 있다. 텐서보드를 이용하기 위해서는 모델을 다음과 같이 세팅해야 한다. 1. 계층을 name_scope로 묶기 with tf.name_scope('layer1'): W1 = tf.Variable(tf.random_uniform([2, 10], -1., 1.), name='W1') L1 = tf.nn.relu(tf.matmul(X, W1)) 다음과 같이 tf의 name_scope 함수를 통해 계층을 묶고 이름을 붙일 수 있다. 이는 이후 텐서보드의 그래프에서 확인할 수 있다. 계층 뿐만이 아니라 플..