Streamlit - это среда Python с открытым исходным кодом, которая помогает командам машинного обучения и обработки данных создавать приложения для обработки данных, которые выглядят профессионально без каких-либо знаний в области веб-разработки.

Представьте себе случай, когда ваша команда обучила модель машинного обучения и теперь хочет предоставить клиенту или другому конечному пользователю приложение для взаимодействия с вашей моделью: выполнение логического вывода для новых входных данных и визуализация прогнозов выходных данных. Это вариант использования Streamlit, который мы рассмотрим в этой статье.

В этом примере я обучил нейронную сеть классифицировать цветы ириса между разными видами (Setosa, Versicolor и Virginica), используя четыре характеристики (длина чашелистика, ширина чашелистника, длина лепестка и ширина лепестка). Приложение, которое мы разрабатываем, загрузит модель, позволит пользователю вводить новые значения функций, запускать модель, просматривать вероятности прогнозирования классов и визуализировать ввод на графике PCA для сравнения вводимых данных с другими точками данных в нашем наборе данных Iris. ».

Прежде чем мы начнем, давайте посмотрим, как будет выглядеть приложение.

Вам понадобятся библиотеки Python: Streamlit, NumPy, Pandas, Scikit-learn, Plotly и TensorFlow (или Keras).

Давайте начнем с импорта этих библиотек и загрузки набора данных Iris:

Создайте функцию, которая извлекает набор данных Iris. Используйте декоратор @ st.cache, чтобы функция выполнялась только один раз. Если функция когда-либо вызывается снова, она вернет тот же фрейм данных.

Когда пользователь указывает входные значения функций с помощью боковой панели, я хочу масштабировать эти значения функций так же, как я масштабировал значения функций перед обучением моей модели. Воссоздайте объект StandardScaler, который использовался во время обучения.

Примечание: если бы я не включал график PCA в это приложение (которое требует загрузки набора данных Iris), я бы сохранил среднее значение и дисперсию каждой функции во время обучения в файле JSON и использовал бы данные в этом файле JSON для масштабирования пользователя. input вместо воссоздания объекта StandardScaler. Это означает, что приложению больше не потребуется загружать набор данных Iris, что уменьшит время начальной загрузки.

Загрузите свою модель с помощью keras.models.load_model ()

Теперь мы можем приступить к макету нашего приложения. Начните с названия и описания приложения.

Используйте st.title () для отображения текста в форматировании заголовка. Задайте описание с уценкой с помощью st.markdown ().

Теперь определите компоненты ползунка для боковой панели, которые позволяют пользователю настраивать значения входных функций. Присвойте боковой панели заголовок (тег ‹h1›) с помощью st.sidebar.header (). Определите ползунок для каждой функции с помощью st.sidebar.slider (). Используйте параметр label, чтобы присвоить каждому ползунку ярлык. Используйте параметры min_value и max_value, чтобы указать минимальное и максимальное значения, которые может принимать ползунок, которые будут зависеть от нашего набора данных. Установите начальное значение каждого ползунка как среднее значение функции, которую он представляет, с помощью параметра значение. Используйте параметр step, чтобы указать интервал, с которым значение ползунка будет изменяться, когда пользователь перетаскивает ползунок.

Мы хотим взять эти входные данные, масштабировать их и пропустить через нашу модель. Сохраните результат в виде фрейма данных со столбцами Виды и Уверенность. В нашем столбце Доверие сумма будет равна 1 для имитации вероятностей классов, потому что последний слой активации в нашей модели использует функцию softmax.

Теперь у нас есть данные, необходимые для построения прогнозов. Давайте создадим этот график и поместим его в столбец в основном разделе приложения. Я хочу разделить основной раздел на две колонки. В первом столбце будет график прогнозов модели. Во втором столбце будет график PCA. Создайте эту структуру из двух столбцов с помощью st.beta_columns (). Создайте график прогнозов модели и поместите его в первый столбец.

Запустите PCA с двумя компонентами для всего набора данных Iris с классом scikit-learn’s PCA. Создайте график результатов PCA с цветовой кодировкой по классам. Добавьте ввод пользователя в график PCA и отобразите график PCA во втором столбце. Нам нужно запустить PCA только один раз, но нам нужно будет преобразовывать пользовательский ввод и обновлять график PCA каждый раз, когда пользовательский ввод изменяется.

Сохраните свой код как файл Python (например, iris_app.py) и модель в общем каталоге. Из этого каталога откройте терминал и запустите приложение, нажав streamlit run iris_app.py. Убедитесь, что ваше приложение работает правильно и готово к развертыванию.

Вы также можете передать URL-адрес кода вашего приложения команде streamlit run. Например, команда streamlit run https://github.com/DanOKeefe/Streamlit_Iris_Classifier/blob/main/iris_app.py запустит это приложение.

Чтобы развернуть приложение Streamlit, вы можете использовать совместное использование Streamlit. Сначала создайте учетную запись на их сайте. Загрузите свой код в общедоступный репозиторий GitHub. Включите файл requirements.txt в свой репозиторий, чтобы сообщить Streamlit, какие библиотеки Python нужно загрузить для запуска вашего приложения. В нашем случае наш файл requirements.txt будет выглядеть так.

Войдите в свою учетную запись Streamlit и перейдите на свою домашнюю страницу. Нажмите кнопку «Новое приложение» и введите информацию, включая URL-адрес вашего репозитория GitHub, ветку репозитория, в котором хранится ваше приложение, и путь к вашему файлу Python, содержащему код приложения. Щелкните Развернуть.

Теперь ваше приложение будет отображаться на вашей домашней странице Streamlit по адресу https://share.streamlit.io/. Вы можете щелкнуть свое приложение, чтобы открыть его в новой вкладке. Теперь вы можете поделиться своим приложением, передав URL-адрес другим пользователям!

Вы можете просмотреть приложение, разработанное в этой демонстрации здесь.