목록개발 및 공부 (189)
NeuroWhAI의 잡블로그
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://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..
https://en.cppreference.com/w/cpp/atomic/memory_orderhttps://stackoverflow.com/questions/12346487/what-do-each-memory-order-meanhttp://egloos.zum.com/sweeper/v/3059861https://www.slideshare.net/seao/c-atomic 허.. 이런게 있을 줄은 몰랐네요.새로 산 책에서 계속 나오는데 설명은 못알아먹겠고 ㅠㅠ아래는 한번 정리해본 내용인데 틀린 내용 지적 부탁드립니다 ㅠ // Thread 1: r1 = y.load(memory_order_relaxed); // A x.store(r1, memory_order_relaxed); // B // Thread 2: ..
package com.neurowhai class Foo { private fun privateObj() = object { val x = 42 } fun publicObj() = object { val x = 42 } fun test() { println(privateObj().x) //println(publicObj().x) // ERROR! } } // 객체 선언 (싱글톤) object Neurowhai { fun sayHi() = println("Hi") val name = "NeuroWhAI" } interface Factory { fun create(): T } // 동반자(?) 객체 class MyClass { var a = 0 companion object Abc/*이름 생략 가능*/ : ..
#![feature(plugin)] #![plugin(rocket_codegen)] extern crate rocket; use std::path::{PathBuf, Path}; use rocket::response::{NamedFile}; #[get("/static/")] fn files(file: PathBuf) -> Option { NamedFile::open(Path::new("static/").join(file)).ok() } fn main() { rocket::ignite() .mount("/", routes![files]) .launch(); }끝....? (현재 경로)/static 폴더 아래에 위치한 파일이면 다 취득할 수 있습니당.꿀잼.
Rocket은 Rust의 웹 프레임워크입니다. 이 글에서는 Rocket을 이용해 접속시 Hello, world!를 응답하는 웹 서버를 만들고 Heroku에 올려 모든 사람이 볼 수 있도록 해보겠습니다. 결과 : https://hello-rocket.herokuapp.com 소스코드 : https://github.com/NeuroWhAI/hello-rocket (설명은 소스코드 링크에도 있으니 참고 바랍니다) 먼저 아래 명령어로 새로운 Rust 프로젝트를 만들겠습니다. cargo new hello-rocket --bin 앞으로의 모든 작업은 hello-rocket 폴더에서 이뤄집니다. 만약 프로젝트 이름을 바꾸셨다면 주의해서 명령어를 입력해주세요. Cargo.toml 파일을 열어 Rocket을 종속성에 추..