반응형

Modern C++

[C++17] 템플릿 인자를 생략한다? Deduction Guide

​1부터 10까지 저장하는 배열을 하나 생성해보죠. int nArray[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 아니면 간단히 int arr[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // C++11에는 중괄호를 두 번씩 써야 함: {{1, 2, 3 ... 10}} std::array array{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 그런데, 자료형이 모두 int이고 그 개수가 10개라는건 뻔히 알 수 있습니다. 굳이 이 필요할까요? ​ 그래서 C++17에서는 Deduction Guide라는 것을 사용합니다. 만약에, 우리가 어떤 (템플릿) 클래스를 만드는데, 생성자의 매개변수가 문자열일때, char*가 아닌 std::string으로 받..

C++ 2020.03.21 0

C++17 주요 기능 정리 (1) - 유용한 기능 편

이 글의 모든 예제 코드는 C++17 이상에서만 동작합니다. (GCC 7-8, MSVC 19.14) Nested namespace definition 중첩 네임스페이스 정의 만약 여러분이 outer라는 네임스페이스를 만들고 그 안에 inner라는 네임스페이스를 만든다면 namespace outer { namespace inner { // 어쩌구 저쩌구 } } 일반적으로 이렇게 작성하시겠죠, 하지만 이렇게 두줄이나 낭비할 필요가 있을까요? outer 네임스페이스는 inner 네임스페이스를 제외하면 '빈공간' 입니다. 굳이 중괄호를 두번씩 쓸 필요가 없겠죠. C++17에는 Nested namespace definition이 있습니다. namespace outer::inner { // 어쩌구 저쩌구 } 훨씬 ..

C++ 2020.03.21 0

[C++11] 템플릿으로 배열을 함수에 넘기기

C언어에서, 배열을 함수로 전달하려면 어떻게 해야 했죠? 네. 맞습니다. 바로 포인터를 이용하는 것인데요, void func(int arr[], int size); void func(int *arr, int size); 위와 같이 arr은 포인터 (첫번째줄도 사실 포인터입니다) 로 받고, 배열의 크기는 알 수 없으므로 따로 정수형의 size매개변수를 따로 받았죠. 하지만 이 방식에는 단점이 있습니다. 일단 배열의 사이즈를 모르기 때문에 직접 size로 넘겨야하는 게 가장 큰 문제인데요, ​ C++에서는 템플릿을 통해 문제를 해결합니다. template void func(int (&arr)[N]); 다른 타입을 받고 싶다면 int부분을 수정해주면 됩니다. int (&arr)[N]이 생소하실 수 있는데, 하..

C++ 2020.03.21 0

AI & Deep Learning

more

머신러닝 대표 알고리즘의 종류: 선형 회귀, 로지스틱 회귀, 결정 트리, K-최근접 이웃 회귀

환영합니다, Rolling Ress의 카루입니다. ​ 이번에는 인공지능에서 사용되는 머신러닝 알고리즘 중 유명한 것들 몇 개를 골라 자세히 비교해보겠습니다. 언어와 매체 수행평가의 일환으로 그동안 올린 것들을 좀 정리해보는 시간이 될 거예요. 자세한 설명을 하기 전에, 간단하게 요약 설명 먼저 제시해드리겠습니다. ​ 1. 선형 회귀(Linear Regression) 특징: 독립변수 x와 종속변수 y의 관계를 선형으로 모델링한 것 (y=wx+b) 장점: 비교적 간단하고 성능이 뛰어난 편에 속함 단점: 음수값이 나오면 안 되는 상황에선 단순 선형 회귀를 사용할 수 없다. ​ 2. 로지스틱 회귀 (Logistic Regression) 특징: 선형 회귀를 사용하며, 이름은 회귀이지만 실제로는 분류 모델에 가까운..

C# 머신러닝 프로젝트: NOCHES 멤버의 말투를 잡아라!

환영합니다, Rolling Ress의 카루입니다. ​ C# 으로 머신러닝 모델을 학습시킬 수 있다는 걸 알고.. 부리나케 준비했습니다. NOCHES 친구들과 함께 실험을 진행했는데, 확인해보시죠. Rolling Ress 실험 개요 ======================== 진행자: 카루 진행기관: Rolling Ress ​ 피실험자: ㄴ**, ㅂ**, ㅅ**, ㅅ**, ㅇ** ​ 실험 개요: - 머신러닝을 통한 기계의 언어 분류 - 피실험자의 NOCHES 카톡 데이터를 사용할 예정 ​ - 개인의 카톡 데이터를 학습시킨 뒤 임의의 문장을 넣었을 때 누구의 말투와 가장 비슷한지 알려줌 ​ 기대 효과: - 다른 멤버 말투 따라하기 전에 진짜 그 멤버 말투인지 검증 가능 ​ 피실험자 유의사항: 없음. 평소처럼..

머신러닝&딥러닝 기초(6): 처음 만드는 인공신경망

이제 머신러닝을 어느 정도 했으니, 딥러닝으로 넘어가보자. tensorflow를 설치할 건데, 아래 명령어를 통해서 설치할 수 있다. PS > pip install tensorflow 설치가 완료되면 다시 주피터 노트북을 켠다. 참고로 이 과정들이 귀찮다면, 그냥 구글 코랩을 사용하면 된다. 이미 설치도 다 되어 있다. 어쨌든, 완료되면 맨 위의 코드를 실행한다. 전달받은 데이터를 확인해보면 뭔가 많다. 이건 흑백 사진이다. cmap에서 gray_r은 회색으로 하되, 이미지를 반전시키라는 뜻이다. 0은 검은색이고 255(0xFF)는 흰색이다. 그런데 0은 연산을 해봤자 곱해버리면 0이다. 배경보다 피사체에 집중하기 위해 일부러 색 정보를 반전시키는 것이다. 회색이 아니라 다른 계열로도 설정할 수 있다. ..

머신러닝&딥러닝 기초(5): 결정 트리, 교차 검증과 그리드 서치, 앙상블

이진 분류에는 트리가 제격이다. 두 가지의 애매한 것들이 있을 때, 이진 트리를 분류할 수 있다. 이때 트리는 위에서 아래 방향으로 진행되며, 조건식이 참인 경우 왼쪽으로, 거짓인 경우 오른쪽으로 진행된다. 보통 자료 저장용 트리의 경우엔 값이 작으면 왼쪽으로, 크면 오른쪽으로 저장된다. 그러나 머신러닝에서의 결정 트리는 약간 다르다. 지금 보면 트리 내부에 조건식이 하나 달려있다. 이것을 토대로 조건식이 참인 노드는 왼쪽으로, 거짓인 노드는 오른쪽으로 파생된다. gini는 gini impurity, 지니 불순도를 뜻한다. 음성 클래스 비율을 n, 양성 클래스 비율을 p라 할 때, 지니 불순도 g는 이렇게 계산할 수 있다. ​ 어느 한 쪽에 클래스가 치우칠수록 gini 불순도는 0에 가까워진다. 0에 도..

Other Languages

파이썬 코딩 효율을 크게 높여주는 7가지 팁들

환영합니다, Rolling Ress의 카루입니다. ​ 오늘은 파이썬입니다. 사실 제가 파이썬과는 연이 그다지 깊지가 않아서... 파이썬이 Type Reflection이 되던가요? VS에서 C# 쓰다가 VS Code로 파이썬 쓰려니 IntelliSense가 정말 좋지 않아서 못 쓰겠더라고요. 그래도 뭐...프로그래밍 입문자에게 파이썬을 많이 추천하는 추세니 글을 써볼까 합니다. ​ 초보자 분들부터 숙련자 분들에게까지 적용될 수 있는 팁을 두루두루 가져와봤어요. 아니다, 내용이 내용인지라 상당히 어려워요. 특히 마지막 switch 패턴매칭은 꽤 골치 아플 거예요. 그래도 중요하니까, 꼭 보고 가세요. ​ 목차 1. read_csv()를 웹에서 바로 2. 변수 선언 시 타입 사용 3. 함수의 파라미터 타입 제..

Python 2022.02.16 0

C# 9.0: switch의 기능, 이젠 이런 것까지?

환영합니다, Rolling Ress의 카루입니다. ​ 에...제 주력 언어는 원래 C++입니다. 그런데 요즘에 UWP 앱을 개발하면서 (거의 반 강제적으로) C#을 쓰게 되었는데, 재밌네요. 특히 비주얼 스튜디오에서 제공하는 C#의 강력한 인텔리센스 기능과 자동 완성 등이 너무 편해서 당분간은 C#을 애용하게 될 것 같습니다. ​ 오늘은 제가 특히 편리하다고 생각하는 C#의 문법 중 switch에 대해서 알아보겠습니다. 사실 'switch ~ case' 자체는 다른 언어에서도 종종 나와서 익숙하신 분들이 많을 겁니다. 주어진 식에 따라 분기를 나누는 역할을 하죠. int flag = 3; switch (flag) { case 1: DoFunc1(); break; case 2: DoFunc2(); brea..

C# & .NET 2021.05.14 0

[C11] C언어 표준 스레드 실행

C11에 들어서면서 C언어도 정식으로 스레드를 지원하기 시작했습니다. #include 만 해 주시면 모든 준비가 끝납니다. #include #include #include int func() { thrd_sleep(&(struct timespec){.tv_sec=3}, NULL); puts("func()"); } int main() { thrd_t thread; // 스레드 타입 변수 int result; // 결과값 thrd_create(&thread, func, NULL); thrd_join(thread, &result); printf("result: %d", result); } 간단합니다. C++에서처럼 thrd_t 변수를 선언하고, thrd_create를 통해 스레드를 생성합니다. int thrd..

[셰어텍] 7. '.NET 네이티브 툴체인' 버그 및 타겟 변경

환영합니다, Rolling Ress의 카루입니다. ​ Co-net에 문제가 생겼습니다. 버전 0.1.3에서 일어났던 일인데, 스토어에서 앱을 다운받고 실행하면 아래와 같은 메시지가 나옵니다. 이것도 모자라서 그 뒤에 에러가 하나 더 뜹니다. 이건 뭐 큰 문제는 아니에요. 원래 GGHS Time Table도 그렇고, GGHS Todo도 그렇고 문제가 생기면 저에게 자동으로 오류를 보고할 수 있도록 프로그래밍을 해뒀습니다. 모종의 이유로 지금 메일이 보내지지 않아서 문제가 생기는 거니까, 프로그램 문제는 아니에요. 그런데, 문제는 저 첫번째 오류입니다. 계속 디버그를 하면서 오류를 잡았습니다. 뭐가 문제일까? 결론은 좀 허무했지만... 단서들을 순서대로 써보겠습니다. ​ 1. 내 PC에서는 정상적으로 실행이..

셰어텍 2021.10.14 0
반응형