목록전체보기 (408)
NeuroWhAI의 잡블로그
https://ideone.com/jBCPmV #include using namespace std; int main() { // a[i] == *(a + i) == *(i + a) == i[a] int a[] = { 1, 2, 3, 4 }; cout
원서는 2017년에 나왔고 저는 번역서를 구매했습니다. 그런데 찜 해놓았다가 구매 직전, 우연히 리뷰를 봤는데 번역이 이상하다고 해서 좀 망설였지만 결국 샀습니다. 하지만 제가 그동안의 꾸준한 구글 번역기 사용으로 번역체에 익숙해졌기 때문에 책 내용 이해에 크게 무리는 없었습니다(?) (번역기가 뱉는 말이 한글로 된 한국어가 아닌 언어라도 언어는 언어이니 이해할 수 있습니다) 아무튼 이 책은 C++11부터 C++20까지의 표준 라이브러리를 이용한 동시성 프로그래밍을 소개하는 책입니다. 다만 중요한건 어디까지나 맛보기라는 점입니다. 라이브러리를 사용하는 예제는 꽤 있지만 동시성 프로그래밍을 위한 지침의 구체적인 적용 예시는 많이 없습니다. 근데 난이도도 쉬울 줄 알았더니 처음부터 듣도 보도 못했던 메모리 ..
std::nth_element는 부분 정렬 알고리즘입니다.구체적인 동작은 이름에서 알 수 있듯이 n번째 요소를 얻을 수 있게 해주는 녀석인데요.무슨 기준으로 n번째냐고 하면 정렬되었을 때를 말합니다.v = [1 3 2 4]이고 n을 0부터라고 하였을 때 n=2라고 하면 알고리즘 수행 후 v[2]는 3이 됩니다.또한 v[:2]은 v[2]보다 작거나 같은 수만 있게 되며 당연히 v[3:]은 v[2]보다 작거나 큰 수만 있게 됩니다.(cppreference의 설명으로 하자면 v[:2]는 v[3:]의 수 보다 작거나 같다입니다.)비교 함수를 바꿔 주면 다르게 정렬된 상태에서의 n번째 요소를 얻을 수 있습니다. 대략적인 형태는 template void nth_element( Ran..
저번에 따로 해봤는데 잘 안되었던 이유가 모델이 이상한건지 이미지가 커서 그랬던건지 모르겠어서 일단 모델을 새로 설계하고 32x32x3(RGB)의 작은 사이즈로 시도했습니다. 그랬더니 학습이 잘 진행되더군요. 아래는 대략 800장의 이미지를 900~1000 에포크 동안 학습한 결과물입니다. 코드는 아래와 같습니다. import os.path import numpy as np from keras.models import * from keras.layers import * from keras.optimizers import * import keras.backend as K import matplotlib.pyplot as plt K.set_image_data_format('channels_last') cla..
사실 정석의 DCGAN과는 차이(드롭아웃을 썼다거나)가 있지만 신경망 구성이야 쉽게 바꿀 수 있으니 틀만 보신다는 느낌으로 봐주세요.참고로 제가 처음부터 짠 코드는 아니고 오픈소스를 좀 수정했습니다. import numpy as np from keras.models import * from keras.layers import * from keras.optimizers import * from keras.datasets import mnist import keras.backend as K import matplotlib.pyplot as plt K.set_image_data_format('channels_last') class Gan: def __init__(self, img_data): img_size ..
참고 : https://stackoverflow.com/questions/52216426/access-to-external-crates-from-module extern crate adder; /* mod adder { pub fn add(a: i32, b: i32) -> i32 { a + b } } */ #[cfg(test)] mod tests { #[test] fn it_works() { assert_eq!(adder::add(2, 2), 4); } }대충 위 코드처럼 했는데 안되더라고요.분명 레퍼런스에서 읽었던 내용 같은데 까먹음 ㅎㅎ;; super::adder::add(2, 2)이렇게 바꾸면 되고 혹은 #[cfg(test)] mod tests { use adder::{self}; ... }이렇게 ..
C++로 비유하면 Rc는 shared_ptr, Weak는 weak_ptr입니다.다만 스레드 안전하지 않다는 점이 다릅니다.스레드 안전한 구현은 std::sync에 Arc, Weak라는 이름으로 있습니다. 아래는 cppreference의 weak_ptr::lock 예제 코드를 Rust버전으로 옮겨 본 예제 코드입니다. use std::rc::{Rc, Weak}; fn observe(w_ptr: &Weak) { if let Some(rc_ptr) = w_ptr.upgrade() { println!("\tobserve() able to upgrade Weak, value={}", *rc_ptr); } else { println!("\tobserve() unable to upgrade Weak"); } } fn..
https://www.vultr.com/?ref=6876092 잘 부탁드립니다 ㅋㅋ...
https://en.cppreference.com/w/cpp/thread/shared_mutexhttps://en.cppreference.com/w/cpp/thread/shared_lock 딱히 쓸 일이 없어서 몰랐는데 책에서 나왔으니 한번 봤습니다.shared_mutex 헤더에 있다고 하네요. 아래는 사용 예시. (mutex와는 별개의 이유로 C++17 이상에서만 컴파일 됩니다!) #include #include #include #include #include // 원자적인 카운터 class AtomicCounter { private: int m_counter = 0; mutable std::shared_mutex m_mutex; public: int getCount() const { std::shar..