즐거운프로그래밍

[딥러닝] 알고리즘 CNN 신경망

수수께끼 고양이 2023. 10. 31. 13:42
728x90
반응형

 

3x3 입력 : filter size

import numpy as np

np.random.seed(1)

image=np.random.randint(5, size=(3,3))
print('image=\n', image)

filter=np.random.randint(5, size=(3,3))
print('filter=\n',filter)

image_x_filter=image*filter
print('image_x_filter=\n',image_x_filter)

convolution =np.sum(image_x_filter)
print('convolution=\n',convolution)

 

 

 


4x4 입력 : stride

import numpy as np

np.random.seed(1)

image=np.random.randint(5, size=(4,4))
print('image=\n', image)

filter=np.random.randint(5, size=(3,3))
print('filter=\n', filter)

convolution=np.zeros((2,2))

for row in range(2):
    for col in range(2):
        window=image[row:row+3, col:col+3]
        print('window(%d, %d)=\n' %(row, col), window)
        print('window(%d, %d)*filter=\n'%(row, col), window*filter)
        convolution[row, col]=np.sum(window*filter)
        
print('convolution=\n', convolution)

 

 

 

import numpy as np

np.random.seed(1)

image=np.random.randint(5, size=(5,5))
print('image=\n', image)

filter=np.random.randint(5, size=(3,3))
print('filter=\n', filter)

convolution=np.zeros((3,3))

for row in range(3):
    for col in range(3):
        window=image[row:row+3, col:col+3]
        print('window(%d, %d)=\n' %(row, col), window)
        print('window(%d, %d)*filter=\n'%(row, col), window*filter)
        convolution[row, col]=np.sum(window*filter)
        
print('convolution=\n', convolution)

 

 

 

 


6x6 입력 : padding # 그림 사이즈가 줄어들지 않았으면 좋겠을 때

import numpy as np

np.random.seed(1)

image=np.random.randint(5, size=(4,4))
print('image=\n', image)

filter=np.random.randint(5, size=(3,3))
print('filter=\n', filter)

image_pad=np.pad(image,((1,1),(1,1)))
print('image_pad=\n',image_pad)

convolution=np.zeros((4,4))

for row in range(4):
    for col in range(4):
        window=image_pad[row:row+3, col:col+3]
        convolution[row, col]=np.sum(window*filter)
        
print('convolution=\n', convolution)

 

 

 


4x4 합성 곱 : pooling

import numpy as np

np.random.seed(1)

image=np.random.randint(5, size=(4,4))
print('image=\n', image)

filter=np.random.randint(5, size=(3,3))
print('filter=\n', filter)

image_pad=np.pad(image,((1,1),(1,1)))
print('image_pad=\n',image_pad)

convolution=np.zeros((4,4))

for row in range(4):
    for col in range(4):
        window=image_pad[row:row+3, col:col+3]
        convolution[row, col]=np.sum(window*filter)
        
print('convolution=\n', convolution)

max_pooled=np.zeros((2,2))

for row in range(0,2):
    for col in range(0,2):
        window=convolution[2*row:2*row+2, 2*col:2*col+2]
        max_pooled[row, col]=np.max(window)
        
print('max_pooled=\n', max_pooled)

 

 

 


6x6 입력 필터 늘리기

import numpy as np

np.random.seed(1)

image=np.random.randint(5, size=(4,4))
print('image=\n',image)

filter=np.random.randint(5, size=(3,3,2))
print('filter_0=\n', filter[:,:,0])
print('filter_1=\n', filter[:,:,1])

image_pad=np.pad(image,((1,1),(1,1)))
print('image_pad=\n', image_pad)

convolution=np.zeros((4,4,2))

for fn in range(2):
    for row in range(4):
        for col in range(4):
            window=image_pad[row:row+3, col:col+3]
            convolution[row,col,fn]=np.sum(window*filter[:,:,fn])
            
print('convolution_0=\n',convolution[:,:,0])
print('convolution_1=\n',convolution[:,:,1])

max_pooled=np.zeros((2,2,2))

for fn in range(2):
    for row in range(0,2):
        for col in range(0,2):
            window=convolution[2*row:2*row+2,2*col:2*col+2,fn]
            max_pooled[row, col, fn]=np.max(window)
            
print('max_pooled_0=\n',max_pooled[:,:,0])
print('max_pooled_1=\n',max_pooled[:,:,1])

 

 

 

 

import numpy as np

np.random.seed(1)

W,H=400,400
F=40

image=np.random.randint(5,size=(W,H))
print(image)

filter=np.random.randint(5,size=(3,3,F))
print('filter_0=\n', filter[...,0])
print('filter_0=\n', filter[...,1])

image_pad=np.pad(image,((1,1),(1,1)))
print('image_pad=\n', image_pad)

convolution=np.zeros((W,H,F))

for fn in range(F):
    for row in range(H):
        for col in range(W):
            window=image_pad[row:row+3,col:col+3]
            convolution[row,col,fn]=np.sum(window*filter[...,fn])
            
print('convolution_0=\n',convolution[...,0])
print('convolution_1=\n',convolution[...,1])

max_pooled=np.zeros((H//2,W//2,F))

for fn in range(F):
    for row in range(H//2):
        for col in range(W//2):
            window=convolution[2*row:2*row+2,2*col:2*col+2,fn]
            max_pooled[row,col,fn]=np.max(window)

print('max_pooled_0=\n',max_pooled[...,0])
print('max_pooled_1=\n',max_pooled[...,1])

 

 

 

 

 

728x90
반응형