All59 [DeepLearning] Dive into Deep Learning 필사 7. Convolutional Neural Networks (CNN) (7.5. Pooling) 7.5. Pooling* Pooling: 입력 데이터의 공간적 차원을 축소하여 중요한 정보는 유지하고 계산량과 모델의 복잡성을 줄이기 위한 다운샘플링 기법CNN에서 주어진 feature map의 특정 영역에서 가장 중요한 값을 선택하거나 평균값을 취해 데이터를 압출한다.풀링의 목적은 계산 효율성 향상과 과적합 방지에 있다.최대 풀링 (max pooling)과 평균 풀링(average pooling)이 대표적이다.import torchfrom torch import nnfrom d2l import torch as d2l7.5.1. Maximum Pooling and Average Poolingdef pool2d(X, pool_size, mode='max'): p_h, p_w = pool_size .. 2024. 10. 8. [DeepLearning] Dive into Deep Learning 필사 7. Convolutional Neural Networks (CNN) (7.4. Multiple Input and Multiple Output Channels) 7.4. Multiple Input and Multiple Output Channels7.4.1. Multiple Input Channels* Multiple Input Channels 다중 입력 채널일반적으로 이미지 데이터를 처리할 때, 입력 데이터는 여러 개의 채널로 구성되어 있다. 다중 입력 채널을 처리하기 위해서는 각 입력 채널에 대해 별도의 커널을 적용하고 결과를 합산해야한다. def corr2d_multi_in(X, K): # Iterate through the 0th dimension (channel) of K first, then add them up return sum(d2l.corr2d(x, k) for x, k in zip(X, K)) X = torch.tensor([.. 2024. 10. 7. [DeepLearning] Dive into Deep Learning 필사 7. Convolutional Neural Networks (CNN) (7.3) 7.3. Padding and Stride7.3.1. Paddingimport torchfrom torch import nndef comp_conv2d(conv2d, X): X = X.reshape((1, 1) + X.shape) Y = conv2d(X) return Y.reshape(Y.shape[2:]) conv2d = nn.LazyConv2d(1, kernel_size=3, padding=1)X = torch.rand(size=(8, 8))comp_conv2d(conv2d, X).shapeconv2d = nn.LazyConv2d(1, kernel_size=(5, 3), padding=(2, 1))comp_conv2d(conv2d, X).shape7.3.2. Strideconv2d = nn.La.. 2024. 10. 6. [DeepLearning] Dive into Deep Learning 필사 7. Convolutional Neural Networks (CNN) (7.1 ~ 7.2) 7. Convolutional Neural Networks7.1. From Fully Connected Layers to Convolutions1. 합성곱의 핵심은 입력의 특정 부분(패치)에 필터를 적용하는 것이다. 커널의 크기가 Δ = 0이라는 것은, 커널이 단일 픽셀에만 적용된다는 의미이다. 즉, 각 입력 위치에서 다중 뉴런(채널별로 다르게)을 적용해 출력을 계산하는데, 이 과정이 MLP의 원리와 동일하다. 이를 수식으로 설명하면: 𝑦 𝑖 = 𝑊 𝑖 𝑥 𝑖 + 𝑏 𝑖 각 𝑖 에 대해 독립적으로 연산이 이루어지므로, 이것은 MLP가 각각의 입력 채널에 대해 독립적으로 적용되는 경우와 같다.이 방식은 Network in Network (NiN) 구조와 연결된다. NiN은 1x1 합성곱을.. 2024. 10. 3. [LeetCode] 169. Majority Element 안녕하세요 오늘은 LeetCode의 169. Majority Element 문제를 풀어보겠습니다. 이 문제는 주어진 배열에서 과반수 이상의 빈도로 나타나는 요소를 찾는 문제였습니다. 문제 조건으로는 O(n) 의 시간 복잡도, O(1)의 공간 복잡도 안에서 문제를 해결해보는 것이었습니다. 제가 작성한 코드는 다음과 같습니다. 먼저 candidate는 정답이 될 수 있는 배열 내의 요소이고, count 는 해당 요소가 나타난 횟수 입니다. for 문을 통해 배열을 돌며 후보와 카운트를 업데이트했습니다. class Solution: def majorityElement(self, nums: List[int]) -> int: candidate = None # 후보 요소 .. 2024. 10. 2. [LeetCode] 215. Kth Largest Element in an Array 안녕하세요! 오늘은 LeetCode의 215. Kth Largest Element in an Array 문제를 풀어보겠습니다. 이 문제는 주어진 정수 배열에서 k번째로 큰 요소를 찾는 것입니다. 정렬을 하지 않고 찾는 것이 문제의 조건이었습니다. 저는 알고리즘 수업시간에 배운 k-select 알고리즘을 적용해서 풀어보고 싶었습니다. 처음 작성했던 코드는 다음과 같습니다. class Solution: def findKthLargest(self, nums: List[int], k: int) -> int: while len(nums) >= 1: pivot_index = len(nums)//2 pivot = nums[pivot_inde.. 2024. 10. 1. [LeetCode] 83. Remove Duplicates from Sorted List 안녕하세요! 오늘은 83. Remove Duplicates from Sorted List 문제를 풀어보겠습니다. head는 이미 정렬된 linked list이고 head의 원소 중 중복된 원소가 없게 만드는 문제입니다. 제가 생각한 방법은 원소와 바로 다음 원소를 비교하며 같을 시 삭제해나가는 방법입니다. 사실 중복 제거를 보자마자 집합을 사용하는 방법을 먼저 떠올렸었는데요. 하지만 이 문제에서 head는 linked list이기 때문에 집합을 이용해 중복을 제거하기 위해서는 반복문을 통해 각 원소를 하나씩 순회하여 집합을 만들고 이를 다시 리스트로 만들어야하는데, 이 방법이 더 복잡하다고 합니다. 작성한 코드는 다음과 같습니다.# Definition for singly-linked list.# 연결 .. 2024. 9. 14. [LeetCode] 88. Merge Sorted Array 안녕하세요! 오늘부터는 LeetCode를 통해 알고리즘 문제를 풀어보려고 합니다. 오늘은 88번 Merge Sorted Array 문제를 풀어보겠습니다. 문제는 다음과 같습니다. 정수를 포함하고 있는 두 array를 합친 후 정수의 크기를 오름차순 sorting하는 문제였습니다. 정수 배열인 nums1, nums2가 있고, 각 배열의 원소의 개수는 m, n으로 표현하고 있습니다. nums1을 수정해서 답이 출력되도록 문제를 풀어야 했습니다. 제가 문제 풀이를 위해 접근한 방식은 먼저 nums1에 nums2의 원소를 모두 추가한 후, nums1의 원소를 오름차순 정렬하는 방법입니다. 코드는 다음과 같습니다. class Solution(object): def merge(self, nums1, m,.. 2024. 9. 13. [LangChain] 공식문서 Build a Chatbot 실습 (3) Prompt templates Prompt templates는 사용자의 raw information을 LLM이 작업할 수 있는 형식으로 변화하는 데에 도움을 줍니다. 오늘 실습에서는 먼저 사용자의 instructions이 포함된 system message를 추가해보겠습니다. 그 다음으로는 messages 이외에 다양한 input을 추가해보겠습니다. 다음과 같은 코드를 통해 input type을 변경할 수 있습니다. 단순한 메시지 대신, 메시지를 포함하고 있는 'messages key'를 딕셔너리 형태로 전달하게 됩니다. from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholderprompt = ChatPromptTemplate.f.. 2024. 8. 26. 검색증강생성 (RAG) 검색증강생성 (Retrieval-Augmented Generation, RAG)자연어처리에서 정보 검색과 생성 모델을 결합하여 질의에 대한 더 정확하고 정보에 기반한 응답을 제공하는 기술구조문서 또는 데이터 가공임베딩 모델언어 모델벡터 데이터 베이스프롬프트주요 개념정보검색 (Retrieval)RAG는 대규모 문서 집합에서 관련 문서를 검색하는 검색 모델을 사용이 검색 모델을 쿼리에 맞는 문서를 찾아내는 역할을 함생성 (Generation)검색된 문서를 기반으로 응답을 생성하는 생성 모델Transformer 같은 딥러닝 모델을 사용하여 검색된 문서의 내용을 바탕으로 자연스럽고 정보에 맞는 응답을 생성통합 (Combination)RAG는 검색고 생성을 결합하여 작동사용자의 질문에 대해 검색 모델이 관련 문서.. 2024. 7. 29. [LangChain] 공식문서 Build a Chatbot 실습 (2) 이번에는 모델에 기존 대화를 입력해서 맥락을 파악하게 해주고 그에 맞는 출력을 얻는 실습을 해보겠습니다.Message History먼저 메세지 history를 저장하기 위한 패키지를 설치하고 불러옵니다.!pip install langchain_community 그 다음 관련 클래스('BaseChatMessageHistory', 'InMemoryChatMessageHistory', 'RunnableWithMessageHistory')를 불러오고, 'get_session_history'라는 함수를 지정하여 기존 대화들을 저장할 수 있도록 해줍니다.from langchain_core.chat_history import ( BaseChatMessageHistory, InMemoryChatMessage.. 2024. 7. 26. [LangChain] 공식문서 Build a Chatbot 실습 (1) 오늘은 LangChain 공식 홈페이지에서 챗봇을 만드는 실습을 해보려고 합니다. 저는 주피터 노트북을 사용해서 실습을 진행해보았습니다. Setup 먼저 세팅 과정입니다. 필요한 라이브러리를 설치해줍니다. !pip install langchain 그리고 실습을 위해서는 OpenAI의 API가 필요합니다. 다음 링크로 가셔서 가입을 한 후, 해외 결제가 가능한 카드를 등록하시면 API를 받아서 사용하실 수 있습니다. 카드 등록을 하지 않으면 API 키를 입력해도 에러가 발생합니다. https://platform.openai.com/api-keys API를 발급 받으셨다면 다음 코드에 API 키를 입력하시면 됩니다.import getpassimport osos.environ["LANGCHAIN_TRACING.. 2024. 7. 25. 이전 1 2 3 4 5 다음