在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于paddlepaddle的mnist手寫(xiě)數(shù)字識(shí)別的詳細(xì)分析

lviY_AI_shequ ? 2017-12-31 22:42 ? 次閱讀

上周在搜索關(guān)于深度學(xué)習(xí)分布式運(yùn)行方式的資料時(shí),無(wú)意間搜到了paddlepaddle,發(fā)現(xiàn)這個(gè)框架的分布式訓(xùn)練方案做的還挺不錯(cuò)的,想跟大家分享一下。不過(guò)呢,這塊內(nèi)容太復(fù)雜了,所以就簡(jiǎn)單的介紹一下paddlepaddle的第一個(gè)“hello word”程序----mnist手寫(xiě)數(shù)字識(shí)別。下一次再介紹用PaddlePaddle做分布式訓(xùn)練的方案。其實(shí)之前也寫(xiě)過(guò)一篇用CNN識(shí)別手寫(xiě)數(shù)字集的文章,是用keras實(shí)現(xiàn)的,這次用了paddlepaddle后,正好可以簡(jiǎn)單對(duì)比一下兩個(gè)框架的優(yōu)劣。

什么是PaddlePaddle?

PaddlePaddle是百度推出的一個(gè)深度學(xué)習(xí)框架,可能大多數(shù)人平常用的比較多的一般是tensorflow,caffe,mxnet等,但其實(shí)PaddlePaddle也是一個(gè)非常不錯(cuò)的框架(據(jù)說(shuō)以前叫Paddle,現(xiàn)在改名叫PaddlePaddle,不知道為啥總覺(jué)得有股莫名的萌點(diǎn))

PaddlePaddle能做什么?

傳統(tǒng)的基本都能做,尤其對(duì)NLP的支持很好,譬如情感分析,word embedding,語(yǔ)言模型等,反正你想得到的,常見(jiàn)的都可以用它來(lái)試一試~

PaddlePaddle的安裝

不得不吐槽一下PaddlePaddle的安裝,官網(wǎng)上說(shuō)“PaddlePaddle目前唯一官方支持的運(yùn)行的方式是Docker容器”,而docker其實(shí)在國(guó)內(nèi)還并不是特別的流行,之前遇到的所有的框架,都有很多種安裝方式,非常方便,所以這個(gè)唯一支持docker讓人覺(jué)得非常詭異 = =!不過(guò)偶然試了一下,居然可以用pip install,不過(guò)為啥官網(wǎng)上沒(méi)有寫(xiě)呢?所以,對(duì)于新手來(lái)說(shuō),最簡(jiǎn)單的安裝方式就是:

CPU版本安裝

pip install paddlepaddle

GPU版本安裝

pip install paddlepaddle-gpu

用PaddlePaddle實(shí)現(xiàn)手寫(xiě)數(shù)字識(shí)別

訓(xùn)練步驟

傳統(tǒng)的方式這次就不展開(kāi)講了,為了對(duì)比我們還是用CNN來(lái)進(jìn)行訓(xùn)練。PaddlePaddle訓(xùn)練一次模型完整的過(guò)程可以如下幾個(gè)步驟:

導(dǎo)入數(shù)據(jù)---->定義網(wǎng)絡(luò)結(jié)構(gòu)---->訓(xùn)練模型---->保存模型---->測(cè)試結(jié)果

下面,我直接用代碼來(lái)展示訓(xùn)練的過(guò)程(以后代碼都會(huì)放在github里):

#coding:utf-8 import os from PIL import Image import numpy as np import paddle.v2 as paddle # 設(shè)置是否用gpu,0為否,1為是 with_gpu = os.getenv('WITH_GPU', '0') != '1' # 定義網(wǎng)絡(luò)結(jié)構(gòu) def convolutional_neural_network_org(img): # 第一層卷積層 conv_pool_1 = paddle.networks.simple_img_conv_pool( input=img, filter_size=5, num_filters=20, num_channel=1, pool_size=2, pool_stride=2, act=paddle.activation.Relu()) # 第二層卷積層 conv_pool_2 = paddle.networks.simple_img_conv_pool( input=conv_pool_1, filter_size=5, num_filters=50, num_channel=20, pool_size=2, pool_stride=2, act=paddle.activation.Relu()) # 全連接層 predict = paddle.layer.fc( input=conv_pool_2, size=10, act=paddle.activation.Softmax()) return predict def main(): # 初始化定義跑模型的設(shè)備 paddle.init(use_gpu=with_gpu, trainer_count=1) # 讀取數(shù)據(jù) images = paddle.layer.data( name='pixel', type=paddle.data_type.dense_vector(784)) label = paddle.layer.data( name='label', type=paddle.data_type.integer_value(10)) # 調(diào)用之前定義的網(wǎng)絡(luò)結(jié)構(gòu) predict = convolutional_neural_network_org(images) # 定義損失函數(shù) cost = paddle.layer.classification_cost(input=predict, label=label) # 指定訓(xùn)練相關(guān)的參數(shù) parameters = paddle.parameters.create(cost) # 定義訓(xùn)練方法 optimizer = paddle.optimizer.Momentum( learning_rate=0.1 / 128.0, momentum=0.9, regularization=paddle.optimizer.L2Regularization(rate=0.0005 * 128)) # 訓(xùn)練模型 trainer = paddle.trainer.SGD( cost=cost, parameters=parameters, update_equation=optimizer) lists = [] # 定義event_handler,輸出訓(xùn)練過(guò)程中的結(jié)果 def event_handler(event): if isinstance(event, paddle.event.EndIteration): if event.batch_id % 100 == 0: print "Pass %d, Batch %d, Cost %f, %s" % ( event.pass_id, event.batch_id, event.cost, event.metrics) if isinstance(event, paddle.event.EndPass): # 保存參數(shù) with open('params_pass_%d.tar' % event.pass_id, 'w') as f: parameters.to_tar(f) result = trainer.test(reader=paddle.batch( paddle.dataset.mnist.test(), batch_size=128)) print "Test with Pass %d, Cost %f, %s\n" % ( event.pass_id, result.cost, result.metrics) lists.append((event.pass_id, result.cost, result.metrics['classification_error_evaluator'])) trainer.train( reader=paddle.batch( paddle.reader.shuffle(paddle.dataset.mnist.train(), buf_size=8192), batch_size=128), event_handler=event_handler, num_passes=10) # 找到訓(xùn)練誤差最小的一次結(jié)果 best = sorted(lists, key=lambda list: float(list[1]))[0] print 'Best pass is %s, testing Avgcost is %s' % (best[0], best[1]) print 'The classification accuracy is %.2f%%' % (100 - float(best[2]) * 100) # 加載數(shù)據(jù) def load_image(file): im = Image.open(file).convert('L') im = im.resize((28, 28), Image.ANTIALIAS) im = np.array(im).astype(np.float32).flatten() im = im / 255.0 return im # 測(cè)試結(jié)果 test_data = [] cur_dir = os.path.dirname(os.path.realpath(__file__)) test_data.append((load_image(cur_dir + '/image/infer_3.png'), )) probs = paddle.infer( output_layer=predict, parameters=parameters, input=test_data) lab = np.argsort(-probs) # probs and lab are the results of one batch data print "Label of image/infer_3.png is: %d" % lab[0][0] if __name__ == '__main__': main()

上面的代碼看起來(lái)很長(zhǎng),但結(jié)構(gòu)還是很清楚的。下面我們用實(shí)際數(shù)據(jù)測(cè)試一下,看一下效果到底怎么樣~

BaseLine版本

首先我用了官網(wǎng)給出的例子,直接用最基本的CNN網(wǎng)絡(luò)結(jié)構(gòu)訓(xùn)練了一下,代碼如下:

def convolutional_neural_network_org(img):

# 第一層卷積層 conv_pool_1 = paddle.networks.simple_img_conv_pool( input=img, filter_size=5, num_filters=20, num_channel=1, pool_size=2, pool_stride=2, act=paddle.activation.Relu()) # 第二層卷積層 conv_pool_2 = paddle.networks.simple_img_conv_pool( input=conv_pool_1, filter_size=5, num_filters=50, num_channel=20, pool_size=2, pool_stride=2, act=paddle.activation.Relu()) # 全連接層 predict = paddle.layer.fc( input=conv_pool_2, size=10, act=paddle.activation.Softmax()) return predict

輸出結(jié)果如下:

I1023 13:45:46.519075 34144 Util.cpp:166] commandline: --use_gpu=True --trainer_count=1 [INFO 2017-10-23 13:45:52,667 layers.py:2539] output for __conv_pool_0___conv: c = 20, h = 24, w = 24, size = 11520 [INFO 2017-10-23 13:45:52,667 layers.py:2667] output for __conv_pool_0___pool: c = 20, h = 12, w = 12, size = 2880 [INFO 2017-10-23 13:45:52,668 layers.py:2539] output for __conv_pool_1___conv: c = 50, h = 8, w = 8, size = 3200 [INFO 2017-10-23 13:45:52,669 layers.py:2667] output for __conv_pool_1___pool: c = 50, h = 4, w = 4, size = 800 I1023 13:45:52.675750 34144 GradientMachine.cpp:85] Initing parameters.. I1023 13:45:52.686153 34144 GradientMachine.cpp:92] Init parameters done. Pass 0, Batch 0, Cost 3.048408, {'classification_error_evaluator': 0.890625} Pass 0, Batch 100, Cost 0.188828, {'classification_error_evaluator': 0.0546875} Pass 0, Batch 200, Cost 0.075183, {'classification_error_evaluator': 0.015625} Pass 0, Batch 300, Cost 0.070798, {'classification_error_evaluator': 0.015625} Pass 0, Batch 400, Cost 0.079673, {'classification_error_evaluator': 0.046875} Test with Pass 0, Cost 0.074587, {'classification_error_evaluator': 0.023800000548362732} ``` ``` ``` Pass 4, Batch 0, Cost 0.032454, {'classification_error_evaluator': 0.015625} Pass 4, Batch 100, Cost 0.021028, {'classification_error_evaluator': 0.0078125} Pass 4, Batch 200, Cost 0.020458, {'classification_error_evaluator': 0.0} Pass 4, Batch 300, Cost 0.046728, {'classification_error_evaluator': 0.015625} Pass 4, Batch 400, Cost 0.030264, {'classification_error_evaluator': 0.015625} Test with Pass 4, Cost 0.035841, {'classification_error_evaluator': 0.01209999993443489} Best pass is 4, testing Avgcost is 0.0358410408473 The classification accuracy is 98.79% Label of image/infer_3.png is: 3 real 0m31.565s user 0m20.996s sys 0m15.891s

可以看到,第一行輸出選擇的設(shè)備是否是gpu,這里我選擇的是gpu,所以等于1,如果是cpu,就是0。接下來(lái)四行輸出的是網(wǎng)絡(luò)結(jié)構(gòu),然后開(kāi)始輸出訓(xùn)練結(jié)果,訓(xùn)練結(jié)束,我們把這幾次迭代中誤差最小的結(jié)果輸出來(lái),98.79%,效果還是很不錯(cuò)的,畢竟只迭代了5次。最后看一下輸出時(shí)間,非常快,約31秒。然而這個(gè)結(jié)果我并不是特別滿意,因?yàn)橹坝胟eras做的時(shí)候調(diào)整的網(wǎng)絡(luò)模型訓(xùn)練往后準(zhǔn)確率能夠達(dá)到99.72%,不過(guò)速度非常慢,迭代69次大概需要30分鐘左右,所以我覺(jué)得這個(gè)網(wǎng)絡(luò)結(jié)構(gòu)還是可以改進(jìn)一下的,所以我對(duì)這個(gè)網(wǎng)絡(luò)結(jié)構(gòu)改進(jìn)了一下,請(qǐng)看改進(jìn)版

改進(jìn)版

def convolutional_neural_network(img): # 第一層卷積層 conv_pool_1 = paddle.networks.simple_img_conv_pool( input=img, filter_size=5, num_filters=20, num_channel=1, pool_size=2, pool_stride=2, act=paddle.activation.Relu()) # 加一層dropout層 drop_1 = paddle.layer.dropout(input=conv_pool_1, dropout_rate=0.2) # 第二層卷積層 conv_pool_2 = paddle.networks.simple_img_conv_pool( input=drop_1, filter_size=5, num_filters=50, num_channel=20, pool_size=2, pool_stride=2, act=paddle.activation.Relu()) # 加一層dropout層 drop_2 = paddle.layer.dropout(input=conv_pool_2, dropout_rate=0.5) # 全連接層 fc1 = paddle.layer.fc(input=drop_2, size=10, act=paddle.activation.Linear()) bn = paddle.layer.batch_norm(input=fc1,act=paddle.activation.Relu(), layer_attr=paddle.attr.Extra(drop_rate=0.2)) predict = paddle.layer.fc(input=bn, size=10, act=paddle.activation.Softmax()) return predict

在改進(jìn)版里我們加了一些dropout層來(lái)避免過(guò)擬合。分別在第一層卷積層和第二層卷積層后加了dropout,閾值設(shè)為0.5。改變網(wǎng)絡(luò)結(jié)構(gòu)也非常簡(jiǎn)單,直接在定義的網(wǎng)絡(luò)結(jié)構(gòu)函數(shù)里對(duì)模型進(jìn)行修改即可,這一點(diǎn)其實(shí)和keras的網(wǎng)絡(luò)結(jié)構(gòu)定義方式還是挺像的,易用性很高。下面來(lái)看看效果:

I1023 14:01:51.653827 34244 Util.cpp:166] commandline: --use_gpu=True --trainer_count=1 [INFO 2017-10-23 14:01:57,830 layers.py:2539] output for __conv_pool_0___conv: c = 20, h = 24, w = 24, size = 11520 [INFO 2017-10-23 14:01:57,831 layers.py:2667] output for __conv_pool_0___pool: c = 20, h = 12, w = 12, size = 2880 [INFO 2017-10-23 14:01:57,832 layers.py:2539] output for __conv_pool_1___conv: c = 50, h = 8, w = 8, size = 3200 [INFO 2017-10-23 14:01:57,833 layers.py:2667] output for __conv_pool_1___pool: c = 50, h = 4, w = 4, size = 800 I1023 14:01:57.842871 34244 GradientMachine.cpp:85] Initing parameters.. I1023 14:01:57.854014 34244 GradientMachine.cpp:92] Init parameters done. Pass 0, Batch 0, Cost 2.536199, {'classification_error_evaluator': 0.875} Pass 0, Batch 100, Cost 1.668236, {'classification_error_evaluator': 0.515625} Pass 0, Batch 200, Cost 1.024846, {'classification_error_evaluator': 0.375} Pass 0, Batch 300, Cost 1.086315, {'classification_error_evaluator': 0.46875} Pass 0, Batch 400, Cost 0.767804, {'classification_error_evaluator': 0.25} Pass 0, Batch 500, Cost 0.545784, {'classification_error_evaluator': 0.1875} Pass 0, Batch 600, Cost 0.731662, {'classification_error_evaluator': 0.328125} ``` ``` ``` Pass 49, Batch 0, Cost 0.415184, {'classification_error_evaluator': 0.09375} Pass 49, Batch 100, Cost 0.067616, {'classification_error_evaluator': 0.0} Pass 49, Batch 200, Cost 0.161415, {'classification_error_evaluator': 0.046875} Pass 49, Batch 300, Cost 0.202667, {'classification_error_evaluator': 0.046875} Pass 49, Batch 400, Cost 0.336043, {'classification_error_evaluator': 0.140625} Pass 49, Batch 500, Cost 0.290948, {'classification_error_evaluator': 0.125} Pass 49, Batch 600, Cost 0.223433, {'classification_error_evaluator': 0.109375} Pass 49, Batch 700, Cost 0.217345, {'classification_error_evaluator': 0.0625} Pass 49, Batch 800, Cost 0.163140, {'classification_error_evaluator': 0.046875} Pass 49, Batch 900, Cost 0.203645, {'classification_error_evaluator': 0.078125} Test with Pass 49, Cost 0.033639, {'classification_error_evaluator': 0.008100000210106373} Best pass is 48, testing Avgcost is 0.0313018567383 The classification accuracy is 99.28% Label of image/infer_3.png is: 3 real 5m3.151s user 4m0.052s sys 1m8.084s

從上面的數(shù)據(jù)來(lái)看,這個(gè)效果還是很不錯(cuò)滴,對(duì)比之前用keras訓(xùn)練的效果來(lái)看,結(jié)果如下:

基于paddlepaddle的mnist手寫(xiě)數(shù)字識(shí)別的詳細(xì)分析

可以看到這個(gè)速度差異是很大的了,在準(zhǔn)確率差不多的情況下,訓(xùn)練時(shí)間幾乎比原來(lái)縮短了六倍,網(wǎng)絡(luò)結(jié)構(gòu)也相對(duì)簡(jiǎn)單,說(shuō)明需要調(diào)整的參數(shù)也少了很多。

總結(jié)

paddlepaddle用起來(lái)還是很方便的,不論是定義網(wǎng)絡(luò)結(jié)構(gòu)還是訓(xùn)練速度,都值得一提,然而我個(gè)人的體驗(yàn)中,認(rèn)為最值得說(shuō)的是這幾點(diǎn):

1.導(dǎo)入數(shù)據(jù)方便。這次訓(xùn)練的手寫(xiě)數(shù)字識(shí)別數(shù)據(jù)量比較小,但是如果想要添加數(shù)據(jù),也非常方便,直接添加到相應(yīng)目錄下。

2.event_handler機(jī)制,可以自定義訓(xùn)練結(jié)果輸出內(nèi)容。之前用的keras,以及mxnet等都是已經(jīng)封裝好的函數(shù),輸出信息都是一樣的,這里paddlepaddle把這個(gè)函數(shù)并沒(méi)有完全封裝,而是讓我們用戶自定義輸出的內(nèi)容,可以方便我們減少冗余的信息,增加一些模型訓(xùn)練的細(xì)節(jié)的輸出,也可以用相應(yīng)的函數(shù)畫(huà)出模型收斂的圖片,可視化收斂曲線。

3.速度快。上面的例子已經(jīng)證明了paddlepaddle的速度,并且在提升速度的同時(shí),模型準(zhǔn)確度也與最優(yōu)結(jié)果相差不多,這對(duì)于我們訓(xùn)練海量數(shù)據(jù)的模型是一個(gè)極大的優(yōu)勢(shì)啊!

然而,paddlepaddle也有幾點(diǎn)讓我用的有點(diǎn)難受,譬如文檔太少了啊,報(bào)錯(cuò)了上網(wǎng)上搜沒(méi)啥結(jié)果啊等等,不過(guò)我覺(jué)得這個(gè)應(yīng)該不是大問(wèn)題,以后用的人多了以后肯定相關(guān)資料也會(huì)更多。所以一直很疑惑,為啥paddlepaddle不火呢?安裝詭異是一個(gè)吐槽點(diǎn),但其實(shí)還是很優(yōu)秀的一個(gè)開(kāi)源軟件,尤其是最值得說(shuō)的分布式訓(xùn)練方式,多機(jī)多卡的設(shè)計(jì)是非常優(yōu)秀的,本篇沒(méi)有講,下次講講如何用paddlepaddle做單機(jī)單卡,單機(jī)多卡,多機(jī)單卡和多機(jī)多卡的訓(xùn)練方式來(lái)訓(xùn)練模型,大家多多用起來(lái)呀~~可以多交流呀~

ps:由于paddlepaddle的文檔實(shí)在太少了,官網(wǎng)的文章理論介紹的比較多,網(wǎng)上的博文大多數(shù)都是幾個(gè)經(jīng)典例子來(lái)回跑,所以我打算寫(xiě)個(gè)系列,跟實(shí)戰(zhàn)相關(guān)的,不再只有深度學(xué)習(xí)的“hello world”程序,這次用“hello world”做個(gè)引子,下篇開(kāi)始寫(xiě)點(diǎn)干貨哈哈~

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴

原文標(biāo)題:【深度學(xué)習(xí)系列】PaddlePaddle之手寫(xiě)數(shù)字識(shí)別

文章出處:【微信號(hào):AI_shequ,微信公眾號(hào):人工智能愛(ài)好者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    uboot代碼詳細(xì)分析

    [url=]uboot代碼詳細(xì)分析[/url]
    發(fā)表于 01-29 13:51

    詳細(xì)分析一下USB協(xié)議

    本文跟大家一起詳細(xì)分析一下USB協(xié)議。
    發(fā)表于 05-24 06:16

    詳細(xì)分析stm32f10x.h

    每日開(kāi)講---學(xué)習(xí)STM32不得不看的剖析(詳細(xì)分析stm32f10x.h)摘要: 學(xué)習(xí)STM32不得不看的剖析(詳細(xì)分析stm32f10x.h)。/**這里是STM32比較重要的頭文件*******************************************
    發(fā)表于 08-05 07:44

    詳細(xì)分析了VTIM和VMIN的功能

    上一篇文章中,我們詳細(xì)分析了VTIM和VMIN的功能,《嵌入式Linux 串口編程系列2--termios的VMIN和VTIME深入理解》 也明白了這兩個(gè)參數(shù)設(shè)計(jì)的初衷和使用方法,接下來(lái)我們 就詳細(xì)
    發(fā)表于 11-05 07:09

    如何去實(shí)現(xiàn)基于K210的MNIST手寫(xiě)數(shù)字識(shí)別

    基于K210的MNIST手寫(xiě)數(shù)字識(shí)別硬件平臺(tái)采用Maixduino開(kāi)發(fā)板在sipeed官方有售軟件平臺(tái)使用MaixPy環(huán)境進(jìn)行單片機(jī)的編程 官方資源可在這里下載 鏈接: [link]h
    發(fā)表于 02-17 07:35

    電子工程師必須掌握的20個(gè)模擬電路詳細(xì)分析

    內(nèi)含參考答案以及詳細(xì)分析
    發(fā)表于 10-07 07:15

    手寫(xiě)數(shù)字識(shí)別的模板匹配方法源程序

    手寫(xiě)數(shù)字識(shí)別的模板匹配法
    發(fā)表于 01-02 19:43 ?73次下載

    電子整流器工作原理詳細(xì)分析

    電子整流器工作原理詳細(xì)分析
    發(fā)表于 02-27 10:43 ?2.6w次閱讀

    基于MNIST手寫(xiě)數(shù)字識(shí)別系統(tǒng)

    手寫(xiě)數(shù)字識(shí)別是圖像識(shí)別學(xué)科下的一個(gè)分支,是圖像處理和模式識(shí)別領(lǐng)域研究的課題之一,由于其具有很強(qiáng)的實(shí)用性一直是多年來(lái)的研究熱點(diǎn)。由于
    發(fā)表于 09-13 14:12 ?8次下載
    基于<b class='flag-5'>MNIST</b>的<b class='flag-5'>手寫(xiě)</b><b class='flag-5'>數(shù)字</b><b class='flag-5'>識(shí)別</b>系統(tǒng)

    Buck變換器原理詳細(xì)分析

    Buck變換器原理詳細(xì)分析
    發(fā)表于 09-15 17:26 ?30次下載
    Buck變換器原理<b class='flag-5'>詳細(xì)分析</b>

    物聯(lián)網(wǎng)的產(chǎn)業(yè)生態(tài)是怎樣的詳細(xì)分析概述

    物聯(lián)網(wǎng)的產(chǎn)業(yè)生態(tài)是怎樣的詳細(xì)分析概述
    的頭像 發(fā)表于 12-08 10:00 ?5399次閱讀

    正激有源鉗位的詳細(xì)分析

    正激有源鉗位的詳細(xì)分析介紹。
    發(fā)表于 06-16 16:57 ?63次下載

    基于K210的MNIST手寫(xiě)數(shù)字識(shí)別

    基于K210的MNIST手寫(xiě)數(shù)字識(shí)別硬件平臺(tái) 采用Maixduino開(kāi)發(fā)板 在sipeed官方有售軟件平臺(tái) 使用MaixPy環(huán)境進(jìn)行單片機(jī)的編程 官方資源可在這里下載 鏈接: [
    發(fā)表于 12-22 18:44 ?28次下載
    基于K210的<b class='flag-5'>MNIST</b><b class='flag-5'>手寫(xiě)</b><b class='flag-5'>數(shù)字</b><b class='flag-5'>識(shí)別</b>

    Pytorch實(shí)現(xiàn)MNIST手寫(xiě)數(shù)字識(shí)別

    Pytorch 實(shí)現(xiàn)MNIST手寫(xiě)數(shù)字識(shí)別
    發(fā)表于 06-16 14:47 ?7次下載

    機(jī)房托管費(fèi)詳細(xì)分析

    機(jī)房托管費(fèi)是一個(gè)復(fù)雜而多變的話題,它受到多種因素的影響,以下是對(duì)機(jī)房托管費(fèi)用的詳細(xì)分析,主機(jī)推薦小編為您整理發(fā)布機(jī)房托管費(fèi)詳細(xì)分析
    的頭像 發(fā)表于 02-28 09:48 ?358次閱讀
    主站蜘蛛池模板: 亚洲色图 第一页 | 欧美人与z0xxxx另类 | 三级日韩 | 欧美黑人巨大日本人又爽又色 | 日本一区二区不卡视频 | 日操夜操天天操 | 午夜影视在线视频观看免费 | 两性午夜欧美高清做性 | 国产伦精品一区二区三区 | 色妹子在线 | 久久草在线精品 | 国产成人av在线 | 美女视频久久 | 最近新韩国hd视频 | 日本特级黄色大片 | 天天天干| 99久久精品免费看国产免费 | 国产精品任我爽爆在线播放6080 | 亚洲影视大全 | 色视频在线观看完整免费版 | 亚洲激情婷婷 | 国产精品护士 | 日处女穴 | 九九热精品视频 | 亚洲乱码卡一卡二卡三 | 免费人成年短视频在线观看免费网站 | 丁香六月激情综合 | 天天操天天草 | 色偷偷91久久综合噜噜噜 | 黄www片| xxxx.欧美| 另类free性欧美护士 | 天天天做天天天天爱天天想 | 在线观看视频你懂得 | 秋霞特色大片18入口私人高清 | 国产免费播放一区二区三区 | 美女免费视频色在线观看 | 欧美疯狂爱爱xxxxbbbb | 在线观看网站黄 | 高清视频一区 | 国内精品一级毛片免费看 |