본문 바로가기

전체 글

(48)
(시작하세요! 텐서플로 2.0 프로그래밍) 9장. 오토인코더(AutoEncoder) 인코더와 디코더, 잠재변수 오토인코더(AutoEncoder)는 자기 자신을 재생성하는 네트워크이다. 오토인코더는 크게 인코더, 잠재변수, 디코더로 나눌 수 있다. 인코더는 지금까지 컨볼루션 신경망에서 봐왔던 특징 추출기와 같은 역할을 한다. 특징 추출기는 입력 이미지에서 특징을 추출해서 일차원의 벡터로 만들었다. 이 일차원의 벡터가 바로 잠재 변수이다. 잠재 변수에는 입력 데이터가 압축돼 있다. 이 압축된 데이터를 다시 해석해서 출력 데이터, 즉 동일한 입력 데이터로 만들어주는 것이 디코더의 역할이다. MNIST 데이터셋에 적용하기 데이터셋 불러오기 (train_X, train_Y), (test_X, test_Y) = tf.keras.datasets.mnist.load_data() print(train_..
(시작하세요! 텐서플로 2.0 프로그래밍) 8장. 사전 훈련된 모델 다루기(전이 학습) 좋은 성능을 보이는 네트워크는 수백개의 레이어를 쌓은 경우가 대부분이고, 레이어가 늘어남에 따라 네트워크를 훈련시키는 데 걸리는 시간도 증가한다. 다행히 연구자들은 자신이 만든 사전 훈련된 모델(pre-trained model)을 인터넷에 올려놓는다. 이렇게 얻은 모델을 그대로 사용할 수도 있고, 전이 학습(Transfer Learning)이나 신경 스타일 전이(Neural Style Transfer)처럼 다른 과제를 위해 재가공해서 사용할 수도 있다. 텐서플로 허브 텐서플로에서 제공하는 텐서플로 허브(TensorFlow Hub)는 재사용 가능한 모델을 쉽게 이용할 수 있는 라이브러리다. 텐서플로 허브 홈페이지(https://tfhub.dv/)에서는 이미지, 텍스트, 비디오 등의 분야에서 사전 훈련된 모..
(시작하세요! 텐서플로 2.0 프로그래밍) 7장. 순환 신경망(RNN) 순환 신경망의 구조 RNN은 일반적인 신경망과 유사하지만 되먹임 구조를 가지고 있다는 차이점이 있다. RNN을 통해 할 수 있는 것들 이미지를 입력했을 때 이미지에 대한 설명을 생성(Image Captioning) 문장의 긍정/부정을 판단하는 감성 분석(Sentiment Classification) 하나의 언어를 다른 언어로 번역하는 기계 번역(Machine Translation) 주요 레이어 정리 순환 신경망의 가장 기초적인 레이어는 SimpleRNN 레이어이다. 실제로는 SimpleRNN 보다 이것의 변종인 LSTM 레이어와 GRU 레이어가 주로 쓰인다. SimpleRNN 레이어 x는 SimpleRNN에 들어가는 입력, h는 출력, U와 W는 입력과 출력에 곱해지는 가중치이다. SimpleRNN 레이..
(시작하세요! 텐서플로 2.0 프로그래밍) 6장. 컨볼루션 신경망(CNN) 특징 추출 앞장에서 배운 보스턴 주택 가격 데이터셋에는 주택의 가격을 예측하기 위한 주택당 방의 수, 재산세율, 범죄율 같은 특징(feature)들이 있었다. Fashion MNIST 같은 이미지 데이터에서는 특징을 직접 찾아야 한다. 과거의 비전 연구에서는 특징을 연구하기 위한 다양한 방법이 개발되었다. 예를 들어 SIFT 알고리즘은 이미지의 회전과 크기에 대해 변하지 않는 특징을 추출해서 두 개의 이미지에서 서로 대응하는 부분을 찾아낸다. 이런 특징 추출(Feature Extraction) 기법 중 하나인 컨볼루션 연산은 각 필셀을 본래 픽셀과 그 주변 픽셀의 조합으로 대체하는 동작이다. 아래 그림에서는 3*3 크기의 작은 필터는 왼쪽의 원본 이미지를 각각 새로운 이미지로 변환한다. 각 필터의 생김새..
(시작하세요! 텐서플로 2.0 프로그래밍) 5장. 분류(Classification) 이항 분류 이항분류는 정답의 범주가 두 개인 분류 문제이다. 여기서는 와인의 당도, 산도, 알코올 도수 등의 데이터를 통해 레드인지 화이트와인인지 구분하도록 하겠다. 데이터셋 불러오기 캘리포니아 어바인 대학에서 제공하는 와인 데이터셋을 불러온다. import pandas as pd red = pd.read_csv('', sep=';') white = pd.read_csv('', sep=';') print(red.head()) print(white.head()) #---------------------출력---------------------# fixed acidity volatile acidity citric acid ... sulphates al..
(시작하세요! 텐서플로 2.0 프로그래밍) 4장. 회귀(Regression) 선형 회귀 선형회귀(Linear Regression)는 데이터의 경향성을 가장 잘 설명하는 하나의 직선을 예측하는 것이다. 데이터 준비 아래 코드는 지역의 인구 증가율과 고령인구비율의 자료이다. import matplotlib.pyplot as plt population_inc = [0.3, -0.78, 1.26, 0.03, 1.11, 15.17, 0.24, -0.24, -0.47, -0.77, -0.37, -0.85, -0.41, -0.27, 0.02, -0.76, 2.66] population_old = [12.27, 14.44, 11.87, 18.75, 17.52, 9.29, 16.37, 19.78, 19.51, 12.65, 14.74, 10.72, 21.94, 12.83, 15.51, 17.14,..
(시작하세요! 텐서플로 2.0 프로그래밍) 3장. 텐서플로 2.0 시작하기 기본적으로 코드들은 코랩에서 실행한다. 텐서플로 2.x 버전 가져오기 try: %tensorflow_version 2.x except Exception: pass import tensorflow as tf print(tf.__version__) # 2.4.1 난수 생성 같은 확률로 난수 생성 rand = tf.random.uniform([1], 0, 1) # tf.random.uniform(shape, 최소값, 최대값) print(rand) # tf.Tensor([0.6305238], shape=(1,), dtype=float32) 정규분포로 난수 생성 # 정규분포로 난수를 뽑음 rand = tf.random.normal([4], 0, 1) # tf.random.noraml(shape, 평균, 표준편차)..
(밑바닥부터 시작하는 딥러닝) 8장. 딥러닝 조금 더 깊은 신경망 다음 그림과 같은 조금 더 깊은 CNN을 만들어보고, MNIST데이터셋에 적용해본다. 네트워크 특징 3*3의 작은 필터를 사용한 합성곱 계층 층이 깊어질수록 채널 수가 늘어남 활성화 함수는 ReLU 완전연결 계층 뒤에 드롭아웃 계층 사용 Adam을 사용해 최적화 가중치 초깃값은 He의 초깃값 네트워크 코드 class DeepConvNet: """정확도 99% 이상의 고정밀 합성곱 신경망 네트워크 구성은 아래와 같음 conv - relu - conv- relu - pool - conv - relu - conv- relu - pool - conv - relu - conv- relu - pool - affine - relu - dropout - affine - dropout - softm..