㊗️

Flaskに挑戦してなんちゃってAI Webアプリを作った話

2023/10/29に公開

やったこと

Flaskに挑戦しました.
この前まではDjangoに挑戦していたんですが小休止です.
DjangoはUdemy見ながら何とか追いついていたのですが,Flaskは何となくネットにあるコードを加工して,ChatGPTにちょっと質問してという形で簡単に形になってしまいました.
セキュリティ面などは考慮してないです
検索量としてはhtmlについての部分が多いのですが…
で,実際に何を作ったかというと,順伝播型ニューラルネットでの時系列予測アプリです.

使った環境とかバージョンとか

・Macbook M1
 ※途中まで使ってたのですがTensorflow周りで動かず,condaで仮想環境作っても詰まり諦めましたw
・Windows 10
 ※GPU積んであるゲーミング?クリエイター向けノートPCです.いつからか液晶が死んでいるので,テイルズオブアライズの大型DLCまでは寝かせるつもりでしたが,そろそろ発売なので起こしました.

以下Windows環境です
・Python3.9.13
・Flask2.2.2
・Tensorflow2.14.0
他にもTensor系があって書くの面倒なので割愛 .あとnumpy,matplotlibも割愛

どんなものか

ニューラルネットについては,卒論で直接使ってないですが,卒論で作ったコードなので悪しからず.
https://github.com/ryusei-nyaan/NonlinearTimeSeries

最初にランディングするhtmlでユーザーに以下の準備ををしてもらいます.

・時系列データ(csvデータ)のupload
・パラメータの設定

パラメータは,非線形時系列解析あるあるの埋め込みを行っているため,埋め込み次元と時間遅れなどを決めてもらいます.
いつかは定量的な目安を自動で選定できるようにする予定ですが,ただでさえuploadした時系列データを学習してから,最後の学習データの値から点予測していくので,時間がかかってしまい実装したところで…という気もします.

あとは何点先まで予測したいかもここで決められるようにします.
学習回数や学習率なども入力できるようにしても良かったのですが,いったん上記だけにとどめました.

今しがた雑にスクショしたのですが,何もデコレーションされていないただのhtmlファイルです.
ちょうど学習中です.
testファイルはsin波のデータ点が記載されています.

学習中はずっとローディングな部分は,もう少し僕にweb開発の知識があればなんとか改善できたかもしれないです.
裏では学習の様子が一応わかるのですが…

学習が完了すると表示されるhtmlが変わります.
予測するpythonのコードの中でplot結果をpngで保存して,それをhtmlで表示させてます.

予測値を使って次の値を予測するタイプの予測ですが,sin波なのできれいに予測出来ます.

以下Flaskのメイン処理部分です.
もう一度書きますが,セキュリティ面などは考慮してないです.
僕もセキュアプログラミングをもっと勉強した方が良いんですがセキスペ名乗ってるくせに出来ておらず…

from flask import Flask, render_template, request
import numpy as np

#以下がニューラルネットによるモデル部分.NLPだけど自然言語処理ではない
from NonlinearPredict import NLP

app = Flask(__name__)

@app.route("/", methods=["GET","POST"])
def hoge():
    #ランディングページの処理
    if request.method == "GET":
        return render_template("index.html")
	
    #パラメータなどを受け取って,予測部分に渡す
    if request.method == "POST":
        parameter = {}
        parameter["embed"] = request.form["embed"]
        m = int(parameter["embed"])

        parameter["tau"] = request.form["tau"]
        t = int(parameter["tau"])

        parameter["predict"] = request.form["predict"]
        stp = int(parameter["predict"])
        
	#csvファイルの処理.無理やりリストにしている気がする.競プロありがとうw
        csv_file = request.files["csv_file"].read().decode("SHIFT-JIS").split(",")
        Y = list(map(float,csv_file))

        #インスタンス生成
        calculator = NLP(Y,m,t,stp)
        calculator.model_predict()
	
        #当初と設計変えたためparameter=parameter処理要らなかったかも
        return render_template("result_2.html",parameter=parameter)


if __name__ == "__main__":
    app.run()

こんな感じで,Web開発経験皆無の僕でも簡単になんちゃってAIWebアプリを作れてしまいましたという話です.
良い勉強になりました.
Pythonはサクッと機械学習モデルを作れるので,素早くアプリにしてみたい場合は嬉しいですね.

以下続き
https://zenn.dev/toratti/articles/8504a77b150a81

Discussion