每天都在汆肉中醒来青梅,好男人www在线观看,少妇无码自慰毛片久久久久久,国产欧美另类久久久精品丝瓜

登錄注冊
新聞 資訊 金融 知識 財經 理財 科技 金融 經濟 產品 系統 連接 科技 聚焦
首頁 > 金融 > > 正文

專治“煉丹俠”各種不服:1分鐘就能搞個AI應用

2021-03-31 18:31:05來源:互聯網

賈浩楠 金磊 發自 凹非寺

量子位 報道 | 公眾號 QbitAI

“煉丹俠”們苦當前深度學習框架久矣。

本來,AI框架的初衷是簡化、加速和優化開發流程。但是輪子這么多,有從學界走出的Caffe、有谷歌力推的TensorFlow、Facebook押注的Pytorch….真正用起來省心省力的卻不多。

Caffe不支持分布式,不夠靈活,文檔不夠用,安裝也比較復雜。

而TensorFlow中的循環和分支寫起來的復雜和痛苦,用過的人都有體會…

框架越發展,瓶頸越明顯。

這時,卻有一個“框架工具套件”站出來說:

一分鐘內上手AI應用開發、一小時掌握AI模型與數據集的自由切換。

TinyMS,就是它,MindSpore社區新開源的深度學習框架開發工具套件,在技術文檔中,官方明確地說出了前面的話。

那么,TinyMS到底是什么?真能在一分鐘內實現一個AI應用嗎?

TinyMS是什么?

高端的AI開發方法,往往只需要最簡單的工具套件。

TinyMS,代表了小(Tiny)、靈(Modular)、簡(Simple),當然名字還有另外一個很好理解的角度,那就是“微型”MindSpore。

這是專門為去年同期才開源的AI計算框架MindSpore定制的高級API開發套件,目的是讓新手用戶能夠更加輕松地上手深度學習,有效地減少用戶在構建、訓練、驗證和推理一個模型過程中的操作次數。

TinyMS工具包主要用PyThon語言編寫,對于開發者來說,TinyMS“一站式”服務包括了AI應用開發前期必要的數據準備,中期的模型架構、訓練、編譯工具,以及后端AI模型應用服務。

當然,TinyMS仍然貼心地推出了完整在線課程教學,以AI應用中常見的深度神經網絡ResNet50等等為例,一步步教你如何使用TinyMS實現自己的AI應用。在線課程將以網劇更新的新穎形式,在MindSpore官方B站進行不斷更新,等不及的開發者已經可以開始“追劇”了!

嗶哩嗶哩【保姆級教程】EP01-最適合小白的深度學習入門課程來了!小程序

課程的最后還設置了一個挑戰賽,針對小白和高手分別設計了不同難度的比賽,任務是復現TinyMS的模型。每個比賽都會設一個一等獎和三個二等獎,對于參賽人員來說,只要跑通網絡就有機會獲得價值三千元的獎品;如果調參的精度是Top1,即可獲得價值一萬元的獎品。感興趣的開發者可聯系小助手微信:“mindspore0328”報名參賽。

我們接著來看看TinyMS的構成和主要功能模塊。

從任務流程上看,TinyMS的基本架構分為五個部分:數據處理、模型構建、訓練、驗證、部署。

其中數據處理模塊提供常用數據集下載、解壓、加載等操作,同時,為了讓模型有更好的表現,一般還針對原始數據進行數據預處理(增強)操作。

而在模型構建中,除了網絡主體的構建,還包括Loss損失函數、Optimizer優化器等定義。

模型構建好后,就進入了訓練的流程,TinyMS在訓練中提供回調函數的定義。即回調操作可以在訓練的各個階段執行,可能是在epoch之間,在處理一個batch之后,甚至在滿足某個條件的情況下完全由用戶做主。

這樣一來,用戶可以利用許多創造性的方法來改進訓練和性能,節省計算資源,并獲知供有關神經網絡內部發生的事情的結論。

TinyMS中的精度驗證模塊,負責模型精度驗證的流程,其中評價指標metrics可由用戶自己定義。

最后,就是模型部署,serving模塊可以通過搭建服務器,來提供AI模型應用服務,為新手提供快速推理的體驗。

到底好不好用?我們一試便知。

一分鐘實現AI應用?試試看!

俗話說“光說不練假把式”,實踐才能檢驗TinyMS的真本事。

Now!上手體驗一下!

老規矩,在安裝之前,先來介紹一下環境需求:

操作系統:Ubuntu 18.04 或 Windows 10。

Python版本:3.7.5。

安裝也是非常的方便,只要“pip一下”就好:

pip install tinyms==0.1.0

此處溫馨提示:若是下載速度太慢,可以試試下面的鏡像哦:

mkdir -pv /root/.pip

&& echo "[global]" >/root/.pip/pip.conf

&& echo "trusted-host=mirrors.aliyun.com" >>/root/.pip/pip.conf

&& echo "index-url=http://mirrors.aliyun.com/pypi/simple/" >>/root/.pip/pip.conf

要是想檢驗一下安裝是否成功,可以跑一下這個小demo:

import tinyms as ts

from tinyms.primitives import tensor_add

x = ts.ones([2, 3])

y = ts.ones([2, 3])

print(tensor_add(x, y))

若出現如下結果,則證明安裝成功。

[[2. 2. 2.]

[2. 2. 2.]]

接下來,是時候展示TinyMS真正的實力了——只要1分鐘,就可以實現圖形分類應用(LeNet5模型)。

先要做工作,是導入模塊(TinyMS中的主要功能模塊):

import json

import tinyms.optimizers as opt

from PIL import Image

from tinyms import context

from tinyms.data import MnistDataset, download_dataset

from tinyms.vision import mnist_transform, ImageViewer

from tinyms.model import Model, lenet5

from tinyms.serving import start_server, predict, list_servables, shutdown, server_started

from tinyms.metrics import Accuracy

from tinyms.losses import SoftmaxCrossEntropyWithLogits

from tinyms.callbacks import ModelCheckpoint, CheckpointConfig, LossMonitor

接下來是構建模型,但聽到這個環節不要打怵,并沒有你印象中的那么多代碼,現在只需要短短2行。

因為TinyMS封裝了MindSpore LeNet5模型中的init和construct函數,所以代碼量大幅減少:

# 構建網絡

net = lenet5(class_num=10)

model = Model(net)

構建完模型后,就是下載數據集 (TinyMS自帶數據集):

# 下載數據集

mnist_path = "/root/mnist"

if not os.path.exists(mnist_path):

download_dataset("mnist", "/root")

print("************Download complete*************")

else:

print("************Dataset already exists.**************")

有了模型,有了數據,當然就需要開始“操練”了。

在訓練模型的過程當中,剛才下載的數據集,會被分為訓練集和驗證集。訓練完成后會進行驗證并輸出 Accuracy 指標:

# 創建mnist路徑

ckpt_folder = "

/etc/tinyms/serving/lenet5"

ckpt_path = "

/etc/tinyms/serving/lenet5/lenet5.ckpt"

if not os.path.exists(ckpt_folder):

!mkdir -p

/etc/tinyms/serving/lenet5

else:

print("lenet5 ckpt folder already exists")

# 設置環境參數

device_target = "CPU"

context.set_context(mode=context.GRAPH_MODE, device_target=device_target)

dataset_sink_mode = False

# 創建數據集

train_dataset = MnistDataset(os.path.join(mnist_path, "train"), shuffle=True)

train_dataset = mnist_transform.apply_ds(train_dataset)

eval_dataset = MnistDataset(os.path.join(mnist_path, "test"), shuffle=True)

eval_dataset = mnist_transform.apply_ds(eval_dataset)

# 設置訓練參數

lr = 0.01

momentum = 0.9

epoch_size = 1

batch_size = 32

# 定義loss函數

net_loss =

SoftmaxCrossEntropyWithLogits(sparse=True, reduction="mean")

# 定義optimizer

net_opt = opt.Momentum(net.trainable_params(), lr, momentum)

net_metrics={"Accuracy": Accuracy()}

model.compile(loss_fn=net_loss, optimizer=net_opt, metrics=net_metrics)

print("************************Start training*************************")

ckpoint_cb = ModelCheckpoint(prefix="checkpoint_lenet", config=CheckpointConfig(save_checkpoint_steps=1875, keep_checkpoint_max=10))

model.train(epoch_size, train_dataset, callbacks=[ckpoint_cb, LossMonitor()],dataset_sink_mode=dataset_sink_mode)

print("************************Finished training*************************")

model.save_checkpoint(ckpt_path)

model.load_checkpoint(ckpt_path)

print("************************Start evaluation*************************")

acc = model.eval(eval_dataset, dataset_sink_mode=dataset_sink_mode)

print("============== Accuracy:{} ==============".format(acc))

為了后續推理過程的需要,在訓練模型后,需要定義一個lenet5 servable json文件。

該文件定義了servable名稱,模型名稱,模型格式和分類數量:

servable_json = [{"name": "lenet5",

"description": "This servable hosts a lenet5 model predicting numbers",

"model": {

"name": "lenet5",

"format": "ckpt",

"class_num": 10}}]

os.chdir("/etc/tinyms/serving")

json_data = json.dumps(servable_json, indent=4)

with open("servable.json", "w") as json_file:

json_file.write(json_data)

準備工作就緒,現在就要讓“機器”運作起來(啟動服務器):

start_server()

然后在命令行終端,用“scp”或者“wget”來獲取一張圖片作為輸入(一張0~9之間的數字圖片)。

使用list_servables函數檢查當前后端的serving模型:

list_servables()

如果輸出的description字段顯示這是一個lenet5的模型,那就可以順利進入下一步——發送推理請求。

# 設置圖片路徑和輸出策略(可以在TOP1和TOP5中選擇)

image_path = "/root/7.png"

strategy = "TOP1_CLASS"

# predict(image_path, servable_name, dataset="mnist", strategy="TOP1_CLASS")

# predict方法的四個參數分別是圖片路徑、servable名稱,數據集名稱(默認MNIST)和輸出策略(默認輸出TOP1,可以選擇TOP5)

if server_started() is True:

img_viewer = ImageViewer(Image.open(image_path), image_path)

img_viewer.show()

print(predict(image_path,"lenet5", "mnist", strategy))

else:

print("Server not started")

如果最后你能看到這樣的輸出:

TOP1: 7, score: 0.99934917688369750977

恭喜你,一次成功的推理,就這么簡單、順利地完成了!

Keras、fastai還不夠用嗎?

現在有眾多為深度學習框架量身定做的API,那么,TinyMS存在的獨特意義是什么?

原因之一是,原生框架的API并不能滿足所有用戶/開發者的需求,所以需要框架擁有更加簡單有效的高階API、低運行開銷、模塊化開發以及敏捷部署。

之前有針對TF推出的Keras,它確實好上手,但是“大而全”的Keras層層封裝,不夠靈活快速。

還有基于Pytorch的Fastai,深度學習庫項目較輕便,目錄清晰易理解,可以說是“小而美”。但在預置數據集和推理模塊上存在短板。

TinyMS在高階API方面理念與Fastai相近,不同點在于TinyMS提供了常用的MindSpore預置數據集,方便開發者簡化對數據集的調用,而且提供了Fastai尚未提供的快速部署推理模塊等。

此外,對比Keras,TinyMS在高階API方面會更為簡單抽象,較keras來說復雜度更低,比如提供了只需一行代碼即可完成數據集的預處理,而且在設計中重點考慮到了Keras尚未提供單獨好用的工具庫,以及尚未提供的快速部署推理模塊等。

其二,對于全場景AI計算框架MindSpore來說,高階和中階Python API已經實現了Keras的大部分功能,所以即使要做一套API,也不需要類似Keras再額外封裝一層。

因此TinyMS的重點不是基于底層框架的特點或不足進行進一步優化,而是著重提升開發者對MindSpore的使用體驗,尤其是面向全場景的開發和部署。

比如,TinyMS主要語言是PyThon,簡單易用,且所有功能都是易于擴展的模塊化設計,能夠覆蓋多種業務場景。

開源深度學習開發工具包,包括了數據集處理工具、模型架構、訓練、編譯工具,以及后端AI模型應用服務,為新手提供快速推理的體驗。

由此就能看出TinyMS面向的主要用戶群體為深度學習初學者、其他研究領需要使用深度學習的科研人員、以及深度學習相關業務應用開發的企業人員。

直白的說TinyMS就是深度發揮MindSpore優勢,以實際開發需求為導向,極致簡化AI上手的復雜度。

TinyMS是一個新生的開源項目,站在Keras、fastai等巨人的肩膀上,雖然在設計理念上有所創新,但依然需要社區開發者一起持續協作,才能達到更好地服務學術界、產業界和開發者的深度和廣度。

TinyMS開源社區中除了TinyMS項目外,還有如下一些項目和活動:

Specification項目:主要用來協作制定面向模型訓練腳本的格式規范。由于TinyMS提供了較為高階的API抽象,因此誕生了ModelZoo腳本規范性和標準化的需求,便于高階封裝的持續迭代;

tinyms-ai.github.io:開源實現的簡單官方網站搭建,基于Github Page;

RustedAI Team:目前只有組織成員可見,RustedAI是TinyMS旨在推動利用Rust語言編寫更多的低運行時開銷的深度學習組件;

社區活動:不定期組織TinyMS模型拉力賽,以及多種多樣的Meetup活動。

開源“開源運營”

作為TinyMS的作者,MindSpore社區運營團隊除了為開發者帶來這一新的開發項目外,還與開放原子開源基金會合作,即將推出0xCommOps這一新穎的開源項目,準備將本來最沒有開放需求的開源社區運營也開源出來。分享MindSpore社區運營團隊這一年創新的全維度運營的理念,同時也號召更多的社區運營愛好者一起分享其所特有的經驗和教訓。

總之,在深度學習框架這件事上,又有一個實力玩家積極入場服務開發者。

試一試TinyMS,歡迎把體驗感想告訴我們~

關鍵詞: 專治 煉丹 各種 不服

熱點
主站蜘蛛池模板: 陕西省| 手游| 普兰店市| 安化县| 平乡县| 酉阳| 泾源县| 南部县| 长治县| 马鞍山市| 乌拉特前旗| 四子王旗| 中方县| 潮州市| 丽江市| 香河县| 铁力市| 卢湾区| 分宜县| 玉林市| 古蔺县| 祁阳县| 呼图壁县| 中阳县| 隆德县| 兴宁市| 济南市| 丰都县| 额济纳旗| 迁西县| 民乐县| 舞阳县| 内丘县| 石台县| 远安县| 淳安县| 犍为县| 扎兰屯市| 陆良县| 绥化市| 西盟|