Top 5 동빈 나 블로그 Best 210 Answer

You are looking for information, articles, knowledge about the topic nail salons open on sunday near me 동빈 나 블로그 on Google, you do not find the information you need! Here are the best content compiled and compiled by the https://toplist.dianhac.com.vn team, along with other related topics such as: 동빈 나 블로그 동빈나 github, 나동빈 포항공대, 나동빈 학교, 안경잡이, 동빈 나 선택 정렬, 안경쟁이, 안경잡이 짤, 이코 테


네이버 블로그 만들기 | 왕초보도 5분이면 OK | 블로그 꾸미기 팁
네이버 블로그 만들기 | 왕초보도 5분이면 OK | 블로그 꾸미기 팁


1. 알고리즘의 개요 및 실습 환경 설치하기 : 네이버 블로그

  • Article author: m.blog.naver.com
  • Reviews from users: 15636 ⭐ Ratings
  • Top rated: 3.6 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 1. 알고리즘의 개요 및 실습 환경 설치하기 : 네이버 블로그 동빈나. 157K subscribers. 1강 – 알고리즘의 개요와 실습 환경 구축 [ 실전 알고리즘 강좌(Algorithm Programming Tutorial) #1 ]. …
  • Most searched keywords: Whether you are looking for 1. 알고리즘의 개요 및 실습 환경 설치하기 : 네이버 블로그 동빈나. 157K subscribers. 1강 – 알고리즘의 개요와 실습 환경 구축 [ 실전 알고리즘 강좌(Algorithm Programming Tutorial) #1 ].
  • Table of Contents:

카테고리 이동

안경잡이개발자

이 블로그 
2018 알고리즘
 카테고리 글

카테고리

이 블로그 
2018 알고리즘
 카테고리 글

1. 알고리즘의 개요 및 실습 환경 설치하기 : 네이버 블로그
1. 알고리즘의 개요 및 실습 환경 설치하기 : 네이버 블로그

Read More

안경잡이개발자 :: 안경잡이개발자

  • Article author: ndb796.tistory.com
  • Reviews from users: 10824 ⭐ Ratings
  • Top rated: 3.3 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 안경잡이개발자 :: 안경잡이개발자 블로그 홈. 안경잡이개발자. ndb796.tistory … …
  • Most searched keywords: Whether you are looking for 안경잡이개발자 :: 안경잡이개발자 블로그 홈. 안경잡이개발자. ndb796.tistory … 프로그래밍 관련 포스팅을 주로 합니다.
  • Table of Contents:

Convolution 연산을 Python NumPy로 구현해보자! (단순 반복문을 이용한 구현 im2col을 이용한 구현)

최근에 올라온 글

최근에 달린 댓글

공지사항

글 보관함

최근에 받은 트랙백

링크

안경잡이개발자 :: 안경잡이개발자
안경잡이개발자 :: 안경잡이개발자

Read More

의창s의 일상 블로그(고민, 생각, 운동, 일 등) (25 Page)

  • Article author: belights.tistory.com
  • Reviews from users: 39119 ⭐ Ratings
  • Top rated: 4.0 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 의창s의 일상 블로그(고민, 생각, 운동, 일 등) (25 Page) 동빈나 JSP 게시판 만들기 따라하기 12-15강(게시글보기 기능 구현, 게시글 수정 및 삭제 기능 구현, 웹사이트 메인페이지 디자인, 프로젝트 완성 및 배포) 전 게시글 … …
  • Most searched keywords: Whether you are looking for 의창s의 일상 블로그(고민, 생각, 운동, 일 등) (25 Page) 동빈나 JSP 게시판 만들기 따라하기 12-15강(게시글보기 기능 구현, 게시글 수정 및 삭제 기능 구현, 웹사이트 메인페이지 디자인, 프로젝트 완성 및 배포) 전 게시글 … 저의 생각과 여러분의 생각을 공유합니다.
  • Table of Contents:

전체 글

공지사항

최근 포스트

태그

검색

전체 방문자

의창s의 일상 블로그(고민, 생각, 운동, 일 등) (25 Page)
의창s의 일상 블로그(고민, 생각, 운동, 일 등) (25 Page)

Read More

건듀의 블로그 :: 건듀의 블로그

  • Article author: gunw00.tistory.com
  • Reviews from users: 43261 ⭐ Ratings
  • Top rated: 3.7 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 건듀의 블로그 :: 건듀의 블로그 애기건듀 님의 블로그입니다. … php 설치 및 이해 :: 건듀의 블로그 안녕하세요. … 코드 작성은 동빈나님의 유튜브 JSP강의를 참고하였습니다. …
  • Most searched keywords: Whether you are looking for 건듀의 블로그 :: 건듀의 블로그 애기건듀 님의 블로그입니다. … php 설치 및 이해 :: 건듀의 블로그 안녕하세요. … 코드 작성은 동빈나님의 유튜브 JSP강의를 참고하였습니다.
  • Table of Contents:

전체 글

인기포스트

건듀의 블로그 :: 건듀의 블로그
건듀의 블로그 :: 건듀의 블로그

Read More

허곰의 코딩블로그

  • Article author: junnyhi.tistory.com
  • Reviews from users: 15314 ⭐ Ratings
  • Top rated: 4.2 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 허곰의 코딩블로그 허곰 님의 블로그입니다. … 혼자 하라고 하면 못함 개요 동빈나님의 모델 구현 영상과 논문을 따라가면서 구현해보기 순서 1. 논문 TEXT 2. …
  • Most searched keywords: Whether you are looking for 허곰의 코딩블로그 허곰 님의 블로그입니다. … 혼자 하라고 하면 못함 개요 동빈나님의 모델 구현 영상과 논문을 따라가면서 구현해보기 순서 1. 논문 TEXT 2.
  • Table of Contents:
허곰의 코딩블로그
허곰의 코딩블로그

Read More

[Alex] 데이터 분석가의 블로그

  • Article author: alex-blog.tistory.com
  • Reviews from users: 27679 ⭐ Ratings
  • Top rated: 3.5 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [Alex] 데이터 분석가의 블로그 데이터를 분석을 함께 공부해나가는 블로그입니다. … 의 소스에서 자료를 얻지만 대표적으로는 [동빈나] 선생님, https://www.daleseo.com/ 블로그 … …
  • Most searched keywords: Whether you are looking for [Alex] 데이터 분석가의 블로그 데이터를 분석을 함께 공부해나가는 블로그입니다. … 의 소스에서 자료를 얻지만 대표적으로는 [동빈나] 선생님, https://www.daleseo.com/ 블로그 … 데이터를 분석을 함께 공부해나가는 블로그입니다.
  • Table of Contents:
See also  Top 5 에버랜드 선물 샵 The 97 New Answer
[Alex] 데이터 분석가의 블로그
[Alex] 데이터 분석가의 블로그

Read More

하기나 해

  • Article author: ariari0226.tistory.com
  • Reviews from users: 28455 ⭐ Ratings
  • Top rated: 3.1 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 하기나 해 구글링, 유튜브 검색하다가 ‘동빈나’님의 찾았습니다. 그 동영상을 보면서 따라하기로 했습니다. 이 과정에서 생긴 시행착오를 블로그에 남겨놓을 생각입니다. …
  • Most searched keywords: Whether you are looking for 하기나 해 구글링, 유튜브 검색하다가 ‘동빈나’님의 찾았습니다. 그 동영상을 보면서 따라하기로 했습니다. 이 과정에서 생긴 시행착오를 블로그에 남겨놓을 생각입니다.
  • Table of Contents:

공지사항

최근글

인기글

최근댓글

태그

전체 방문자

하기나 해
하기나 해

Read More


See more articles in the same category here: toplist.dianhac.com.vn/blog.

안경잡이개발자 :: 안경잡이개발자

728×90

반응형

Convolution 연산은 CNN을 포함한 다양한 딥러닝 네트워크에서 활용되는 중요한 연산 이다. PyTorch와 같은 딥러닝 프레임워크에서는 Convolution 연산을 기본적으로 제공하고 있다. 이러한 Convolution 연산에 대해 더욱 자세히 이해하기 위하여 본 포스팅에서는 Convolution 연산을 Python NumPy만을 이용해 구현해보도록 하겠다.

예를 들어 입력 차원이 (배치 크기, 채널 크기, 높이, 너비) = (2, 3, 5, 5)인 예시를 확인해 보자. 이때 3 X 3짜리 커널을 3개 사용하여 stride = 2, padding = 0 설정으로 Convolution 연산을 수행하면 그 결과는 다음과 같다. 수식으로 표현하자면 출력 차원은 (배치 크기, 커널 개수, out_h, out_w) = (2, 3, 2, 2)가 된다.

※ 단순 반복문을 이용한 구현 ※

이러한 Convolution 연산을 어떻게 구현할 수 있을까? 가장 기본적인 방법은 바로 반복문을 이용하는 것 이다. 기본적으로 출력 높이(out_h)와 출력 너비(out_w)는 다음의 공식을 이용해 구현할 수 있다.

out_h = (h + 2 * padding – filter_h) / stride + 1 out_w = (w + 2 * padding – filter_w) / stride + 1

또한, 일반적으로 패딩(padding)은 입력 데이터의 높이와 너비 차원에 대해서만 수행한다. 이를 위해 np.pad() 메서드를 사용할 수 있다. 아래 코드를 보면 높이와 너비 차원에 대해서만 패딩을 넣는 것 을 알 수 있다.

결과적으로 출력 텐서(out)를 만든 뒤에 각각의 원소마다 Convolution 연산을 수행한 결과 값을 채워 넣는 것 을 알 수 있다. NumPy에서 단순히 두 행렬에 대하여 곱셈 연산을 수행하면, 원소 단위(element-wise)로 곱셈 연산이 수행된다. 그래서 Convolution 연산을 다음과 같이 구현할 수 있다.

import numpy as np def conv(X, filters, stride=1, pad=0): n, c, h, w = X.shape n_f, _, filter_h, filter_w = filters.shape out_h = (h + 2 * pad – filter_h) // stride + 1 out_w = (w + 2 * pad – filter_w) // stride + 1 # add padding to height and width. in_X = np.pad(X, [(0, 0), (0, 0), (pad, pad), (pad, pad)], ‘constant’) out = np.zeros((n, n_f, out_h, out_w)) for i in range(n): # for each image. for c in range(n_f): # for each channel. for h in range(out_h): # slide the filter vertically. h_start = h * stride h_end = h_start + filter_h for w in range(out_w): # slide the filter horizontally. w_start = w * stride w_end = w_start + filter_w # Element-wise multiplication. out[i, c, h, w] = np.sum(in_X[i, :, h_start:h_end, w_start:w_end] * filters[c]) return out

이제 앞서 다루었던 그림을 그대로 코드로 옮겨 결과를 확인 해 보자.

X = np.asarray([ # image 1 [ [[1, 2, 9, 2, 7], [5, 0, 3, 1, 8], [4, 1, 3, 0, 6], [2, 5, 2, 9, 5], [6, 5, 1, 3, 2]], [[4, 5, 7, 0, 8], [5, 8, 5, 3, 5], [4, 2, 1, 6, 5], [7, 3, 2, 1, 0], [6, 1, 2, 2, 6]], [[3, 7, 4, 5, 0], [5, 4, 6, 8, 9], [6, 1, 9, 1, 6], [9, 3, 0, 2, 4], [1, 2, 5, 5, 2]] ], # image 2 [ [[7, 2, 1, 4, 2], [5, 4, 6, 5, 0], [1, 2, 4, 2, 8], [5, 9, 0, 5, 1], [7, 6, 2, 4, 6]], [[5, 4, 2, 5, 7], [6, 1, 4, 0, 5], [8, 9, 4, 7, 6], [4, 5, 5, 6, 7], [1, 2, 7, 4, 1]], [[7, 4, 8, 9, 7], [5, 5, 8, 1, 4], [3, 2, 2, 5, 2], [1, 0, 3, 7, 6], [4, 5, 4, 5, 5]] ] ]) print(‘Images:’, X.shape) filters = np.asarray([ # kernel 1 [ [[1, 0, 1], [0, 1, 0], [1, 0, 1]], [[3, 1, 3], [1, 3, 1], [3, 1, 3]], [[1, 2, 1], [2, 2, 2], [1, 2, 1]] ], # kernel 2 [ [[5, 1, 5], [2, 1, 2], [5, 1, 5]], [[1, 1, 1], [1, 1, 1], [1, 1, 1]], [[2, 0, 2], [0, 2, 0], [2, 0, 2]], ], # kernel 3 [ [[5, 1, 5], [2, 1, 2], [5, 1, 5]], [[1, 1, 1], [1, 1, 1], [1, 1, 1]], [[2, 0, 2], [0, 2, 0], [2, 0, 2]], ] ]) print(‘Filters:’, filters.shape) out = conv(X, filters, stride=2, pad=0) print(‘Output:’, out.shape) print(out)

실행 결과는 다음과 같다. 그림에서의 결과와 동일한 것을 확인할 수 있다.

Images: (2, 3, 5, 5) Filters: (3, 3, 3, 3) Output: (2, 3, 2, 2) [[[[174. 191.] [130. 122.]] [[197. 244.] [165. 159.]] [[197. 244.] [165. 159.]]] [[[168. 171.] [153. 185.]] [[188. 178.] [168. 200.]] [[188. 178.] [168. 200.]]]]

※ im2col을 이용한 구현 ※

앞서 단순 반복문을 이용해 Convolution 연산을 구현해 보았다. Convolution 연산을 수행할 때 단순히 반복문(for loops)을 이용하는 경우, 행렬 곱을 제대로 활용하지 못한다는 점에서 속도가 느리다. 따라서 메모리를 조금 더 많이 사용하여, 속도를 비약적으로 개선 할 수 있는 방법으로 im2col 연산을 활용하는 방법이 있다.

다음과 같이 한 배치에 두 장의 이미지가 존재하여 마찬가지로 입력 차원이 (배치 크기, 채널 크기, 높이, 너비) = (2, 3, 5, 5)인 예시를 확인해 보자. 이러한 입력이 들어왔을 때, 이것을 행렬(matrix)로 형태를 변형하는 것이 im2col 연산이다. im2col 연산을 수행한 결과를 확인해 보자. (8, 27) 차원을 갖는 행렬이 생성되었다. 정확히는 (이미지 개수 X out_h X out_w, 입력 채널 개수 X kernel_h X kernel_w)의 차원을 갖는 행렬이 된다.

im2col 연산은 다음과 같이 구현할 수 있다.

import numpy as np def im2col(X, filters, stride=1, pad=0): n, c, h, w = X.shape n_f, _, filter_h, filter_w = filters.shape out_h = (h + 2 * pad – filter_h) // stride + 1 out_w = (w + 2 * pad – filter_w) // stride + 1 # add padding to height and width. in_X = np.pad(X, [(0, 0), (0, 0), (pad, pad), (pad, pad)], ‘constant’) out = np.zeros((n, c, filter_h, filter_w, out_h, out_w)) for h in range(filter_h): h_end = h + stride * out_h for w in range(filter_w): w_end = w + stride * out_w out[:, :, h, w, :, :] = in_X[:, :, h:h_end:stride, w:w_end:stride] out = out.transpose(0, 4, 5, 1, 2, 3).reshape(n * out_h * out_w, -1) return out X = np.asarray([ # image 1 [ [[1, 2, 9, 2, 7], [5, 0, 3, 1, 8], [4, 1, 3, 0, 6], [2, 5, 2, 9, 5], [6, 5, 1, 3, 2]], [[4, 5, 7, 0, 8], [5, 8, 5, 3, 5], [4, 2, 1, 6, 5], [7, 3, 2, 1, 0], [6, 1, 2, 2, 6]], [[3, 7, 4, 5, 0], [5, 4, 6, 8, 9], [6, 1, 9, 1, 6], [9, 3, 0, 2, 4], [1, 2, 5, 5, 2]] ], # image 2 [ [[7, 2, 1, 4, 2], [5, 4, 6, 5, 0], [1, 2, 4, 2, 8], [5, 9, 0, 5, 1], [7, 6, 2, 4, 6]], [[5, 4, 2, 5, 7], [6, 1, 4, 0, 5], [8, 9, 4, 7, 6], [4, 5, 5, 6, 7], [1, 2, 7, 4, 1]], [[7, 4, 8, 9, 7], [5, 5, 8, 1, 4], [3, 2, 2, 5, 2], [1, 0, 3, 7, 6], [4, 5, 4, 5, 5]] ] ]) print(‘Images:’, X.shape) filters = np.asarray([ # kernel 1 [ [[1, 0, 1], [0, 1, 0], [1, 0, 1]], [[3, 1, 3], [1, 3, 1], [3, 1, 3]], [[1, 2, 1], [2, 2, 2], [1, 2, 1]] ], # kernel 2 [ [[5, 1, 5], [2, 1, 2], [5, 1, 5]], [[1, 1, 1], [1, 1, 1], [1, 1, 1]], [[2, 0, 2], [0, 2, 0], [2, 0, 2]], ], # kernel 3 [ [[5, 1, 5], [2, 1, 2], [5, 1, 5]], [[1, 1, 1], [1, 1, 1], [1, 1, 1]], [[2, 0, 2], [0, 2, 0], [2, 0, 2]], ] ]) print(‘Filters:’, filters.shape) out = im2col(X, filters, stride=2, pad=0) print(‘Output:’, out.shape) print(out)

im2col 연산 예제 실행 결과는 다음과 같다.

Images: (2, 3, 5, 5) Filters: (3, 3, 3, 3) Output: (8, 27) [[1. 2. 9. 5. 0. 3. 4. 1. 3. 4. 5. 7. 5. 8. 5. 4. 2. 1. 3. 7. 4. 5. 4. 6. 6. 1. 9.] [9. 2. 7. 3. 1. 8. 3. 0. 6. 7. 0. 8. 5. 3. 5. 1. 6. 5. 4. 5. 0. 6. 8. 9. 9. 1. 6.] [4. 1. 3. 2. 5. 2. 6. 5. 1. 4. 2. 1. 7. 3. 2. 6. 1. 2. 6. 1. 9. 9. 3. 0. 1. 2. 5.] [3. 0. 6. 2. 9. 5. 1. 3. 2. 1. 6. 5. 2. 1. 0. 2. 2. 6. 9. 1. 6. 0. 2. 4. 5. 5. 2.] [7. 2. 1. 5. 4. 6. 1. 2. 4. 5. 4. 2. 6. 1. 4. 8. 9. 4. 7. 4. 8. 5. 5. 8. 3. 2. 2.] [1. 4. 2. 6. 5. 0. 4. 2. 8. 2. 5. 7. 4. 0. 5. 4. 7. 6. 8. 9. 7. 8. 1. 4. 2. 5. 2.] [1. 2. 4. 5. 9. 0. 7. 6. 2. 8. 9. 4. 4. 5. 5. 1. 2. 7. 3. 2. 2. 1. 0. 3. 4. 5. 4.] [4. 2. 8. 0. 5. 1. 2. 4. 6. 4. 7. 6. 5. 6. 7. 7. 4. 1. 2. 5. 2. 3. 7. 6. 4. 5. 5.]]

이렇게 구해진 im2col 결과 행렬(matrix)과 연산하기 위해 다음과 같이 커널(kernel) 또한 flatten을 진행 하면 된다. 결과적으로 두 행렬(matrix)에 대하여 행렬 곱(matrix multiplication)을 수행하여 결과를 구할 수 있다.

따라서 최종적인 코드는 다음과 같다.

import numpy as np def im2col(X, filters, stride=1, pad=0): n, c, h, w = X.shape n_f, _, filter_h, filter_w = filters.shape out_h = (h + 2 * pad – filter_h) // stride + 1 out_w = (w + 2 * pad – filter_w) // stride + 1 # add padding to height and width. in_X = np.pad(X, [(0, 0), (0, 0), (pad, pad), (pad, pad)], ‘constant’) out = np.zeros((n, c, filter_h, filter_w, out_h, out_w)) for h in range(filter_h): h_end = h + stride * out_h for w in range(filter_w): w_end = w + stride * out_w out[:, :, h, w, :, :] = in_X[:, :, h:h_end:stride, w:w_end:stride] out = out.transpose(0, 4, 5, 1, 2, 3).reshape(n * out_h * out_w, -1) return out X = np.asarray([ # image 1 [ [[1, 2, 9, 2, 7], [5, 0, 3, 1, 8], [4, 1, 3, 0, 6], [2, 5, 2, 9, 5], [6, 5, 1, 3, 2]], [[4, 5, 7, 0, 8], [5, 8, 5, 3, 5], [4, 2, 1, 6, 5], [7, 3, 2, 1, 0], [6, 1, 2, 2, 6]], [[3, 7, 4, 5, 0], [5, 4, 6, 8, 9], [6, 1, 9, 1, 6], [9, 3, 0, 2, 4], [1, 2, 5, 5, 2]] ], # image 2 [ [[7, 2, 1, 4, 2], [5, 4, 6, 5, 0], [1, 2, 4, 2, 8], [5, 9, 0, 5, 1], [7, 6, 2, 4, 6]], [[5, 4, 2, 5, 7], [6, 1, 4, 0, 5], [8, 9, 4, 7, 6], [4, 5, 5, 6, 7], [1, 2, 7, 4, 1]], [[7, 4, 8, 9, 7], [5, 5, 8, 1, 4], [3, 2, 2, 5, 2], [1, 0, 3, 7, 6], [4, 5, 4, 5, 5]] ] ]) print(‘Images:’, X.shape) filters = np.asarray([ # kernel 1 [ [[1, 0, 1], [0, 1, 0], [1, 0, 1]], [[3, 1, 3], [1, 3, 1], [3, 1, 3]], [[1, 2, 1], [2, 2, 2], [1, 2, 1]] ], # kernel 2 [ [[5, 1, 5], [2, 1, 2], [5, 1, 5]], [[1, 1, 1], [1, 1, 1], [1, 1, 1]], [[2, 0, 2], [0, 2, 0], [2, 0, 2]], ], # kernel 3 [ [[5, 1, 5], [2, 1, 2], [5, 1, 5]], [[1, 1, 1], [1, 1, 1], [1, 1, 1]], [[2, 0, 2], [0, 2, 0], [2, 0, 2]], ] ]) print(‘Filters:’, filters.shape) stride = 2 pad = 0 X_col = im2col(X, filters, stride=stride, pad=pad) n, c, h, w = X.shape n_f, _, filter_h, filter_w = filters.shape out_h = (h + 2 * pad – filter_h) // stride + 1 out_w = (w + 2 * pad – filter_w) // stride + 1 out = np.matmul(X_col, filters.reshape(n_f, -1).T) out = out.reshape(n, out_h, out_w, n_f) out = out.transpose(0, 3, 1, 2) print(‘Output:’, out.shape) print(out)

실행 결과는 다음과 같으며, 앞서 반복문을 이용한 구현 결과와 동일 하다.

Images: (2, 3, 5, 5) Filters: (3, 3, 3, 3) Output: (2, 3, 2, 2) [[[[174. 191.] [130. 122.]] [[197. 244.] [165. 159.]] [[197. 244.] [165. 159.]]] [[[168. 171.] [153. 185.]] [[188. 178.] [168. 200.]] [[188. 178.] [168. 200.]]]]

728×90

반응형

So you have finished reading the 동빈 나 블로그 topic article, if you find this article useful, please share it. Thank you very much. See more: 동빈나 github, 나동빈 포항공대, 나동빈 학교, 안경잡이, 동빈 나 선택 정렬, 안경쟁이, 안경잡이 짤, 이코 테

Leave a Comment