OpenCV 는 이미지 처리에 도움

 

yolov5 설치시 이미 같이 설치됨 원래같으면 설치 해야함

이미지 불러오기

이미지 띄우기 - 2가지 방법

  • matplotlib 사용

  • 이미지가 파란 이유 ? matplotlib 에선 이미지를 BGR로 이미지를 읽지만 불러올때는 RGB로 가져왔기 때문
  • img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
    • 이미지를 변환해줌

  • 흑백 변환시

 

  • 이렇게 opencv 로 이미지를 띄우면 번거롭다는 의견
  • 이미지의 0,0은 와측 상단이다

img = cv2.imread('cat.1502.jpg')
# 사각형 그리기
# 50, 70
# 250, 300
# 이미지, 좌상단좌표, 우하단좌표, 색상, 선크기
cv2.rectangle(img, (65,85), (245,280), (0,0,255), 3)
cv2.imshow('cat',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

이미지에 글자 넣기

 

 

 

 

영상 띄우기

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 특성추출부와 분류부가 있는데 
  • 특성추출부만 사용할 것이다
    • 잘만들어진 특징을 잘 추출하는 모델의 특징 추출부만 가져옴
  • 분류부를 사용하지 않는 이유
    • 추출된 특징으로 사자와 호랑이를 

 

 

 

 

1등이 구글넷

2등이 VGG넷인데

2등 모델을 사용할 것이다

가벼워서

 

 

 

 

 

 

다른사람이 만든 모델의 특징추출부 가져오기

 

 

 

 

conv_base.summary() - 층 확인하기

 

 

 

 

 

 

우리가 할 수 있는건 Classification 은 할 수 있고, 

 

이제 할 건 Object Detection 이당

 

 

  • Yolo 모델 사용 (객체 탐지 모델)

 

위치 탐지

범위

거리파악 가능

 

  • 제일 어려운게 데이터 준비

 

 

우리가 앞으로 해야할 순서

  1. roboflow > 이미지 라벨링 사이트 > 1시간 30분
  2. 코랩에서 YOLO 학습하기 > 2시간
  3. jupyter notebook 에서 학습한 모델 사용해서 객체 인식하기(OpenCv) > 2시간

 

이미지라벨링 할 수 있는 사이트

  • 가입하기

 

 

 

 

 

 

 

두개 입력하고 create 

 

 

 

 

 

고양이 0~99 까지 총 100장 드래그 앤 드랍

강아지도 100장 옮기기

총 200장이 됨

 

save and Continue 클릭

 

오른쪽 하단 Assign Images 클릭

'

Start Annotating 클릭

200당 해주기

뒤로가기

 

 

 

 

 

 

 

 

 

 

 

 

 

 

완료 화면

 

 

이화면이 나옴

터미널로 이동해서

코드 복사

 

 

 

새노트 생성

 

 

 

 

 

 

 

 

이미지의 위치를 나타내는 정보

0~1까지의 숫자

 

  1. 0 : 첫번째는 클래스
  2.  0.41171875 0.28125 0.55625 0.47109375 : 객체위치

가로 600 세로 450

 

 

데이터에 대한 설명

클래스 몇개인지

클래스 이름은 무엇인지

 

mv 명령어

  • 여러가지 매개변수를 받을 수 있다
  • 맨 마지막 /content/dataset 인 곳에 앞에 파일을 다 집어넣는다

 

  • yolo를 학습시키기 위해 train.py 파일 실행시킬것임
  • data.yaml 에 있는 데이터셋 정보를 알려줌
  • 여기 있으니 알아서 사용해
  • train : train 데이터 경로 (각 파일마다의 경로) 가 적힌 파일
  • train : content/dataset/train.txt 파일을 만듬

 

 

 

valid 도 똑같이 바꿔주기

 

 

이미지 경ㄹ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'수업 > 딥러닝' 카테고리의 다른 글

[10일차] OpenCV  (0) 2023.05.24
[딥러닝] 7일차 - 이미지 데이터 학습, 데이터 확장  (0) 2023.05.17
[딥러닝] 6일차 - cnn  (0) 2023.05.15
[딥러닝] 4일차 -  (0) 2023.05.10
[딥러닝] 3일차 - 다중분류 실습  (0) 2023.05.09

데이터 구글 드라이브에 옮기기

 

시간 좀 걸림

 

데이터를 확인해 보면 

 

개와 고양이 사진 데이터

  • train : 각 1000장 총 2000장
  • validation: 각 500장 총 1000장
  • test: 각 11장 총 22장

하나의 픽셀에 0~ 255 사이의 값이 하나 들어있음

흑백 (Gray) = 500 * 500 

컬러 (RGB) = (500 * 500 ) * 3

  • 이미지 학습이지만 실은 숫자 데이터 학습이다
  •  이미지 파일 받아오기(0 ~ 255 사이의 숫자로 이루어짐)
  •  해야할 일
    • 1. 한 변수에 전체 이미지 담기
    • 2. 크기 동일하게 만들어주기 (150, 150) (사진마다 크기가 제각각이기에)
    • 3. 라벨링
    • 4. 0 ~ 255(정수) > 0 ~ 1 (실수) > 분산을 줄이자
      • => 이대로 사용하면 문제가 발생 숫자가 큰게 더 중요한 걸 까 라고 생각할 수 있음
      • 때문에 의도와 다른 많은 가중치를 부여할 수 있음

 

이미지 데이터를 숫자화 시켜주는 라이브러리

 

 

 

 

 

런타임 끊겼다 다시 실행

 

 

특징 추출 부

  • conv 와 pool 은 한쌍이다 

 

분류부

 

학습방법 설정

 

학습

  • 입력층에서는 학습할게 많아서 오래걸리고 그 후부터는 빨라짐

 

  • 과대 적합이 발생

 

과대적합 시각화

 

 

컴퓨터가 특징을 찾는 방법

 

 

 

 

  • 데이터 수의 증가 -> 1000장 -> 10000장으로 늘리는 방법
    • 한계가 있기에 증가는 조금 어렵고 확장을 시켜본다.

 

 

데이터의 확장

  • 기존의 데이터를 변환해서 사용한다
  • 확장전의 데이터도 가지고 있다.
  • 기본기같은 느낌
  • 확장 전의 데이터로도 학습이 잘 되었으면 확장을 안해도 된다

 

순서는

  • 기본데이터로 먼저 학습
    • 결과가 좋다 -> 바로 사용
    • 결과가 안좋다 -> 확장데이터로 추가학습

 

 

모델 저장 방법, 모델 불러오기

  • 코랩 연결이 끊겼을 때 모델 날라간 경우 ㅠ
  • 혹시 모르니 저장해 놓자

데이터 확장 기능 추가

확장된 기능
기존 기능

 

  • 데이터가 없는 부분은 저렇게 주변의 데이터로 채움

 

 

 

과대적합 피하는 층 쌓기

  • 학습 할 때마다 특정 층들만 사용
  • 사용할 때마다 전체가 아닌 골라서 사용함
  • 특정 노드에 가중치가 몰리는 현상을 완화시켜줌

  • 30 % 는 사용하지 않음

단점

  • 학습할 때 속도가 느려짐
  •  

다음 시간은 전이학습 배울 예정

  • 다른 사람이 많은 데이터로 많은 층으로 잘 학습 시킨 모델 가져와서 약간 수정하고 사용하기

 

https://huggingface.co/models

 

Models - Hugging Face

 

huggingface.co

 

 

다른 사람이 만든 모델 올려놓는 사이트 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'수업 > 딥러닝' 카테고리의 다른 글

[10일차] OpenCV  (0) 2023.05.24
[딥러닝] 8일차 - 다른사람이 만든 모델 (cnn)  (0) 2023.05.18
[딥러닝] 6일차 - cnn  (0) 2023.05.15
[딥러닝] 4일차 -  (0) 2023.05.10
[딥러닝] 3일차 - 다중분류 실습  (0) 2023.05.09
  • 이미지에서 특징추출
  • 추출된 특징만을 통해서 어떤이미지인지 판단
  • 사람도 어떠한 부분적인 걸로 판단한다.

 

 

모델의 구성

 

기존

  • Dense 층 : MLP= 멀티레이어퍼셉트론
    • 분석하는 역할
    • 1차원만 가능

CNN 

  • input -> conv -> pool
  • conv, pool 층이 추가됨
  • 특징 추출 부 
    • 특징추출 역할
    • conv (컨볼루젼)
      • 특징찾기
      • 1층에서는 크게 보이는 특징 찾음
        • 뾰족한 귀, 눈, 입, 존재성
      • 살아남은 특징중에서 다음층 conv 에서 찾는다.
        • 좀더 세부적인 모양 - 입의 길이,
      •  
    • pooling
      • 특징아닌것 삭제
  • 분류 부
    •  Dense
      • 나온 특징들로 분석

제일먼저 찾는 눈에 보이는 큰 특징

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

수업정리

  • 다중분류
    • 각각 클래스별로 확률을 내어 결과를 도출해 내는 것
    • 확률정보로 학습시키기 위해서 원핫인코딩으로 만든다
  • Flatten 
    • 2차원을 고려하지 못함
    • 2차원인 데이터들을 1차원으로 펴줘야 수식을 세우고 계산을 할 수 있다
    • 가중치만큼 계산을 해내는 것 뿐이다
    • 위치는 입력층 뒤에 은닉층 전에 쌓아준다.
  • sigmoid
    • sigmoid는 0과 1을 절대 벗어나지 않는 값만 도출해 낸다
    • 이진분류나 회귀에서 사용됨
  • softmax
    • 모든 클래스의 확률을 구하고 그 모든 확률 값의 합이 1이 되게 만든다.
  • categorical_crossentropy
    • loss함수이다
    • loss함수로 binary_crossentropy는 둘중 하나를 봄 -> 이진분류
    • 다중분류시 사용
    • 모든 클래스에 대해서 봐야하기 때문에 사용

 

 


수업시작

 

 

경사하강법

  • 좋은 W를 찾고싶어서 나온 방법
  • loss(손실)값이 낮은 모델을 찾는게 목적
  • 어디에 가야할 지는 알았는데 어떻게 가야 좋을까?
  • 가만히 있으면 해결이 되지 않는다
  • 실패도 경험이다
  • 기울기가 0인 지점을 찾자
  • 가중치를 조금씩 바꿔가며 기울기가 낮아지는 방향으로 나아가는 것
  • 지역 최적점에 빠진다.
  • 글로벌 미니멈을 찾아야한다
  • 중간지점에서 낮은 지점을 찾은 것을 로컬 미니멈이라고 한다.

 

확률적경사하강법

  • 경사하강법
    • 너무 오래걸리고 제대로 찾아가기가 어렵다
    • 실제로 대입해봤을 때 성능이 별로 좋지가 않다.
    • ex - 100개 중 100개
    • 모든 과목을 전부다 공부
  • 확률적경가하강법
    • 랜덤하게 몇개만 선택을 해서 나아가자
    • ex - 100개 중 30개
    • 불안정 적이긴 하지만 
    • 과목중 골라골라서 효과적으로 공부
    • 지역 최적점을 빠져나갈


모멘텀

 

  • 관성이라는 개념을 도입

 

네스테로프 모멘텀

  • 다음 스텝까지 고려해서 실제 t+1에 반영하여 업데이트
  • t+ t+1
  • 다 똑같은데 미분할 때 m
  • 불필요한 이동울 줄이는 방법

 

 

아다그리드

  • 학습률 감소 방법을 적용
  • 어차피 머니까 학습률이 초반엔 커도 된다. 어차피 랜덤 값은 최적값과 멀테니까
  • 0에 가까워지면서 학습률을 줄여나가며 0을 최대한 지나치지 않게 한다.
  • 각각의 퍼셉트론마다 다르다.

경사, 학습률, 관성에 초점을 맞추는 방법들이 있다

 

 

 

  • 모든 데이터검토하여 방향을 찾자
  • 조금씩 데이터를 샘플로 검토하여 방향을 찾자
  • 관성 개념을 도입해서 가자
  • 다음스텝고려
  • 학습률을 고려
  • adadelta는 너무 작아지지는 않도록 방지해보자
  • RMSProp는 상황을 보며 세밀해 지는정도를 정해보자 비율과 기울기를 고력
  • Adam 경사와 학습률 둘다 고려

 

 

오차역전파

  • 가중치(weight)와 편향(bias)의 값을 학습하기 위한 알고리즘
  • 학습은 두가지로 나눠짐
    • 순전파 : 전파가 원래방향대로 감
      • 출력값을 찾아가는 과정 -> 추론
    • 역전파 : 역으로 전파를 시킴
      • 최적의 학습 결과를 찾아가는 것 -> 학습

 

순정파

  • 계산만 한 것
  • 아무 w나 붙인 것

 

역전파

  • 에러정보를 가지고 w들을 수정시킨다 그전에 있는 층이 수정이 됨
  • w가 데이터를 이해하려고 
  • 출력층에서 입력층 쪽으로 전파

 

1epoch 는 순전 역전을 한 번씩 한 것

 

 

시그모이드 함수의 문제점

  • 경사가 사라짐 -> 기울기 소실
  • 계산할 기울기가 없다
  • 기울기가 0이되어야 하는데 미분 사용
  • 시그모이드를 통해서 0~1사이 값이 나오는데 미분시켰더니 아래 파란선이 나온다.
  • 파란선 - 최대가 너무 낮음 0.25

 

기울기 소실

역전하면서 학습 할 때 기울기가 0이 되는 방향으로 가는데 찾는 방법은 미분을 해야한다

하다보니 미분을 할 수 있는 기울기 조차 사라져 버림

더이상 수정할 수가 없다

  • 이를 해결하기 위해 다양한 역전파 방법들이 생김

 

 다양한 역전파 방법

  • tanh
    • 하이퍼블릭 탄젠트 - 2배씩 늘려서 -1~1 로 잡음
  • ReLU : 현재 많이 쓰고 우리도 사용한다
    • 양수면 값을 살려두고 음수면 죽인다.
  • Leaky ReLU
    • 음수를 어느정도 조금 남겨 놓는 것
  • Maxout
    • 최대값을 살려놓는것
    • GAN이라는 모델에 적합
    •  
  • ELU
    • Leaky ReLU를 좀더 완만하게 만든 것
    • 학습량이 많고 연산이 복잡한 경향이 있다

 

 

새노트

회귀

  • loss = MSE(평균제곱오차)
  • 맨 마지막 (출력층) 뉴런 개수 : 1
  • 활성화 함수 : linear(항등함수) / Default 임

이진분류

  • loss = binary_crossentropy
  • 맨 마지막 (출력층) 뉴런 개수 1
  • 활성화 함수 : sigmoid

다중분류

  • loss = categorical_crossentropy
  • 맨 마지막 (출력층) 뉴런 개수 : 클래스 개수
  • 활성화 함수 : softmax

 

 

fashion 데이터 분류

 

흑백화

 

 

다른방식으로 설계

모델 설계는 항아리 모양으로 하는게 좋다.

 

  • 너무많은 퍼셉트론에서 갑자기 10개로 줄여버리면 뚝끊긴 느낌이니 잘 조절해 준다.
  • 모델학습이 끝난

 

모델 저장

  • 학습이 끝난 모델을 저장할 건데
  • 경로부터 이동해준다

  • 옮겨진 경로에 저장하기

  • 구글 드라이브 연동 해서 들어가보면 저기 빨간박스 부분에 모델이 저장되어있을 것이다.

여기에 저장이 된다

 

 

모델 불러오기

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

수업정리

 

  • 뉴런에서 역치라는 개념을 가지고 있다
  • 역치이상이어야 다음 뉴런으로 넘어갈 수 있다.
  • 사람의 뉴런을 구현하고자 선형모델로 만들었다
  • 퍼셉트론의 개념
    • 현재 딥러닝의 가장 작은 단위를 제안
    • 신경세포에 가중치를 모두 곱하고 합한 것을 y값을 도출해 냄
    • 하나의 y값이 반환되면 다시 활성화함수를 만나
    • 활성화 함수로써 시그모이드를 만나면 y가 100이던 1000이던 0과1로 만들어냄
    • 활성화함수로 기존에는 계단함수로 시작하였으나 현재는 잘 쓰지 않는다 -> 시그모이드를 사용
    • XOR문제가 발생 
      • 이런 간단한 것도 풀지 못함
      • 선 하나만으로는 해결이 안되었음
      • 여러층을 쌓음으로써 해결됨
      • 하나의 퍼셉트론으로는 해결되지 않았던 문제가 해결됨
  • Dense 말고도 연산가능한 신경망을 붙인다.

CNN 과 RNN 이용하여 층을 쌓아서 모델을 만들어볼 예정

  • 맨 처음과 맨 끝은 신경을 많이 써줘야한다.
  • 입력층
    • 데이터가 가장 먼저 만나는 층
    • 데이터하나의 크기 (컬럼 수)
  • 출력층
    • 예측값이 나오는 층
    • 예측값이 몇개가 나올지
    • 활성화 함수는 뭘 써줘야할 지
  • 은닉층
    • HIDDEN LAYER
    • 중간층
    • 층을 몇개를 쌓든지..

  • W는 서로 다른 가중치를 가지고 있다
  • 각각의 퍼셉트론 들이 각자 다른 학습을 한다.
    • 가중치가 전부 다르다
  • 퍼셉트론마다 만나서 나온 예측값이 다 다르다.
  • 그 예측값으로 다음 퍼셉트론을 만나 학습데이터(재료)로 사용된다.
  • 퍼셉트론은 이전 층의 퍼셉트론 예측값+절편 만큼 학습 재료로 쓰인다.
  • 회귀와 이진 분류는 하나의 예측값만 나온다.
  • 입력층은 이전퍼셉트론이 없어서 입력데이터 개수를 알려주는게 필요하다.
  • 다층 퍼셉트론
    • 비선형 데이터를 분리할 수 있음
    • 학습 시간이 오래걸린다.
    • 가중치 파라미터가 맣ㄴ아 과적합 되기 쉽다
    • 가중치 초기 값에 민감하여 지역 최적점에 빠지기 쉽다
      • 지역 최적점 : 전역 최적점이 있는데도 불구하고 지역 최적점에 머무르는 현상

 

  • 딥러닝은 내가 직접 모델을 설계한다
  • 직접 평가방법을 설정
  • 유방암 분류 데이터는 이진분류 데이터셋이다.
    • 활성화 함수로 시그모이드 사용

 

 


 

 

수업시작

 

 

다중분류

  • 텐서플로우의 학습용 데이터 사용 

  • 어떤식으로 내장 되어 있나?

아무런 정보가 안들어있는 데이터들로만 이루어진 데이터이다.

 

data -> train, test -> X_train, y_train, X_test, y_test

 

 

공식문서에서 확인가능

  • 문제데이터로는 28 x 28 데이터가 60000장이 있다.
  • 숫자들의 모음이라 볼 수 있다.
  • Numpy 배열로 저장되어있다.
  • 정답은 10가지로 구성되어있음
    • 0~9로 분류 -> 다중분류
  • 흑백은 2차원 컬러는 2차원이 3장이 붙은 3차원
  • 컬러이미지는 1차원이 더 붙는다.
  • 28뒤에 3이 붙는다 -> R,G,B 의 수치값 
    • 60000, 28, 28 , 3

 

X_train[5999] - 한장의 이미지 데이터 28 x 28 구조

 

0101 데이터를 이미지로 시각화

  • 흑백이미지인데 왜 색상이 나오나?
    • -> 맷플러립에서 사용하는 색상 컬러 체계가 있는데 가장 기본적으로 정해져 있는 게 보라에서 노랑이다
    • 원래 흑백은 흑에서 백으로 가지만 맷플러립 기본 체계는 0에가까운 색은 보라색 1에가까운색은 노란색이다.
  • 다른색상 체계로 변경해주고싶으면 cmap파라미터 사용

 

라벨 종류 확인

  • 편향된 학습은 좋지 않다.
  • 분류면 몇개씩 구성되어있는지 확인하는게 매우중요하다!

 

라벨 빈도수 확인

 

데이터 빈도수 시각화

  • 검정부분에 많은 값이 몰려있고, 하얀 색은 별로 없는 편
  • 배경색이 검정이기 때문에
  • 글씨를 쓰는 무게감 때문에 연한 하얀색이 나온다. 0과 255로만 존재하지 않는 이유

 

Flatten, to_categorical 

 

  • 0 ~ 9선택지는 10개이다 -> 예측을 해야하는 클래스가 10개
  • 어떤 확률로 0이라고 맞췄는지 3이라고 맞췄는지
  • 디테일한 학습을 통해서 일반화 된 모델을 만들 수 있다.
  • 답체크만하는게 아니라 어떤 확률로써 2라맞춘건지, 3이라 맞춘건지
  • 결론적으로 분류는 확률적으로 학습시키는게 중요하다
  • 전체 데이터에서 (10가지중) 4일 확률 5일 확률, 정답데이터를 확률 정보로 변경하여 각각의 데이터에 대해서 확률로 반환하게 만들기
  • 원핫인코딩이 확률 데이터표현이라 볼 수 있다.
  • 모델은 예측값으로 100% 0%로 학습된다

학습할 때도 예측해야할 값으로 확률 정보로 학습한다.

반환도 확률 값으로 나오게

 

 

to_categorical() 사용하여 원 핫 인코딩(확률)

다중분류 출력층의 units 수 - 정답 예측클래스의 수

softmax 활성화 함수 (출력층 활성화함수)

 

  • 마지막 출력 층의 활성화 함수로 softmax => 확률 값으로반환 
    • 출력층에 있는 10개의 퍼셉트론들마다 확률 값이 나오는데 다 더하면 총 합이 1이되도록 맞춰줌 -> 정규화 작업
    • [0.1, 0.4, 0.3, 0.2]  -> 1번모델
    • [0.1, 0.7, 0.1, 0.1]  -> 2번모델
      • 위 두개의 결과를 내는 각각의 모델중 2번 모델이 학습이 잘 된 케이스
      • 1번은 낮은 확률로 정답을 가려내는 모델이다.

softmax 모든 클래스별로 확률 정보를 뽑아준다.

 

 

Flatten 으로 펼쳐주기

  • 2차원을 1차원으로 펼쳐줌
  • 28 x 28이니 W1X1 ... W784X784 + b가 된다.

 

 

학습 모델과 평가지표

 

학습 결과 

 

시각화

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

수업정리

 

 

 

적대적 생성 신경망

  • GAN : 예측 추론을 떠나서 생성해버림 -> 논란이 많이 생김
    • Generative Adversarial Networks의 약자로 우리말로는 “적대적 생성 신경망”
    • 서로 다른 두 개의 네트워크를 적대적으로(adversarial) 학습시키며 실제 데이터와 비슷한 데이터를 생성(generative)해내는 모델
    • 비지도 학습 기반 생성모델로 분류
  • epochs
    • 학습 횟수 
    • 학습 : 최적화
  • 머신러닝은 사람의 개입이 들어감
  • 딥러닝은 사람의 개입이 거의 안들어감
  • 알아서 해준다고 딥러닝만 사용한다는 건 적합하지 않는다
    • 상황에 따라 머신러닝 모델을 선택할 지 딥러닝 모델을 선택할지 성능을 더 잘 낼 모델을 찾아야함
  • 딥러닝
    • 컴퓨터비젼, 음성, 
    • 복잡하고 많은데이터에 유용

 

 

 


수업시작

 

 

딥러닝 실습 (신경망 모델)

 

 

모델 만들기

# 신경망 구조 설계
model = Sequential() # 딥러닝 모델을 구성하는 뼈대, 층을 쌓을 수 있게 도와줌
# input_shape(한행의 데이터의 컬럼 수,
model.add( InputLayer(input_shape=(1,)) ) # 입력층
# Dense 인공신경 망, 마지막은 1로 맞춰줘야 한다.
model.add(Dense(units=9))     # 신경 세포 망
model.add(Dense(units=9))
model.add(Dense(units=1))     # 출력층

 

 

 

데이터가 들어오는 곳

데이터의 크기 알려줘야함

다중,이진분류인지, 회귀 인지에 따라 마지막 뉴런의 units 수가 달라진다.

회귀 일때 units = 1

 

 

학습방법 및 평가 방법 설정

# 2. 신경망 모델 학습(loss, optimizer)/평가(metrics)방법 설정
model.compile( loss='mean_squared_error',
              optimizer='SGD')

 

학습 및 학습과정 시각화와 히스토리에 담아주기

# 3-1. 학습 및 학습과정 시각화 / 히스토리 생성
studentHistory = model.fit(X_train, y_train, epochs=100) # epochs : 최적회 학습 횟수

 

히스토리를 시각화

 

 

모델평가

# 4. 모델 평가
model.evaluate(X_test,y_test)

test 결과와의 loss 값 차이가 많이 벌어졌다 -> 과적합 된 듯 하다.

 

 

 

 

퍼셉트론 개념

  • 딥러닝의 근간
  • 이진 분류를 수행하는 데 사용
  • 입력과 가중치를 곱한 값들의 합이 임계값(threshold)을 초과하는 경우, 출력으로 1을 반환하고, 그렇지 않은 경우에는 0을 반환
  • 인공 신경망의 초창기 모델 중 하나
  • 단층 퍼셉트론과 다층 퍼셉트론으로 나뉘어짐
  • 단층 퍼셉트론은 선형 분리 가능한 문제에 대해서만 작동
  • 다층 퍼셉트론은 여러 개의 은닉층을 포함하며, 비선형적인 패턴을 인식하는 데 사용

 

역치

  • 어떤 값이나 수준을 기준
  • 이진 분류(Binary Classification)에서 사용되는 중요한 개념 중 하나
  • 어떤 입력값이 주어졌을 때 그 값이 역치보다 크면 1을, 작으면 0을 반환하는 함수를 만드는 데 사용
  • 분류의 성능에 매우 중요한 역할
  • 모델의 정확도를 향상시키는 데 큰 영향을 미

  • 자극이 역치 이상이 되어야 다음뉴런에게 전달이 되는 개념

 

 

  • 자극값을 다음 뉴런에게 넘길 지 말지 판단하는 활성화 함수 가 추가됨 (activation) 

  • 활성화 함수로 시그모이드 사용한 예시

 

 

  • 예측값이 활성화 함수를 만나야 다음 신경망으로 전달이 된다.
  • 예측값은 다음 뉴런층의 데이터값이 된다.

 

선형함수 모델과 활성화 함수까지 만나야 하나의 퍼셉트론이다.

선형함수 + 활성화함수 = 퍼셉트론

 

 

 

계단함수 

  • 계단함수이다.
  • 맨 처음 도입된 함수이지만 별로 좋지 않아서 지금은 쓰지 않는다

 

 

  • 영향력은 W 에 의함

 

XOR 이라는 문제가 생긴다.

 

 

둘다 True 여야 1이 나온다.

 

 

하나라도 1이면 1

 

둘다 같은 값이면 0

둘의 값이 달라야 1

 

이 문제점을 해결한 게 다층 퍼셉트론

 

 

 

 

 

 

 

 

 

유방암 데이터셋 분류 ( 이진분류 )

 

 

모델링

  • activation='sigmoid'
    • activation : 활성화 함수는 인공 신경망의 출력 값을 조정하는 함수
    • 'sigmoid' 함수는 입력 값을 0과 1 사이의 값으로 제한하는 함수
    • 이진분류 문제에서 자주 사용
  • 'validation_split = 0.2'
    • 전체 학습 데이터를 학습용 데이터와 검증용 데이터로 나누는 비율을 8:2로 설정
  •  Adam
    • RMSProp와 Momentum을 결합한 알고리즘으로, 지수 가중 이동 평균과 모멘텀을 이용하여 가중치를 업데이트

 

오차 확인

정확도 확인

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'수업 > 딥러닝' 카테고리의 다른 글

[딥러닝] 7일차 - 이미지 데이터 학습, 데이터 확장  (0) 2023.05.17
[딥러닝] 6일차 - cnn  (0) 2023.05.15
[딥러닝] 4일차 -  (0) 2023.05.10
[딥러닝] 3일차 - 다중분류 실습  (0) 2023.05.09
[딥러닝] 1일차  (0) 2023.05.02

 

 

 

딥러닝 개요

 

 

  • 통틀어서 인공지능이라 한다
  • 기계학습 - 사람을 흉내내게 한다.
    • 학습을 시켜서 사람이 하는 일을 하게 해보자
  • 인공세포를 네트워크화
  • NEURAL NETWORKS - NN

 

  • 기계는 학습결과를 둥근 자동차, 사고난 자동차 인경우 자동차가 아니다라고 결과를 낸다.

  • 기계보다 대상을 판단하는기준이 추상적이다.
  • 기계도 사람처럼 정확하진 않지만 좀더 추상적인 규칙에 따라서 도출하려는 학문이 딥러닝이다

  • 사람의 신경망을 모방 -> 병렬적 다층 구조를 통해 학습

 

 

뉴런이란? 

신경전달물질을 통해 신호를 전달하고 정보를 받아들이며 처리하는 역할
뉴런 내에서 신경전달은 전기적 신호로 전달,
뉴런 간의 신경전달은 시냅스를 통해 화학적 신호로 전달

 

 

  • 시각, 청각, 후각 등등 감각으로 들어온 정보신호로 판단(결과)를 내린다
  • 수많은 세포들이 연결 되어있음

 

딥러닝의 뉴런

하나의 뉴런 - 하나의 선형모델

 

  • 최초의 모델 ANN 
  • Perceptron 
    • 1957년에 제안한 초기 형태의 인공 신경망으로 다수의 입력으로부터 하나의 결과를 내보내는 알고리즘
  • XOR - 11=0, 00=0, 10=1, 01=1 
  • MLP
  • LSTM
  • CNN - 과적합 문제
  • Vanishing Gradient 가중치가 사라짐
  • SVM, Random forest
  • 마지막 Alphago 까지 등장

 

머신러닝에서는 사이킷런 모델 사용

딥러닝에서는 keras 모델, 텐서플로우 등 사용

 

 

 

GAN

  • 서로 경쟁하는 두 개의 신경 네트워크 시스템

최대한 진짜같은 모델을 만들어내는게 목적이다.

 

 

딥러닝 과정

  • 데이터를 입력
  • 학습
  • 예측
  • 실제값과 예측값의 오차
  • optimizer (최적화)
  • 에러가 최소화 될 수 있도록 알아서 조절해 나간다
  • 퍼셉트론, CNN, RNN 

 

기존의 머신러닝과 딥러닝의 차이점

  • 사람이 직접 특성을 선별하지 않아도된다.
  • 사람의 손을 타지 않는다.
  • 시각화도 필요없다.
  • 딥러닝 모델이 알아서 가중치 계산
  • 그럼 왜 머신러닝을 배웠나? 그 이유는... 밑에

 

  • 간단한 걸 사러 집 앞 편의점 가는데 트럭을 탈것인가 자전거를 살 것인가? => 자전거
  • 시간적 비용
  • 문제에 따라서 적절한 방식을 사용한다.
  • 가벼운 데이터 등 머신러닝 사용 적합

 

딥러닝 사용 적합 용도

  • 음성 데이터, 수백만개의 데이터 등 딥러닝 사용 적합
    • 컴퓨터 비젼(영상, 이미지 처리), 음성 인식, 자연어 처리, 신호처리 등의 분야에 적용

 

딥러닝 하면  Keras

  • 블록조립하듯이 조립
  • 직접 설계를 해야한다.
  • 머신러닝은 모델을 가져와서 사용만 했다면 딥러닝은 내가 쌓아서 모델을 만든다.
  • 원래는 텐서플로우가 있고 케라스가 있다
    • 케라스가 인기가 많아지다 보니 케라스가 텐서플로우를 가져와서 하위모델로 사용했다.
    • import tensorflow.keras 하는 것처럼

 

학습용 컴퓨터의 gpu가 따라주지 않아 구글에서 제공하는 코랩을 사용하여 실습해보자

 

colab 검색

 

 

새 노트 클릭

 

 

단축키 보기

 

 

 

데이터 다운로드 사이트

http://archive.ics.uci.edu/ml/datasets/Student+Performance 

Data Folder 클릭

 

student.zip 클릭하여 다운로드

 

압축 풀기

 

학생 성적에 대한 데이터이다.

student-mat.csv 사용

 

colab 에 외부파일 연결

  • 구글 드라이브에 데이터를 올리고 연동을 시켜서 드라이브에 파일을 업로드함

colab notebooks 폴더 들어가기

여기에 옮길 예정

파일을 드래그 앤 드랍 한다.

잘 들어간 것을 확인할 수 있다.

 

 

리눅스 명령어 사용가능

 

 

드라이브 마운트

 

연결하기

 

 

 

 

 

 

 

 

 

 

 

데이터 로딩

 

 

 

딥러닝은 선형 모델이 근간이고 기본 바탕이다

 

 

 

 

 

 

 

 

+ Recent posts