이런 갤이 있는거 방금 알아서 밤샌 김에 그냥 끄적임... 여기에 올려도 될 지는 모르겠는데 안되는 글이면 완장아 잘라줘용
라이브러리 자체는 완성이고 깃에 오픈 했긴 했는데 그거에 대한 논문? 레포트? 기술백서? 는 아직 미완성이라 자세한 내부 로직은 말 못함.
제대로 된 단어를 모르는 이유는 내가 랩실이라는 곳에 발도 안들여 본 학부생이라 이런 쪽 연구 용어를 몰라서 그럼
어쨌든 이게 대충 설명하자면, 자바에서 파이썬 넘파이마냥 라이브러리 하나 딸깍 객체 선언 딸각 하면 GPU 돌림
CuBridge cb = CuBridge.getInstance();
Tensor t1 = new Tensor(new double[] {1, 2, 3, 1, 2, 3}, new int[] {3, 2});
Tensor t2 = new Tensor(new double[] {1, 2, 3, 1, 2, 3}, new int[] {1, 6});
cb.put(t1).put(t2)
.add()
.get()
.printData();
Consol :
Tensor(shape=[3, 6]):
[ 2.000, 3.000, 4.000, 3.000, 4.000, 5.000 ]
[ 4.000, 5.000, 6.000, 2.000, 3.000, 4.000 ]
[ 3.000, 4.000, 5.000, 4.000, 5.000, 6.000 ]
대충 이러면 알아서 gpu로 (3, 6) add 해서 뱉음... 은 시발 저거 결과가 좀 이상하네 아 시발 버그
일단 저거 브로드캐스팅은 넘파이꺼 개량해서 직접 만듦. 그래서 N 배수 브로드캐스팅도 됨
내부적으로 최적화 짜놔서 10억개 원소 벡터 두 개 연산도 가능함.
add 뿐만 아니라 일단 기본 대수연산들은 다 구현해놨음. im2col col2im affine 등도.
일단 이리 만들었다구 머... 나중에 버그 잡고 다시 옴.
+
버그 잡음 시이발. 내가 만든 브로드캐스팅 함수 for문이 잘못되어 있었음. 121212가 아니라 111222 형태로 확장되는 문제.
Tensor(shape=[3, 2]):
[ 1.000, 2.000 ]
[ 3.000, 1.000 ]
[ 2.000, 3.000 ]
Tensor(shape=[1, 6]):
[ 1.000, 2.000, 3.000, 1.000, 2.000, 3.000 ]
Tensor(shape=[3, 6]):
[ 2.000, 4.000, 4.000, 3.000, 3.000, 5.000 ]
[ 4.000, 3.000, 6.000, 2.000, 5.000, 4.000 ]
[ 3.000, 5.000, 5.000, 4.000, 4.000, 6.000 ]
이제 제대로 나온다 시발...
오 어떤 방식으로 구헌했어? cuda 로 직접 구현함?
자바로 프론트엔드 cpp/cuda로 백엔드. 쿠다 자동 감지해서 gpu없으면 알아서 cpu로 돌림.
autograd도 구현 되어있음? - dc App
추가 예정
그냥 tensorflow java쓰면 되는거 아닌가
성격이 다름. 신경망 컨스트럭터 자체가 아니라 선형대수 GPU 가속기임. 그래서 더 가볍고 간단하고 무엇보다 try 떡칠 ㅈ까도 됨. 한줄요약 하자면 텐서플로우가 아니라 넘파이라고.
신기하다개추