분류 전체보기
-
PyTorch를 활용한 신경망 모델 정의Pytorch 2025. 3. 10. 11:20
PyTorch에서 신경망을 정의하는 방법을 정리한다.모델을 생성할 때는 nn.Module을 상속받아 필요한 레이어를 정의하고, forward() 메서드에서 연산을 수행하도록 구성한다.1. 신경망 모델 정의 (nn.Module 사용)import torchimport torch.nn as nnclass NeuralNetwork(nn.Module): def __init__(self): super().__init__() self.fc1 = nn.Linear(7, 32) # 입력 차원 7 → 은닉층 32 self.fc2 = nn.Linear(32, 1) # 은닉층 32 → 출력층 1 self.relu = nn.ReLU() self.sigmoi..
-
PyTorch 모델 학습 및 평가 코드 이해하기Pytorch 2025. 3. 10. 11:17
PyTorch를 사용하여 모델을 학습하고 평가하는 과정에서 중요한 개념과 코드를 정리한다.특히, train()과 evaluate() 함수에서의 주요 동작을 하나씩 분석하며, 학습과 평가의 차이를 명확히 이해한다.1. 학습 코드 (train 함수)import torchimport torch.nn as nncriterion = nn.BCELoss()optimizer = nn.Adam(model.parameters(), lr=0.01)def train(model, train_loader, optimizer, criterion, device): model.train() # 모델을 학습 모드로 설정 running_loss = 0.0 for data, label in train_loader: ..
-
PyTorch의 view()와 reshape() 비교Pytorch 2025. 3. 6. 12:52
PyTorch에서 텐서의 크기를 변경하는 두 가지 주요 방법은 view()와 reshape()이다. 두 함수 모두 기존 텐서의 크기를 변경할 수 있지만, 내부적으로 동작 방식에 차이가 있다. 본 글에서는 두 함수의 차이점과 언제 각각을 사용해야 하는지 설명한다.1. view() 함수view()는 기존 텐서의 메모리 공유를 유지하면서 크기를 변경한다. 즉, 원본 텐서와 새로운 텐서는 같은 메모리를 가리키므로, 하나를 변경하면 다른 하나에도 영향을 미친다. 하지만 view()를 사용하려면 텐서가 연속적인(Contiguous) 메모리 레이아웃을 가져야 한다.예제 코드:import torchtensor = torch.arange(6).reshape(2, 3)view_tensor = tensor.view(3, 2..
-
C++ 스마트 포인터(Smart Pointer) 이해하기c++ 2025. 3. 2. 21:34
C++의 스마트 포인터는 메모리 관리 자동화를 위한 도구로, 수동으로 new 및 delete를 호출하는 번거로움을 줄이고 메모리 누수(memory leak) 문제를 방지하는 데 도움을 준다. 스마트 포인터는 C++11 이후부터 표준 라이브러리에 포함되었으며, std::unique_ptr, std::shared_ptr, std::weak_ptr가 주요 타입이다.이번 글에서는 스마트 포인터의 종류와 사용법을 예제와 함께 자세히 살펴본다.1. std::unique_ptr - 단일 소유권 스마트 포인터특징객체에 대한 단 하나의 소유자만 존재할 수 있다.복사가 불가능하지만 이동(move) 가능하다.객체가 소유권을 잃으면 자동으로 해제된다.사용 예제#include #include class Resource {pub..
-
고급 문법과 최적화c++ 2025. 3. 2. 19:19
C++는 강력한 성능과 유연성을 제공하는 언어지만, 효과적으로 사용하기 위해서는 고급 문법과 최적화 기법을 이해해야 한다. 특히 제품 수준의 C++ 코딩에서는 성능과 유지보수성을 동시에 고려하는 것이 중요하다.이번 포스트에서는 C++의 고급 기능과 성능 최적화 방법을 설명한다.1. Modern C++ (C++11, C++14, C++17, C++20)의 핵심 기능스마트 포인터(Smart Pointer)C++의 **new**와 **delete**를 직접 사용하는 것은 메모리 누수와 관련된 버그를 초래할 가능성이 있다. 이를 방지하기 위해 스마트 포인터를 사용한다.#include void useSmartPointer() { std::unique_ptr ptr = std::make_unique(10); ..
-
코드 품질과 유지보수성c++ 2025. 3. 2. 19:13
제품 수준(Product-Level) C++ 코딩: 코드 품질과 유지보수성소프트웨어 제품 개발에서는 코드 품질과 유지보수성이 매우 중요하다. 개인 프로젝트에서는 단순히 동작하는 코드를 작성하는 것이 목표일 수 있지만, 제품 수준의 C++ 코딩에서는 장기적인 유지보수와 확장성을 고려해야 한다.이번 포스트에서는 코드 품질과 유지보수성을 높이기 위한 핵심 원칙을 설명한다.1. 클린 코드 작성클린 코드(Clean Code)란 읽기 쉽고 유지보수하기 쉬운 코드를 의미한다. 코드는 개발자뿐만 아니라 팀원, 미래의 유지보수 담당자도 쉽게 이해할 수 있어야 한다.가독성이 높은 코드 작성아래 두 코드를 비교해 보자.가독성이 낮은 코드 예시int f(int a, int b) { return a * b - (a + b..
-
C++ 구조체 vs 클래스: 차이점과 올바른 활용법c++ 2025. 2. 24. 19:03
C++에서 구조체(struct)와 클래스(class)의 차이는 많은 프로그래머들이 한 번쯤 궁금해하는 주제입니다. 구조체와 클래스 모두 데이터를 담을 수 있는 사용자 정의 데이터 타입이지만, 몇 가지 중요한 차이점이 존재합니다.1. 기본 접근 제어자의 차이구조체와 클래스의 가장 큰 차이점은 멤버 변수 및 함수의 기본 접근 제어자가 다르다는 점입니다.구조체(struct): 기본적으로 public 접근 지정자를 가집니다.클래스(class): 기본적으로 private 접근 지정자를 가집니다.예제 코드로 확인해보겠습니다.#include using namespace std;struct MyStruct { int a; // 기본적으로 public};class MyClass { int a; // 기본적..
-
Android에서 Camera2 API를 활용한 RAW 이미지 캡처영상처리 2025. 2. 24. 16:20
일반적인 스마트폰 카메라는 JPG 형식의 이미지만 저장하지만, 보다 높은 화질과 후처리 가능성을 위해 RAW 이미지를 캡처하는 방법이 필요합니다. Camera2 API를 활용하면 스마트폰의 센서 데이터를 직접 RAW 포맷으로 저장할 수 있습니다. 이 글에서는 RAW 이미지 캡처 앱을 개발하는 방법을 설명합니다.1. RAW 이미지 캡처의 원리 RAW 데이터란?RAW 데이터는 이미지 센서에서 수집된 원본 픽셀 정보를 그대로 저장하는 파일 형식입니다. 일반적으로 DNG(Digital Negative), ARW, CR2, NEF 등의 확장자로 저장됩니다. JPG와 달리, 압축 과정이 없어 세부 정보를 보존하며, 후처리를 통해 화이트 밸런스, 노출, 색감을 자유롭게 조정할 수 있습니다. Android에서 RAW ..