ch0nny_log

[빅데이터분석] 딥러닝_1. numpy 행렬 본문

빅데이터 분석(with 아이티윌)/deep learning

[빅데이터분석] 딥러닝_1. numpy 행렬

chonny 2024. 9. 30. 16:20

딥러닝책 : "밑바닥 부터 시작하는 딥러닝"

이 책이 딥러닝의 정석과 같은 책입니다. 딥러닝의 원리를 정말 잘 설명한 책

이 책이 전세계적으로 유명해진 이유가 ?  그림 설명이 많아서 이해하기 쉽게 구성

책의 내용은 미국 스탠포드대 딥러닝 강의를 그대로 교안으로 만든겁니다. 

 장점 ?    딥러닝의 원리를 정말 잘 설명 

 단점 ?    현재 텐써 플로우나 파이토치에 대한 코드가 없습니다. 
             오로지 파이썬 날코딩으로 신경망을 구현했습니다. 

 요즘에는 텐써플로우나 파이토치등을 이용해서 신경망을 구성합니다. 

 단층 신경망  0층 -----------> 1층
 입력층             출력층
 다층 신경망  0층 ------> 1층 ----------> 2층 
입력층        은닉층          출력층 
딥러닝  입력층 --------> 은닉층들 ---------> 출력층

■ numpy 와 matplotlib  p36

▣ 1. 넘파이(numpy) 란?    파이썬 언어에서 기본적으로 지원하지 않는 배열(array)
                                    혹은 행렬(matrix) 의 계산을 쉽고 빠르게 해주는 
                                    라이브러리 입니다.

▣ 2. 넘파이(numpy)를 배워야 하는 이유 ?  

    신경망에서 데이터를 계산할 때 행렬로
    계산을 하는데 행렬 계산을 아주 빠르고 쉽게 해주는 모듈이
    numpy 여서 넘파이를 배워야합니다. 

   수지 사진          --------->  숫자 행렬로 변환이 되어서 신경망에 입력됩니다.

문제1.  아래의 행렬을 numpy 로 만드시오 !
   1   2
   3   4  
답:
import  numpy  as  np

a = np.array( [ [ 1, 2 ], [ 3, 4 ] ] )
a​


설명:  리스트를 numpy 의 배열로 변환을 했습니다. 이렇게 변환해야 행렬계산을 빠르게 할 수 있습니다.

 

문제2.  위의 a 행렬의 각 요소에 숫자 5를 더하시오 !
import  numpy  as  np 

a = np.array( [ [ 1, 2 ], [ 3, 4 ] ] )
a + 5​

※ 위의 기능이 바로 numpy 의 그 유명한 "브로드 캐스트" 기능입니다. 

 

 

★ 구글에서 '한빛 미디어 라고 검색하고 부록 예제 소스 에 가서 밑바닥부터 시작하는 딥러닝 실습 파일을 다운로드 받으세요 

 

GitHub - WegraLee/deep-learning-from-scratch: 『밑바닥부터 시작하는 딥러닝』(한빛미디어, 2017)

『밑바닥부터 시작하는 딥러닝』(한빛미디어, 2017). Contribute to WegraLee/deep-learning-from-scratch development by creating an account on GitHub.

github.com

 

 

한빛출판네트워크

사람을 잇고 지식과 경험을 엮어 세상을 바꾸는 디지털 콘텐츠 기업, 한빛+ :: 한빛미디어, 한빛아카데미, 한빛비즈, 한빛라이프, 한빛에듀, 한빛앤

www.hanbit.co.kr

 

 

 

 

문제3. 그림 1-1 처럼 행렬 계산을 numpy 로 구현하시오. 즉 브로드 캐스트가 되는지 확인하시오 !
답:    import  numpy  as   np
        a = np.array( [ [ 1, 2 ], [ 3, 4] ] )
        print( a * 10 )​

만약 브로드 캐스트가 안된다면 for loop문을 써서 계산을 해야합니다. 그런데 루프문 없이 쉽게 구현했습니다. 

문제4. 그림 1-2(책 40페이지)의 브로드 캐스트 기능을 numpy 로 구현하시오 !
답:
import  numpy  as   np

a = np.array( [ [ 1, 2 ], [ 3, 4 ] ] )
b = np.array( [ [ 10, 20 ] ] )
a * b​



문제5. 아래의 행렬의 곱을 numpy로 구현하시오.
import numpy as np

a = np.array([1, 2]).reshape(1, 2)
b = np.array([1, 3, 5, 4, 3, 2]).reshape(2, 3)
print(np.dot(a, b))​
문제6. 아래의 행렬의 내적(곱)을  numpy로 구현하시오. 

import numpy as np

a = np.array([2, 4, 1, 5, 6, 3]).reshape(2, 3)
b = np.array([3, 2, 1, 4, 5, 2]).reshape(3, 2)
print(np.dot(a, b))​

 


■ 넘파이의 N차원 배열  

넘파이는  1차원 배열(1줄로 늘어선 배열) 뿐만 아니라 다차원 배열도 작성할 수 있습니다. 

예제: 
x = np.array([ [ 1, 2, 3, 4, 5], [ 2, 4, 3, 2, 4 ], [ 3, 1, 4, 3, 1 ], [ 2, 7, 3, 4, 5 ] ] )

# 몇 행 몇 열인지 확인 
x.shape  # (4, 5)

# 몇 차원 인지 확인
x.ndim  # 2 차원

 

 


 

 수학에서는 1차원 배열을 ---> 백터(vector) 라고 하고
                    2차원 배열을 ---> 행렬(matrix) 라고 하고
->   백터와 행렬을 일반화한것을  텐서(tensor) 라고 합니다. 

   tensor  flow  ----------> 행렬이 계산이 되면서 흘러간다.
      ↓      ↓
  다차원  흘러간다

 구글에서 만든 텐써 플로우는 다차원 배열의 연산을 빠르게 할 수 있겠금 구현이 되어져 있습니다. 

   파이썬 -----------> 텐써 플로우
    ↓                          ↓
 레고조각               레고 조각을 가지고 만든 일부 완성품
                           (예:  식탁, 문고리, 창 )

 

 

문제1. tensor flow를 설치하시오.(쥬피터에서는 이미 내장되어 있음)
pip install tensorflow

import tensorflow as tf
문제2. tensorflow로 아래의 행렬 계산을 하시오.
import  tensorflow  as  tf

a = tf.constant( [[1, 2]], dtype=tf.int32 )
b = tf.constant( [ [ 1, 3, 5 ], [ 4, 3, 2] ],  dtype=tf.int32)

result = tf.matmul(a, b)
print(result)

 

 


■  넘파이 원소접근 P40

 numpy 배열 안에 요소들에 대한 접근은 numpy 를 이용하지 않았을때 보다  훨씬 간단하게 구현할 수 있습니다.

 

 

예제1. 아래의 리스트에서 숫자 55를 출력하시오 !

a = [ 51, 55, 14, 19, 0, 4 ] 

답:  a[1]



예제2. 아래의 리스트에서 숫자 15 이상인 숫자들만 출력하시오 !

a = [ 51, 55, 14, 19, 0, 4 ] 

출력결과 :  [ 51, 55, 19 ]

답: 
a = [ 51, 55, 14, 19, 0, 4 ]

result = [ ]
for  i  in  a :
    if   i >= 15:
        result.append(i)

print(i)

 

예제3. 위의 결과를 numpy 를 이용해서 쉽게 구현하시오 !

import  numpy  as  np

a = [ 51, 55, 14, 19, 0, 4 ] 

a2 = np.array(a)
a3 = a2[ a2 >=15 ]
list(a3)

 

 

문제1. 아래의 3*2 행렬식을 만들고 아래의 행렬 요소에서 15이상인 것만 출력하시오.

51  55 
14  19
  0   4                          [결과: 51 ,55, 19]

답:
a = np.array([ 51, 55, 14, 19, 0, 4] ).reshape(3,2)
list( a [ a >= 15] )​
문제2. 아래의 행렬에서 숫자 3인것만 출력하시오.
5.1     3.5    1.4    0.2
4.9     3.0    1.4    0.2
4.7     3.2    1.3    0.2
4.6     3.1    1.5    0.2         

[결과: 5.1 , 3.5,  4.9,  3.0, 4.7, 3.2, 4.6, 3.1 ]

import numpy as np

# 주어진 행렬을 NumPy 배열로 정의
a = np.array([[5.1, 3.5, 1.4, 0.2],
                   [4.9, 3.0, 1.4, 0.2],
                   [4.7, 3.2, 1.3, 0.2],
                   [4.6, 3.1, 1.5, 0.2]]).reshape(4,4)

list(a[a>3])