조이 생각

반응형

( ※ 본 포스팅은 저자 개인의 한정적인 지식을 바탕으로 쓰여진 글입니다. 내용의 오류나, 오타 등을 언제든지 알려주시면 감사하겠습니다.)



파이썬에서 TensorFlow를 이용한 학습 모델을 Java에서 실행할 수 있다고 합니다.


이번 포스팅에서는

텐서플로우 모델을 자바에서 실행하기 위해 설치를 다뤄보고

간단한 예제인 HelloTF.java 를 실행해보려고 합니다.



주의사항은 


[이전 포스팅] 아나콘다로 윈도우즈에 텐서플로우 설치하기


2017/12/06 - [TensorFlow] - [텐서플로우] 아나콘다를 이용하여 윈도우즈에 텐서플로우 설치하기


이전 글과 같이 windows 64bit 에서만 가능하다고 하네요.




실행환경


- OS : 윈도우7 (Windows 7 64bit)

- 이클립스 (Eclipse Jee Oxygen)

- 텐서플로우 (TensorFlow 1.4.0)

- 자바 (Java 1.8.0)



1. 파일 다운로드


https://www.tensorflow.org/install/install_java#install_on_windows


(2020.05.18 수정)



(2017년도 화면)


링크를 타고 들어가 libtensorflow.jar 를 눌러 다운로드 받습니다.


압축 파일을 풀고 아래와 같은 상태로 만들어 줍니다.




2. 프로젝트 생성


새로운 자바 프로젝트를 생성한 다음 클래스를 생성합니다.







생성된 클래스에 다음 코드를 입력합니다. 



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package recom.tensorflow.tutorial;
import org.tensorflow.Graph;
import org.tensorflow.Session;
import org.tensorflow.Tensor;
import org.tensorflow.TensorFlow;
public class HelloTF {
  public static void main(String[] args) throws Exception {
    try (Graph g = new Graph()) {
      final String value = "Hello T " + TensorFlow.version();
      // Construct the computation graph with a single operation, a constant
      // named "MyConst" with a value "value".
      try (Tensor t = Tensor.create(value.getBytes("UTF-8"))) {
        // The Java API doesn't yet include convenience functions for adding operations.
        g.opBuilder("Const""MyConst").setAttr("dtype", t.dataType()).setAttr("value", t).build();
      }
      // Execute the "MyConst" operation in a Session.
      try (Session s = new Session(g);
           Tensor output = s.runner().fetch("MyConst").run().get(0)) {
        System.out.println(new String(output.bytesValue(), "UTF-8"));
      }
    }
  }
}
cs



현재 상태에서는 import 부분이 빨간줄로 떠있을 것입니다.




3. 텐서플로우 설치


맨 처음 다운받았던 파일들을 적용할 차례입니다.


먼저 jar 파일을 import 하기 위해서 프로젝트 폴더로 복사합니다.





프로젝트를 우클릭해서 properties 메뉴로 들어가면 아래와 같은 화면이 나옵니다.


오른쪽에 Add JARs... 를 클릭하시고 ④번과 같이 추가해주시면 됩니다.







정상적으로 jar 파일이 추가되면 import에 있던 빨간줄이 사라지게 된 것을 볼 수 있습니다.





이제 dll 파일을 적용하기 위해 해더파일을 생성하겠습니다.


이클립스 상단 매뉴바에 재생버튼과 빨간 가방? 같은 것이 함께 있는 아이콘을 클릭하고


External Tools Configurations... 에 들어갑니다.




Program 부분을 클릭하고 왼쪽 위에 빈 종이를 누르면


새로운 configuration이 생성됩니다.


Location 부분에 본인의 javah.exe 위치를 설정하고,  

(제 기준으로 > C:\Program Files\Java\jdk1.8.0_131\bin\javah.exe  에 있었고, 자신의 jdk 위치에 가시면 됩니다.)


Working Directory 부분에 현재 프로젝트의 bin 위치를 설정합니다.


빨간네모는 안되어있지만, Arguments에 -jni -verbose ${java_type_name} 를 입력하고 


Apply > Run 





정상적으로 실행이되면 아래와 같은 메시지가 출력되고,


HelloTF.h 헤더파일이 현재 프로젝트 bin 위치에 생성된 것을 확인합니다.


(혹시 에러가 난다면....)

[이전 포스팅] 아나콘다로 윈도우즈에 텐서플로우 설치하기

2019/08/16 - [머신러닝/TensorFlow] - 텐서플로우 JAVA 실행 오류









4. JNI 설정 및 실행



마지막으로 jni 파일을 설정해 보도록 합시다.


JNI(Java Native Interface)를 간단히 설명드리자면, 


자바 가상 머신(JVM)에 실행되는 자바 코드를 다른 언어들로 구현된 라이브러리에 의해 호출되거나 호출할 수 있는 프로그래밍 프레임 워크입니다.

(출처 위키백과 : 

https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_%EB%84%A4%EC%9D%B4%ED%8B%B0%EB%B8%8C_%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4 )



맨 처음에 다운받아 압축 풀었던 폴더에 있는 

tensorflow_jni.dll 파일을 프로젝트 위치에 복사해 줍니다.





다시 이클립스로 돌아와서


Run Configurations 메뉴를 열고 왼쪽 부분에 Java Application이 제대로 선택 되었는지 확인 후


아래 그림과 같이 Arguments 탭 > VM arguments -Djava.library.path=. 를 입력해 줍니다.





마지막으로 Run 버튼을 눌러 실행시켜주면!


아래와 같이 Hello from 1.4.0 이 출력되는 것을 보실 수 있습니다.





다음 포스팅에서는 파이썬에서 학습한 모델을 자바에서 실행해보는 내용을 다뤄 보려고 합니다.




읽어주셔서 감사합니다. : )

반응형

이 글을 공유합시다

facebook twitter kakaoTalk kakaostory naver band
loading