Kers와 Streamlit에서 딥러닝 모드가 잘 구축되어 있음을 느낄 수 있습니다.

Streamlit는 데이터 시각화에 전문적으로 사용되는 파이톤의 전단 프레임워크이다.JavaScript와 같은 지식이 필요 없이 UI를 쉽게 만들 수 있는 기능이 집중된 섹션입니다.

다른 프런트엔드 프레임워크와 마찬가지로 Streamlit에도 자동 재부팅(파일 업데이트 모니터링 및 자동 재부팅 기능)이 설치되어 있습니다.일반적으로 아래 그림에서 보듯이 모델을 구축한 후에 Streamlit를 이용하여 UI를 구축하여 시각적으로 사용하는 방법이 많지만 Streamlit를 시각화하는 동시에 모델을 구축하면 매우 즐겁기 때문에 소개합니다.

Kers 모델을 통한 Streamlit 시각화


그러면 구체적인 방법은 커스가 준비한 그래피비즈를 이용해 모델을 시각화하는 기능model_to_dot이다.다음과 같이 Kers 모델을 매개변수에 제공하면 pydot입니다.dot 대상이 돌아오기 때문에 문자열로 저장합니다.
graph = tf.keras.utils.model_to_dot(model)
dot = str(graph)
다른 한편, Streamlit은 Dot를 시각화하는 기능을 가지고 있다.
st.graphviz_chart(dot)
이것을 조합하면 Streamlit에Kers모델의 도표를 표시할 수 있다.

Subclassing API 대응


Kerras에서는 다음 세 가지 방법으로 모델을 정의할 수 있습니다.
API
설명
Sequential API
도면층 리스트를 제공하여 모델 정의하기
Functional API
입력과 출력의 장량을 지정하여 모델을 정의합니다
Subclassing API
모델 클래스 상속, 자체 모델 정의
실제로 model_to_dot 함수는 Sequential API 또는 Functional API에 정의된 모델만 지원하지만 Subclassing API에 정의된 모델은 시각화할 수 없습니다.
따라서 다음과 같이 Subclassing API에 정의된 모델의 가져오기 출력을 지정하고 Functional API를 사용하여 모델을 재정의합니다.
# Subclassing API で定義されたモデル
model = CustomModel()

# 入力テンソルを用意する
input = tf.keras.Input((224, 224, 3))
output = model.call(input)
# Functional API で可視化用のモデルを用意
viz_model = tf.keras.Model(input, output)


# モデルの可視化
graph = tf.keras.utils.model_to_dot(
    viz_model,
    show_shapes=True, # 各レイヤーの入出力の表示有無
    expand_nested=False, # ネストされたグラフを展開するか否かを指定
    dpi=72  # デフォルトだと見切れてしまうので少し小さくする
)
st.graphviz_chart(str(graph))
참고로 연산은 모두 Keeras 도면층으로 기술해야 한다.
# NG(model_to_dot では可視化できない)
class CustomModel(tf.keras.Model):
    
    ...

    def call(input):
        x = ...
        x = x + input
        return x

# OK(model_to_dot で可視化できる)
class CustomModel(tf.keras.Model):
    
    ...

    def call(input):
        x = ...
        x = tf.keras.layers.Add()([x, input])
        return x

차트 자동 업데이트


Streamlit은 파일 업데이트를 확인하고 프로그램을 자동으로 다시 실행하는 기능을 갖추고 있습니다.다음과 같이 명령줄 매개 변수를 사용하여 시작하거나 UI 메뉴에서 Run On Save 를 선택합니다.
$ streamlit run --server.runOnSave true <ファイル名>

전체 코드


시위 행진을 위한 코드가 여기 있습니다.
https://github.com/ohtaman/keras-streamlit-demo
import tensorflow as tf
import streamlit as st


class CustomModel(tf.keras.Model):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.conv1 = tf.keras.models.Sequential((
            tf.keras.layers.Conv2D(3, 3, padding='same'),
            tf.keras.layers.BatchNormalization(),
            tf.keras.layers.ReLU()
        ))
        self.conv2 = tf.keras.models.Sequential((
            tf.keras.layers.Conv2D(3, 3, padding='same'),
            tf.keras.layers.BatchNormalization(),
        ))
        self.activation = tf.keras.layers.Softmax()
        self.add = tf.keras.layers.Add()
    
    def call(self, inputs):
        x = self.conv1(inputs)
        x = self.conv2(x)
        x = self.add((x, inputs))
        x = self.activation(x)
        return x


def main():
    model = CustomModel()

    input = tf.keras.Input((224, 224, 3))
    output = model.call(input)
    graph = tf.keras.utils.model_to_dot(
        tf.keras.Model(input, output),
        show_shapes=True,
        expand_nested=False,
        dpi=72
    )
    st.graphviz_chart(str(graph))


if __name__ == '__main__':
    main()

좋은 웹페이지 즐겨찾기