- 전체
- Sample DB
- database modeling
- [표준 SQL] Standard SQL
- G-SQL
- 10-Min
- ORACLE
- MS SQLserver
- MySQL
- SQLite
- postgreSQL
- 데이터아키텍처전문가 - 국가공인자격
- 데이터 분석 전문가 [ADP]
- [국가공인] SQL 개발자/전문가
- NoSQL
- hadoop
- hadoop eco system
- big data (빅데이터)
- stat(통계) R 언어
- XML DB & XQuery
- spark
- DataBase Tool
- 데이터분석 & 데이터사이언스
- Engineer Quality Management
- [기계학습] machine learning
- 데이터 수집 및 전처리
- 국가기술자격 빅데이터분석기사
- 암호화폐 (비트코인, cryptocurrency, bitcoin)
[기계학습] machine learning flask를 이용한 tensorflow 트레이닝 모델 api
2019.12.07 20:42
flask를 이용한 tensorflow 트레이닝 모델 api
아...ㅠㅜㅜ
진짜 힘들었따
어제 저녁 먹고 나서부터 지금 새벽 6시까지 줄곧
tensorflow로 트레이닝된 cnn 텍스트 감정 분류 모델을 flask와 결합하는 일에 몰두했다.
될 것 같으면서 안되는..;
일단 가장 먼저 해야할 일이 저장된 모델(checkpoint)을 읽어오는 기존 소스 코드에서 with로 영역이 지정된 소스를 단순화 시키는 것이었다.
https://www.tensorflow.org/versions/r0.11/how_tos/variables/index.html

기존 소스를 보면
with session
with graph
이런식으로 scope가 정해져 있어서 해당 변수들이 그 영역에서만 살아 있는 문제점이 있었고..
자꾸 flask와 결합하려하면 out of memory문제가..? 왜뜨는지 모르겠는데 뜨더라
https://github.com/dennybritz/cnn-text-classification-tf/blob/master/eval.py

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
#! /usr/bin/env python import tensorflow as tf import numpy as np import os import time import datetime import data_helpers from text_cnn import TextCNN from flask import Flask, request, render_template print("Loading data...") _, _, vocabulary, vocabulary_inv = data_helpers.load_data() tcnn = TextCNN(sequence_length=119, num_classes=2, vocab_size=40000, embedding_size=128, filter_sizes=[3,4,5], num_filters=128) sess = tf.Session() def predict(_input): ret = "negative" if 1 == sess.run(tcnn.predictions, {tcnn.input_x: _input, tcnn.dropout_keep_prob: 1.0})[0] : ret = "positive" return ret saver = tf.train.Saver() saver.restore(sess, "/root/cnn_sentiment_classification/runs/1477243665/checkpoints/model-46800") app = Flask(__name__) @app.route('/', methods=['GET', 'POST']) def index(): if request.method == 'POST': s = request.form["sentence"] original_sentence = s s = data_helpers.clean_str(s) s = s.split(" ") # 119 is max str len s = s + ["<PAD/>"] * (119 - len(s)) for i, w in enumerate(s): if w not in vocabulary: s[i] = "<PAD/>" s = np.array([vocabulary[word] for word in s]) s = [s] result = predict(s) return render_template("index.html", result=result, original_sentence=original_sentence) return render_template("index.html") if __name__ == '__main__': app.run(host='0.0.0.0') # ################################################################################################## """ while True: s = raw_input("type the sentence:") if s == "end": break; s = data_helpers.clean_str(s) s = s.split(" ") # 119 is max str len s = s + ["<PAD/>"] * (119 - len(s)) for i, w in enumerate(s): if w not in vocabulary: s[i] = "<PAD/>" s = np.array([vocabulary[word] for word in s]) s = [s] print "Prediction: ", sess.run(tcnn.predictions, {tcnn.input_x: s, tcnn.dropout_keep_prob: 1.0}) """ # ########### |
매우 간단하다..
로드하고.
checkpoints로부터 세션을 restore시키고
predict하면 된다.
기존 소스는 매우 지저분 했고,
바꾸는 과정에서 잘 안되는 부분이 있었는데
계속 시도하다보니 운이 따라줬다.
심플해졌다. ㅠㅠ
Tweet Sentiment Classification(긍정/부정) API는 다음과 같이 만들었다
일단 대충..
http://sclab.gachon.ac.kr:5000/

/////////////////////////////////////////////////////////////////////////////////////////////////////////
여기에 입력을 하면
긍정인지 부정인지 알려준다.!!! 나에게 있어서는 굉장히 의미있는 순간이다..ㅠㅠ
https://twitter.com/search-home

/////////////////////////////////////////////////////////////////////////////////////////////////////////
트레이닝 모델은 140만개의 트윗(긍정 70만개/부정 70만개 미국데이터)로 학습되었고
20만개의 별도의 라벨링 데이터에 대해서 테스트 해보았을때 82% ~ 84%의 정확도를 보였다.
(좀더 정확히 테스트할 필요가 있다)
이 기능은 트윗 분석 애플리케이션의 모듈로 넣을것이고
추후에 한국 데이터에 대해서도 시도해볼 것이다
라벨링 데이터는 어떻게 구하나..
나같은 경우 nvidia-docker를 사용했고,
host와 docker의 post에 bridge를 연결하는 일이 중요했고, (몰라서 많은 시간 씀 ㅠㅠ)

scp에도 익숙해졌고
..
도커 안에 플라스크를 써서, 트레이닝된 모델을 위와 같이 로드 시킨 후 웹으로 보여줄 수 있게끔 하였다..
감동적인..
[출처] flask를 이용한 tensorflow 트레이닝 모델 api|작성자 파블로프의개
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
댓글 0
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
|---|---|---|---|---|
| 공지 | 오라클 기본 샘플 데이터베이스 | 졸리운_곰 | 2014.01.02 | 86885 |
| 공지 | [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE | 가을의 곰을... | 2013.02.10 | 79182 |
| 공지 | [G_SQL] Sample Database | 가을의 곰을... | 2012.05.20 | 95920 |
| 6 |
품질경영기사 자료와 정보 (응시자격, 출제기준, 시험과목, 시험방법, 합격기준, 합격률 등)
| 졸리운_곰 | 2018.02.05 | 2633 |
| 5 |
품질경영기사 독학 난이도
| 졸리운_곰 | 2018.02.05 | 3433 |
| 4 |
품질경영기사_공식요약(필기, 실기)_요점 및 핵심정리
| 졸리운_곰 | 2018.02.05 | 4360 |
| 3 |
품질경영기사 요점정리
| 졸리운_곰 | 2018.02.04 | 3061 |
| 2 |
[품질경영산업기사]직접 시험 본 후기 및 조언입니다
| 졸리운_곰 | 2018.02.03 | 2578 |
| 1 |
<품질경영기사 독학하시는 분들을 위한 공부방법 TIP!>
| 졸리운_곰 | 2018.02.03 | 3073 |




