TensorFlow 1.7 텐서플로우 1.7 버전의 세부적인 기능과 업데이트 내용을 설명드립니다.
버전 1.7 부터 tf.contrib.data.SqlDataset을 사용하여 SQLite 파일로 부터 바로 SQL 쿼리를 이용하여 데이터베이스 데이터를 읽을 수 있습니다. 그리고 tf.custom_gradient을 이용하여 쉽게 커스터마이징 할 수 있는 기능과 자연어 처리를 위한 정규 표현식 기능 등이 추가되었습니다. 그외에 TensorRT와 통합 되는 등 기능 추가 외에도 몇가지 버그들이 함께 수정되었습니다.
현재 출시된 텐서플로우 1.7 버전은 정식 버전이기 때문에 아래의 동일한 명령어로 신규설치 또는 업데이트 가능합니다.
$ pip install --upgrade tensorflow
그리고 현재 소스코드에서 태깅된 버전 이름은 v1.7.0 으로, 태깅된 버전으로 직접 소스코드를 빌드하여 설치하실 수 도 있습니다. 소스코드로 부터 빌드하는 방법은 아래의 글을 참고해 주시기 바랍니다.
주요 내용
- Eager execution이 기존 tf.contrib.eager.enable_eager_execution()에서 tf.enable_eager_execution() 으로 변경
- tf.contrib.quantize 패키지에서 Tensorflow Lite와 호환성 강화
- TensorFlow Debugger (tfdbg)의 GUI인 TensorBoard 디버그 플러그인이 알파 버전으로 태깅
- tf.contrib.data.SqlDataset을 이용하여 sqlite DB를 읽는 기능 추가
- 분산 뮤텍스(Mutex), 임계영역(Critical Section)이 tf.contrib.framework.CriticalSection에 추가
- tf.regex_replace 를 이용한 텍스트 처리 기능 향상
- tf.custom_gradient을 이용한 gradient 계산 커스터마이징 지원
주요 내용을 정리하였지만, 실제 버전 1.7에서 가장 큰 이슈중에 하나가 바로 TensorRT와 통합 된 기능일 것입니다. 통합과 관련하여는 아래의 글을 참고해 주시기 바랍니다.
텐서플로우 1.7 신규 기능 테스트
버전 1.7 부터 제공 되는 기능 중에서 SQLite 데이터베이스 파일로부터 SQL 쿼리를 이용하여 데이터를 읽는 예제를 테스트 해보도록 하겠습니다.
아래의 예제를 테스트하기 위해서는 텐서플로우 1.7이상 버전이 설치되어 있어야 합니다. 따라서 위의 명령어를 이용하여 텐서플로우를 설치하시거나, 직접 소스코드로 부터 빌드하신 다음 설치해 주셔야 합니다.
그리고 아래의 명령어를 이용하여 SQLite 관련 패키지를 설치해 주시기 바랍니다.
$ sudo apt-get install sqlite3 libsqlite3-dev
그리고 아래의 명령어를 이용하여 sqlite3.db 파일을 생성해 줍니다.
$ sqlite3 sqlite3.db
SQLite version 3.11.0 2016-02-15 17:29:24
Enter ".help" for usage hints.
sqlite> create table people (
name string,
age int
);
sqlite> insert into people values ('HiSEON', 100);
sqlite> select * from people;
HiSEON|100
sqlite> .quit
위에서 생성된 sqlite3.db 파일을 텐서플로우에서 아래와 같이 바로 읽어서 사용할 수 있습니다.
import tensorflow as tf
dataset = tf.contrib.data.SqlDataset("sqlite", "sqlite3.db",
"SELECT name, age FROM people",
(tf.string, tf.int32))
iterator = dataset.make_one_shot_iterator()
next_element = iterator.get_next()
sess = tf.Session()
# Prints the rows of the result set of the above query.
while True:
try:
print(sess.run(next_element))
except tf.errors.OutOfRangeError:
break
위에서 실행한 결과는 아래와 같습니다.
('HiSEON', 100)
( 본문 인용시 출처를 밝혀 주시면 감사하겠습니다.)