기본 입자는 표준 모형으로 일목 요연하게 정리된다. 이 이론의 놀라운 점은 지독하게 수학적이라는 점이다(대부분의 물리 이론이 수학적이다). 표준 모형을 통해 물리학자는 우주가 얼마나 수학적인지 다시 한번 깨닫는다. 
... 하늘과 바람과 별과 인간 중에서

 

1. 시작하면서

 

머신러닝을 공부하게 되면서 행렬과 미분이 알고리즘으로 사용된다는 것을 느끼면서, 전산의 역활이 과연 무엇일까 좌절 아닌 좌절을 하고 있을 때, 나름 위안을 삼았던 문구이다.. 

 

회귀분석에 사용되는 선형 방정식도, overfitting를 방지하기 위한 L2, L1 규제, 많은 데이타를 압축하기 위한 주성분 분석 등도 선형대수학에 나오는 개념들이다. 선형 대수학이 응용되는 사례는 그림1을 보자..

그림1. 선형대수학의 응용분야

 

혼자 공부하는 머신러닝/딥러닝을 공부하다가 나오다 마주치게 된 주성분 분석.... 목적은 차원 축소인데... 잘 이해가 안된다... 지금 보니 이해가 안되는 것이 당연하다.. 선형대수학의 마지막(??)에 나오는 이야기가 SVD 이다.. SVD를 이해하기 위해서는 소거법, 아이젠 벡터를 이해하고, 그것들이 단점을 이해해햐 하니....

 

그림 2는 선형대수학의 학습 순서이고, 이들의 제약사항이 기술 되어 있다. 우리의 데이타는 n*n도 아니고, 역치가 존재하지 않고, 대각행렬도 아닌 일반적인 데이타이니, SVD를 사용하게 된다... (...중간에 포기하지 마시라)

 

그림 2. 딥러닝을 위한 선형대수학

 

2. SVD의 응용 사례

3,024* 4,032Pixe의 데이타가 아래 그림과 같이 있다고 하자..

sigular vector를 1,2,4,8,16,32,64개 추가하였을때의 변화는 아래 그림과 같다.

  n=1 n=2 n=4 n=8 n=16 n=32 n=64
 

 

sigular vector가 64개이면 원본과 비슷하게 된다.

 

원본 그림 (A)는 3,024* 4,032의 크기인데... SVD로 분해하면.. 64*4,032 + 64 + 64*3,024로 줄어들게 된다... 와우!!!

(SVD 보면서 정말 감탄을 하였다당..)

 

그 어려운 SVD 계산도 ..라이브러리를 써서 한줄로 계산한다... 두번째 와우!!!

                            U, sigma, V = np.linalg.svd(imgmat)

#아무이미지를 블러오고
img = Image.open('oboe-with-book.jpg')

#gray로 변환하고
imggray = img.convert('LA')

#numpy mattrix로 변환하고
imgmat = np.array(list(imggray.getdata(band=0)), float)
imgmat.shape = (imggray.size[1], imggray.size[0])
imgmat = np.matrix(imgmat)

#SVD로 분해한다.
U, sigma, V = np.linalg.svd(imgmat)

# singlua vector를 늘려준다.
for i in [2, 4, 8, 16, 32, 64]:
    reconstimg = np.matrix(U[:, :i]) * np.diag(sigma[:i]) * np.matrix(V[:i, :])
    plt.imshow(reconstimg, cmap='gray')
    title = "n = %s" % i
    plt.title(title)
    plt.show()

 

그림생성하는 Stable Diffusion의 동작 원리도 Unet Step이 증가할 때마다 최초 노이즈에서 그림으로 완성이 되는데.. Step의 증가가 single vector가 추가 되는 것이 아닐까?? 개인적인 생각임다...ㅋ

https://jalammar.github.io/illustrated-stable-diffusion/

 

 

PCA의 활용은 차원 축소라 이야기한다.. 행렬의 직관적인 의미는 음... 숫자 하나가 소인수 분해가 되어.. 인수를 찾듯이.. 행렬도 인수분해한다.. 행렬의 성격에 따라, eigen value, sigluar value라는 값으로 인수분해한다... 인수 분해 해서.. 인수를 활용한다 정도의 의미를 부여하면 되지 않을까...

(eigen ,, 독일어로 성질의 뜻.. sigular 영어의 성질의 뜻 내포..)

 

수학은 참으로 일반적이고 어려운  학문이다.. 나처럼 목적이 뚜렷한 사람에게 그 용도를 한정시키면  수학이 필요하구나 느끼고 재미 또한 느끼게 된다. 또한...이 어려운 것을 처음으로 활용한 선구자를 존경까지 하게 된다..

 

3. 참고하면 좋을 자료

1. https://github.com/jonkrohn/ML-foundations

 

GitHub - jonkrohn/ML-foundations: Machine Learning Foundations: Linear Algebra, Calculus, Statistics & Computer Science

Machine Learning Foundations: Linear Algebra, Calculus, Statistics & Computer Science - jonkrohn/ML-foundations

github.com

선형대수 기본 개념과  numpy, 파이토치, tensorflow를 이용하여 설명을 해주는데... 강의 좋네요...나는 udemy로 수료

 

 

2. 개발자를 위한 실전 선형대수학

정리겸 보고 있는 도서

 

 

3. https://www.youtube.com/watch?v=fNk_zzaMoSs&t=6s 이것도 많이 추천을 하는군요..

3. https://angeloyeo.github.io/2019/09/08/LHopital_rule.html

 

로피탈 정리의 기하학적 의미 - 공돌이의 수학정리노트 (Angelo's Math Notes)

 

angeloyeo.github.io

 

4. 머신러닝·딥러닝에 필요한 기초 수학 with 파이썬 도서 코드

대학 교재도 번역본도 아닌 집필 도서가 3판까지 나왔다고 해서 보기 시작하고 있는 책

https://github.com/metamath1/noviceml

 

GitHub - metamath1/noviceml: 도서 머신러닝·딥러닝에 필요한 기초 수학 with 파이썬의 예제 코드와 그래

도서 머신러닝·딥러닝에 필요한 기초 수학 with 파이썬의 예제 코드와 그래프 그리는 코드 및 웹앱 저장소 - GitHub - metamath1/noviceml: 도서 머신러닝·딥러닝에 필요한 기초 수학 with 파이썬의 예제

github.com

 

https://velog.io/@data_buddha/series/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D%EB%94%A5%EB%9F%AC%EB%8B%9D%EC%97%90-%ED%95%84%EC%9A%94%ED%95%9C-%EA%B8%B0%EC%B4%88%EC%88%98%ED%95%99-with-%ED%8C%8C%EC%9D%B4%EC%8D%AC

 

velog

 

velog.io

 

5. 머신 러닝 관련 주제 정리글

(2)의 저자가 정리하고 있는 글 깔끔하게 정리한다.. 소스를 보면 어렵다..

 

https://github.com/metamath1/ml-simple-works

 

GitHub - metamath1/ml-simple-works

Contribute to metamath1/ml-simple-works development by creating an account on GitHub.

github.com

 

 

출퇴근 지하철에서 책 읽기는 eBook이 편하다. 책을 들고 다닐 불편함이 없다.

 

그럼에도 불구하고 작년에 사 둔 책을 들고 다니며 읽고 있다. 머릿말부터 공감을 하게 된다.

 

한 떄는 나만의 세계를 프로그램으로 구현하겠다는 당찬 야망...... 

 

요즘은 수학을 활용한 다양한 알고리즘을 보는 세계를 경험하고 있다.. 

 

똑똑한 분들(속으로는 놈들이라고 부르지만...)

 

'요즘 나는 > Books' 카테고리의 다른 글

혼자 공부하는 첫 프로그래밍(개정판)  (0) 2024.04.25
'23년 독서기록  (0) 2024.01.22

 

현재 스크린샷 폴더  속성 --> 위치 로 변경

 

 

 

'판다스 > Windows' 카테고리의 다른 글

Maria DB Cheat Sheet  (0) 2022.02.05
Youtube 다운로드  (0) 2020.07.07

 

폰트를 지정하는 두가지 방법

matplotlib에서 폰트를 지정하여 출력하는 하는 대표적인 방법은 크기 두 가지이다.

  1. 텍스트 출력시 폰트 특성을 지정: FontProperties 속성으로 폰트 속성을 지정
  2. 전역으로 지정: rcParams 을 사용하여 전역으로 설정값을 지정
  3. 폰트가 보이지 않으면 캐쉬 삭제한다.

1. FontProperties 속성

os마다 디렉토리 설정이 헷갈린다. 설치되어 있는 폰트위치를 확인하고 한글 폰트를 지정하는 법을 확인한다.

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
from mpl_toolkits import mplot3d
import matplotlib.font_manager as mfm

# 설치된 폰트 및 디렉토리 확인
font_list = mfm.findSystemFonts(fontpaths=None, fontext='ttf')
font_list[:10]

 

font-list에 대한 출력

['C:\\Windows\\Fonts\\micross.ttf',
 'C:\\Windows\\Fonts\\ERASMD.TTF',
 'C:\\Windows\\Fonts\\comic.ttf',
 'C:\\Windows\\Fonts\\H2PORM.TTF',
 'C:\\Windows\\Fonts\\HanSantteutDotum-Bold.ttf',
 'C:\\Windows\\Fonts\\couri.ttf',
 'C:\\Windows\\Fonts\\seguibli.ttf',
 'C:\\Windows\\Fonts\\BAUHS93.TTF',
 'C:\\Windows\\Fonts\\RAGE.TTF',
 'C:\\Windows\\Fonts\\Pyidaungsu-1.8.3_Numbers.ttf']

 

폰트 설정

# 구글 colab 환경일 경우 그래프에 한글 폰트 사용을 위한 설정
# path = 'noviceml/font/NanumBarunGothic.ttf'
# fontprop = mfm.FontProperties(fname=path, size=18)

# 로컬 환경일 경우 그래프에 한글 폰트 사용을 위한 설정
# https://financedata.github.io/posts/matplotlib-hangul-for-ubuntu-linux.html
# 아래 코드의 주석 제거 후 경로를 유저 컴퓨터의 폰트 파일 경로로 수정하세요.
# path = '/usr/share/fonts/truetype/nanum/NanumBarunGothic.ttf'
# fontprop = mfm.FontProperties(fname=path, size=18)

path = 'C:\\Windows\\Fonts\\NanumBarunGothic.ttf'
fontprop = mfm.FontProperties(fname=path, size=18)

 

폰트가 없다면...설

NanumBarunGothic.ttf
3.99MB

 

2. 전역으로 지정: rcParams 

font.family에 설정한다.

import matplotlib.pyplot as plt
from sklearn.tree import plot_tree

#font.family에 설정
plt.rcParams['font.family'] ='Malgun Gothic'

 

 

나에게 설치된 font.family는 어떤것이 있는지 확인하는 코드

import matplotlib.font_manager
from IPython.core.display import HTML

def make_html(fontname):
    return "<p>{font}: <span style='font-family:{font}; font-size: 24px;'>{font}</p>".format(font=fontname)

code = "\n".join([make_html(font) for font in sorted(set([f.name for f in matplotlib.font_manager.fontManager.ttflist]))])

HTML("<div style='column-count: 2;'>{}</div>".format(code))

 

3.폰트 캐쉬 삭제

폰트가 안보이면...캐쉬를 삭제해 보자..

import shutil
import matplotlib as mpl
print(f'캐시 디렉토리: {mpl.get_cachedir()}')
shutil.rmtree(matplotlib.get_cachedir())

[ 목차 ]

     

    1. 들어가기 전에

    시간은 빨리가도 월급날은 더디온다.. 혼공머신을 공부한 6주는 월급날 보다 더 긴 느낌이다. TT

     

    책장속에 책을 볼 때다. 책을 주문할 때의 열정은 어디 갔는지.. 봐야지 봐야지 생각은 있는데... 내일 봐야지 내일 봐야지... 미루 둔 것이 어언 2년이 흘렀다. 작년 23년 6월에 본 혼공학습단 모집... 선정이 되었지만... 안했다...아니 못했다..

    OO님, 혼공학습단 10기에 선정되신 것을 축하드립니다! 안내 사항을 확인해 주세요.

     

    연말에 다시 모집 메일을 보면서..... 미안하면서도 이 번에 꼭 끝내리라 ... 1번의 공수표는 있어도 2번은 없다.. 맘 속 다짐을 한다.

    [한빛미디어] OO님, 혼공학습단 11기에 오신 것을 환영합니다!

     

    2. 시작하기전 내 맘속의 다짐.

    다음 2가지를 꼭 실천하리라 다짐을 하고 시작을 하였다.. 

    • 토요일 까지 학습한 것을 Posting 한다...이를 위해서는 금요일 부터 시작해야 한다.
    • 쉴 때 못 쉬고,, 운동할 것 못하고,.. 시간을 내는 만큼 집중해서 보자..

    지금까지 일 하듯..큰 뼈대를 먼저 잡은 후에 세부적인 내용은 천천히 이해하는 방식으로 진행을 하였다..

     

    3. 공부 하면서 얻은 것  

    • 6번 금요일 또는 토요일 올리고.. 지각을 안했다!!!와우!!.... 아..나도 한다면 한다!!
    • 미션을 하기 위해서 책을 열심히 봤다. 잘 이해안되는 것은 인터넷을 활용하여 어느 정도 이해가 될 수 있었다.
      • 모델의 주요 개념, 모델의 속성을 이해했다.
      • 책에 나온 소스의 주요 방법론을 이해했다.
      •  Scikit-learn, numpy등의 라이브러리를 이해했다. numpy의 행렬변환이 어려웠었는데 많이 편해 졌다.
      • 이해를 위해 책을 활용하여, 나름 확장하여 이것 저것 시험을 해봤다... Decision Tree의 Gini 계수 결정을 안 잊어버릴 것 같다..족장(리더)님의 열정에 자극 받아...아.... 해결했을 때의 쾌감!!!!
    • 정리 글은 항상 책을 다 보고 머리에 정리해서 큰 클을 만들고, 필요 부분은 책을 보면서 정리를 해 나갔다..(나름 뿌듯!!)

    4. 혼공 학습단에 참가하면서  얻은 것

    • 족장님의 응원, 열정, 관심을 보면서 6주간을 학습한 것 같다
      • 그 많은 혼공족의 게시글을 읽은 후에 답변을 다는 것을 보고 오!! 그대야 말로 정말 프로페셔널이군요... 그렇담 나도 열심히 해야 겠군... 생각하며 진행했던 것 같다.
      • 4주차 Decision Tree를 학습하면서 올린 질문은 나름 같이 공부하는 혼공족과 고민을 하고 싶어서 올렸는데...족장님이 그렇게 애는 모습을 보면서... 포기하지 말고 찾아보고... 해결을 한 것이... 책을 보며 학습한 것보다 이번 혼공 학습단에 참가하면서 느끼고 배운 것이 컸군요... (당신이 갖고 있는 누군가의 관심이 큰 영향이 갈 수 있습니다.)
      • 단순한 실수를 해결할 수 있었네요... softmax 함수를 정의하면서 혼자 왜 안되지 고민한 것을 discord에 문의하였더니 혼공족님의 도움으로 해결하였어요... 한참 고민했었는데.... ㅎㅎ.. 그러고 보니 해결해준 혼공족님에게 고마움의 표시를 못했네요..아... 칭찬의 방에 올려야 겠군요 ^^
    • 다른 사람이 헷갈리면 나도 헷갈린다.
      • 우연찬게 본 족장님의 게시글 pandas의 axis가 헷갈려요....나도 한때는 공부 했었는데...... 이렇게 보니... 저렇게 하면 되겠구나 했는데.... 곰곰히 보니 나도 헷갈린다... 아마도 사용할 때마다 블러그를 보고 그 때 그때 해결했던것 같군요..... 인터넷 뒤져서.. 나름 규칙을 만들고 정리했다...다음 차 공부할때 np에서 axis가 나왔다.. 역쉬 pandas나 np나 동일한 개념이였다... 
        • 처음 정리할 땐 나와 관련 없는 것인데 정리를 해 두니... 나도 잘 써 먹었다..
        • 족장님이 쪽집게 처럼 모두가 어려워 할 문제를 이슈 제기를 잘 한 것 같다.. 이것도 고맙다.. 
    • 생각을 정리하는 것이 어렵다.
      • 머리속에 이해된 것을 글로 쓴다는 것이 어려움을 다시 느낀다..번역서를 읽으면 왜 이리 이해 안되게 어렵게 투덜 거렸는데... 나 역시 정리를 하면서 어려움을 느낀다...생각 정리를 블로그로 해야 하나? 고민중...
    • 블로그/페북의 기능을 알아가다
      • 그림 복사하기가 가능한 것을 알게 됨!!
        • 블로그에 그림을 삽입할 때 항상 로컬PC에 저장한 다음에 올렸는데.... ... 요 기능 알고 나서는 유래카!!! 외침
        • 서식쓰기 가능이 있다는 것을 알고 적용해서 사용해 봄.. 와우!!
      • 페북 채팅이 별도 프로그램 설치 없이 가능하다는 것을 알게됨 (족장님은 DM이라고 하던데... )

     

    5. 앞으로 계획

     . 6주 학습기간에는 머신러닝은 이런거야를 배웠다면.. 맘에 품은 질문은 왜 이럴까? 어떻게 가능할까? 를 계속 진행할 예정입니다.  

    그래서 또 다른 머신러닝책은 구매 했고  읽을 공부할 예정이고,,, 수학은 아래 책을 볼까 생각중인데... 혹시 추천 책이 있을까요?? (아 이놈의 질문병..) 

     

    핸즈온 머신러닝 들어가기 전에,,, 수학적 기초 온라인으로 듣고 있습니다. 혼공머신이 마중물이 되어서 ML, 딥러닝, LLM을 더 많이 이해 하고 싶네요

     

    0. 감사의 글

    책상속에 묻힐 책을 꺼내어 학습 할  환경을 마련해 주셔서 감사합니다... 책을 통해서 알아가고 , 부족한 것을 느끼고, 또 찾아가려는 나를 흐믓하게 바라볼 수 있는 좋은 기회였습니다.

    직장인이 기술 서적을 혼자 읽기에는 많은 한계가 있는데.. 학습단을 통해 한계를 극복 할  수 있었습니다.

     

    경제적 지원을 해주시 출판사와 리딩 해 주신 족장님께 감사드립니다. 독자로서 이런 사회적 가치를 실천하는  출판사를 응원하게 됩니다.

     

     

    '머신러닝 > 혼공 머신러닝' 카테고리의 다른 글

    [혼공머신] 6주차 딥러닝  (1) 2024.02.06
    [혼공머신] 5주차 비지도 학습  (0) 2024.02.03
    [혼공머신] 4주차 트리 알고리즘  (2) 2024.01.31
    [번외] Encoding의 필요성  (0) 2024.01.31
    Resources  (0) 2024.01.31

     

     

    딥러닝을 이해하기 위해 지금까지 머신러닝을 공부하였구나 생각이 드네요..문제종류(회귀, 이진,다항분류..), 손실함수, 하이퍼파라미터 등.. 

    1. 기본 개념도. 2.TensorFlow 기본 사용법.3 책의 예제로 입력/출력층으로 구성된 모델 살펴보기. 4. 다중 레이어로 구성된 모델 살펴보기로 정리를 해봤어요..

    (아... cheatSheet 중간에 있음)

     

    정리를 하다 보니 앞 부분에서 대충 넘어간 부분들을 다시 살펴볼 필요가 있네요... 그래도... 다시 봐야 하고 중점적으로 봐야 할지 느끼네... 아직 안개속에 있지만 안개가 희미하게 거치는 느낌!!!ㅎ

     

      책을 살때의 매직.... 읽고 안 읽고는 나중 문제다.. 읽고 난 후의 모습을 상상하며 책을 산다....필독!!!

       

      1. 주요 딥러닝 개념도

       

      • 인간의 뇌를 본뜬 Perceptrons..  .
      • 중간층은 입력값과 적절한 웨이트를 조절하여 새로운 의미의 속성을 표현한다고 개념적으로 생각하자.
        • 만약 데이타가 세로, 가로라면 사람은 크기를 유추할 수 있다.
        • 만약 데이타가 집의 크기, 침대 수, 우편번호, 거주자의 연봉이 있다면... 우편번호와 연봉으로 학교의 등급을 표현할 수 있다...
      • 노드의 결과가 다른 노드로 전달할때 얼마의 값 으로 전달해야 할까? 활성화 함수..
        • 이 노드의 결과는 다른 노드에 반영하지 말아야 해...아니야... 0.3만 반영해... 그렇지 않아... 음수로 반영해.....
      • 결과 값을 찾았는데... 찾은 값이 오류가 있다고 판단을 하면,, 찾은 값을 증가 시켜야 할까?? 감소 시켜야 할까?? 
        • 순전파 : 주어진 데이타로 결과를 찾는 방향...순방향
        • 역전파: 결과를 찾았으면, 오류를 수정하기 위해....가중치를 수정한다..... 역방향..
      • Hyperparameters
        • 은닉층의 수, 노드의 수, 활성화 함수, batch_size는 상황에 따라 지정해야 할 하이퍼 파라미터 
          • 다만, 결과층의 활성화 함수는 문제에 따라 정해져 있다!!
        • 옵티마이저 역시 하이퍼파라미터임!!
          • RMS,SGD등

      860~1,000 억개의 신경세포와 100조개의 신호를 주고 받는 시냅스

       

       

      노드 또는 뉴런을 원으로 표기

       

       

       

      예를 들어, 0.2와 0.9 두 개의 입력 값으로 0.5라는 예측값을 도출하는 인공신경망 모델을 학습시키는 과정을 생각해보겠습니다. 아래 그림과 같이 입력층에는 2개의 노드가 할당되며 출력 층에는 1개의 노드가 할당됩니다. 그리고 은닉층은 1개이며, 은닉노드는 3개로 임의로 설정합니다. 여기서 은닉층과 은닉노드의 개수는 다수의 반복실험을 통해 사용자가 적절하게 설정해야 하는 값입니다

       

      활성화 함수

       

       

      문제에 따라 사용되는 활성화 함수와 손실 함수

       

      2. Tensorflow 기초 사용법

      모델 생성이 기존 머신러닝보다 복잡합니다. 레이어를 생성해야 하고, 활성화 함수를 지정해야 하고, loss 함수등을 지정해야 하는군요... 파란색으로 표기된 모델 생성과 학습부분을 세부 공부를 해야 겠군요.

       

      Tensorflow의 cheat sheet를 옆에 끼고 공부하기..

      Keras_Cheat_Sheet_gssmi8.pdf
      5.79MB

      TensorFlow Basic Sample

      (손실함수와 마지막 활성화함수를 보니..이진분류이군요)
      Machine Learning Basic Sample
      import numpy as np
      from tensorflow.keras.models import Sequential
      from tensorflow.keras.layers import Dense

      #데이타 생성
      data = np.random.random((1000,100))
      labels = np.random.randint(2,size=(1000,1))

      #전처리 

      #모델 생성 및 학습
      model = Sequential()
      model.add(Dense(32,
                          activation='relu',
                          input_dim=100))
      model.add(Dense(1, activation='sigmoid'))
      model.compile(optimizer='rmsprop',
                        loss='binary_crossentropy',
                        metrics=['accuracy'])

      model.fit(data,labels,epochs=10,batch_size=32)

      #예측
      predictions = model.predict(data)

      #평가
      from sklearn import neighbors, datasets, preprocessing
      from sklearn.model_selection import train_test_split
      from sklearn.metrics import accuracy_score

      #데이터 생성
      iris = datasets.load_iris()
      X, y = iris.data[:, :2], iris.target
      X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=33)

      #전처리
      scaler = preprocessing.StandardScaler().fit(X_train)
      X_train = scaler.transform(X_train)
      X_test = scaler.transform(X_test)

      #모델 생성 및 학습
      knn = neighbors.KNeighborsClassifier(n_neighbors=5)
      knn.fit(X_train, y_train)

      #예측
      y_pred = knn.predict(X_test)

      # 평가
      accuracy_score(y_test, y_pred)

       

      3. MNIST 패선 다중 클래스 분류

      10종류의 60,000개의 그림을 분류 하는 예제. 하나의 그림은 28*28 크기의 2차원 데이타를 1차원으로 변환하여 사용함. 즉 그림 하나는 784 = 28*28 크기임

       

      입력은 784, 히든 층 없이 결과층을 node=10로 만듭니다.

       

      다중 클라스 분류이므로 sparse+categorical_crossentropy를 사용하고 출력층의 활성화 함수는 softmax를 사용합니다.

      import tensorflow as tf
      from tensorflow import keras
      from sklearn.model_selection import train_test_split
      from tensorflow.keras.utils import *
      
      # 실행마다 동일한 결과를 얻기 위해 케라스에 랜덤 시드를 사용하고 텐서플로 연산을 결정적으로 만듭니다. 
      tf.keras.utils.set_random_seed(42)
      tf.config.experimental.enable_op_determinism()
      
      #데이타 갖고 오기
      (train_input, train_target), (test_input, test_target) = keras.datasets.fashion_mnist.load_data()
      
      #전처리... 
      #1. scaling
      train_scaled = train_input / 255.0
      #2. 데이타를 1차원으로 변경하기
      train_scaled = train_scaled.reshape(-1, 28*28)
      
      #데이타 사이즈 확인
      print(f'데이타 크기 {train_scaled.shape}, 정답 크기{train_target.shape}')
      # 학습/평가데이타 분류
      train_scaled, val_scaled, train_target, val_target = train_test_split(
          train_scaled, train_target, test_size=0.2, random_state=42)
      
      # 모델 생성
      dense = keras.layers.Dense(10, activation='softmax', input_shape=(784,))
      model = keras.Sequential(dense)
      model.compile(loss='sparse_categorical_crossentropy', metrics='accuracy')
      
      # 모델 요약 정보 조회
      model.summary()
      plot_model(model, show_layer_names=False, show_shapes=True)
      
      #모델 학습
      history= model.fit(train_scaled, train_target, epochs=5)
      
      #모델 평가
      model.evaluate(val_scaled, val_target)

       

      다음 함수로 Layer를 그려봅니다.

      plot_model(model, show_layer_names=False, show_shapes=True)

       

      다음 함수로 파라미터를 포함한 model을 확인합니다. 

      Dense Layer는 784개의 입력을 받아서 10개의 노드로 전달하고, 노드 수만큼의 편향이 있어서.. 784 * 10 + 10 = 7850이 되는 것을 알 수 있습니다.

       

      즉 각 레이어의 파라미터는 입력수 * 노드 수 + 노드수임을 알 수 있습니다. 

      데이타 크기 (60000, 784), 정답 크기(60000,)
      Model: "sequential"
      _________________________________________________________________
       Layer (type)                Output Shape              Param #   
      =================================================================
       dense (Dense)               (None, 10)                7850      
                                                                       
      =================================================================
      Total params: 7850 (30.66 KB)
      Trainable params: 7850 (30.66 KB)
      Non-trainable params: 0 (0.00 Byte)

       

      가령, 입력이 100개 이고, 미집층에 있는 뉴런 개수가 10개일때 필요 파라미터는 입력수 * 노드 수 + 노드수이므로 100 * 10 +10 = 1010임을 알 수 있습니다.

       

      정말 맞을까요?? 코드로 확인해보죠.. ^^

       

      먼저 결과 입니다.  손으로 계산한 1010과 코드로 출력한 결과가 100잘 나왔습니다.

      Model: "sequential_1"
      _________________________________________________________________
       Layer (type)                Output Shape              Param #   
      =================================================================
       dense_1 (Dense)             (None, 10)                1010      
                                                                       
      =================================================================
      Total params: 1010 (3.95 KB)
      Trainable params: 1010 (3.95 KB)
      Non-trainable params: 0 (0.00 Byte)
      ___________________________________________________

       

      입력에 대한 갯수가 없어 100개 입력을 했는지 확인해 보겠습니다. 출력을 보니 맞군요..

       

      사용된 코드는 아래와 같습니다.

      # 모델 생성
      dense = keras.layers.Dense(10, activation='softmax', input_shape=(100,))
      model = keras.Sequential(dense)
      model.compile(loss='sparse_categorical_crossentropy', metrics='accuracy')
      
      # 모델 요약 정보 조회
      model.summary()
      
      # 모델 그림 그리기
      plot_model(model, show_layer_names=False, show_shapes=True)

       

       

      4. MNIST 패선 다중 클래스 분류 (다중 레이어)

      • 하이퍼 파라미터인 은닉층 및 옵티마이저 추가하기
      • 데이타가 28* 28 크기의 2차원 데이타를 Flatten Layer를 사용하여 2차원 데이타를 사용하기
        • 3장에서는 np를 사용

       

      import tensorflow as tf
      from tensorflow import keras
      from sklearn.model_selection import train_test_split
      from tensorflow.keras.utils import *
      
      # 실행마다 동일한 결과를 얻기 위해 케라스에 랜덤 시드를 사용하고 텐서플로 연산을 결정적으로 만듭니다. 
      tf.keras.utils.set_random_seed(42)
      tf.config.experimental.enable_op_determinism()
      
      #데이타 갖고 오기
      (train_input, train_target), (test_input, test_target) = keras.datasets.fashion_mnist.load_data()
      
      #전처리... 
      #1. scaling
      train_scaled = train_input / 255.0
      
      
      #데이타 사이즈 확인
      print(f'데이타 크기 {train_scaled.shape}, 정답 크기{train_target.shape}')
      # 학습/평가데이타 분류
      train_scaled, val_scaled, train_target, val_target = train_test_split(
          train_scaled, train_target, test_size=0.2, random_state=42)
      
      # 모델 생성
      model = keras.Sequential()
      
      ##데이타를 1차원으로 변경하기
      ## train_scaled.reshape(-1, 28*28) 대신 Flatten()를 사용한다.
      model.add(keras.layers.Flatten(input_shape=(28, 28)))
      
      model.add(keras.layers.Dense(100, activation='relu'))
      model.add(keras.layers.Dense(10, activation='softmax'))
      ## Optimizer를 사용한다.
      sgd = keras.optimizers.SGD()
      model.compile(optimizer=sgd, loss='sparse_categorical_crossentropy', metrics='accuracy')
      
      # 모델 요약 정보 조회
      model.summary()
      plot_model(model, show_layer_names=False, show_shapes=True)
      
      #모델 학습
      history= model.fit(train_scaled, train_target, epochs=5)
      
      #모델 평가
      model.evaluate(val_scaled, val_target)

       

       

      참고자료

       

      https://www.hani.co.kr/arti/science/science_general/755976.html

       

      1000억개 뉴런, 100조개 시냅스…이들은 기억에서 무슨 일할까

      기억에 관한 연구 결과가 종종 뉴스로 보도됩니다. 기억을 다룬 과학 뉴스를 좀더 흥미롭게 보려면 신경과학의 몇 가지 용어에 익숙해지는 게 좋습니다. 기억은 뇌 신경세포와 시냅스에 저장된

      www.hani.co.kr

       

      https://www.lgcns.com/blog/cns-tech/ai-data/14558/

       

      인공신경망이란 무엇인가? - LG CNS

      2016년 3월, 세계적으로 큰 이슈를 몰고 온 게임이 성사되었습니다. 그것은 바로 세계 최고 바둑기사인 대한민국의 이세돌과 구글 딥마인드의 인공지능 바둑 프로그램 알파고(alphago)와의 대결인

      www.lgcns.com

       

      https://jalynne-kim.medium.com/%EB%94%A5%EB%9F%AC%EB%8B%9D-%ED%95%B5%EC%8B%AC-%EA%B0%9C%EB%85%90-%ED%95%B5%EC%8B%AC-%EC%9A%A9%EC%96%B4-%EC%89%BD%EA%B2%8C-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90-%EA%B0%80%EB%8A%A5%ED%95%9C-7196a39df5a0

       

      [딥러닝] 핵심 개념&핵심 용어 쉽게 알아보자! (가능한)

      안녕하세요, 오늘 주제는 [딥러닝]입니다.

      jalynne-kim.medium.com

       

      https://velog.io/@denev6/neural-network

       

      velog

       

      velog.io

       

      https://github.com/hunkim/DeepLearningZeroToAll?tab=readme-ov-file

       

      GitHub - hunkim/DeepLearningZeroToAll: TensorFlow Basic Tutorial Labs

      TensorFlow Basic Tutorial Labs. Contribute to hunkim/DeepLearningZeroToAll development by creating an account on GitHub.

      github.com

       

      https://blog.skby.net/%EC%9D%B8%EA%B3%B5%EC%8B%A0%EA%B2%BD%EB%A7%9D-artificial-neural-network/

       

      인공신경망 (Artificial Neural Network) < 도리의 디지털라이프

      I. 분류와 예측 모형, 인공신경망, ANN 가. 인공신경망의 개념 인간의 뉴런을 모방하여 가중치 조정을 통한 분류와 예측을 위해 다수 노드를 연결한 계층적 조직 나. 인공신경망의 특징 특징 구성

      blog.skby.net

       

      https://velog.io/@yookyungkho/%EB%94%A5%EB%9F%AC%EB%8B%9D-%EC%98%B5%ED%8B%B0%EB%A7%88%EC%9D%B4%EC%A0%80-%EC%A0%95%EB%B3%B5%EA%B8%B0%EB%B6%80%EC%A0%9C-CS231n-Lecture7-Review

       

      velog

       

      velog.io

       

      https://www.holehouse.org/mlclass/

       

      Machine Learning - complete course notes

      Stanford Machine Learning The following notes represent a complete, stand alone interpretation of Stanford's machine learning course presented by Professor Andrew Ng and originally posted on the ml-class.org website during the fall 2011 semester. The topic

      www.holehouse.org

       

      https://www.gttkorea.com/news/articleView.html?idxno=4086

       

      너무 앞만 보며 살아오셨네
      어느새 자식들 머리커서 말도 안듣네
      한평생 제 자식 밥 그릇에 청춘 걸고
      새끼들 사진보며 한푼이라도 더 벌고
      눈물 먹고 목숨 걸고
      힘들어도 털고 일어나
      이러다 쓰러지면 어쩌나
      아빠는 슈퍼맨이야, 얘들아 걱정마

       

      싸이의 "아버지" 중에서

       

      1. 아빠 아이펜슬 잘 안쓰니 아빠꺼 써.... 얼마전 딸이 아이펜슬을 잊어버렸다는 이야기를 한다. 그냥 잊어버렸단다..사달라는 이야기를 하지...아빠도 안쓰는 것은 아니단다.

       

      2. "성숙한 리더의 품격 있는 분노" 책을 읽고 있다.. 리더들이 화를 내지 말라고 하는 이야기는 아닙니다. 감정적이거나 합리적으로 화를 내주세요... 그렇지 않으면 직원들의 소심한 반란이 있어.. 회사에도 좋지 않습니다. 

      https://www.youtube.com/watch?v=-k4XOv1V-mY

       

      3. 영원한 최상위 계급은 없다. 우리 아빠들이 직원보다  높아도. CEO 보단 낮다. CEO도 이재용도, 최태원도 낮다. 이재용도  VIP 앞에서는 과연 최상위 계급일까?.. VIP는 5년 단임제다.. 

      https://www.youtube.com/watch?v=bINAaDJxQGg

       

      4. (2)처럼 분노를 받으면서 직장생활을 한다.

       

      5. 최근 빅데티의 연관 검색어로 좋아의 연관어로 엄마가 아빠보다 높다. 철부지 어린애들에게 엄마가 좋니? 아빠가 좋니 물으면... 엄마!! 대답과 일맥상통한다.

      https://www.youtube.com/watch?v=DJ5tFeY6KrQ&t=507s

       

      6.집안에서 아빠는 예전처럼 권위주의 아빠가 되면 따 당한다.... 짱구같은 아빠, 친근한 아빠, 철부지 아빠, 함께하는 아빠를 원한다. 집에서도 힘들다..

       

      7. 나는 회사 인턴에게  "주말에 아버지를 즐겁게 하세요" 숙제를 낸다.

       

      8. 우리 애들도 (7)과 같은 상사를 만났으면 좋겠다.

       

       

       

       

      + Recent posts