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

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

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

基于Datalore開發(fā)機(jī)器學(xué)習(xí)項(xiàng)目的體驗(yàn)

zhKF_jqr_AI ? 來源:未知 ? 作者:李倩 ? 2018-06-11 11:23 ? 次閱讀

如果說“古代”的編輯器圣戰(zhàn)是Vi和Emacs,那當(dāng)今時(shí)代的IDE圣戰(zhàn)可能是Eclipse和Intellij了。大多數(shù)人都覺得Intellij是后出轉(zhuǎn)精。不過,Eclipse其實(shí)有一個(gè)獨(dú)特的優(yōu)勢(shì),Eclipse Che,基于Eclipse的云端開發(fā)環(huán)境。Eclipse Che可以方便地統(tǒng)一開發(fā)環(huán)境,避免不同系統(tǒng)、不同硬件導(dǎo)致的各種兼容問題,同時(shí)節(jié)省開發(fā)人員配置環(huán)境的時(shí)間。Intellij乃至其他JetBrains系的IDE,則都只有本地版本。

不過,JetBrains今年倒是出了一個(gè)云端開發(fā)環(huán)境Datalore,不過并不針對(duì)Java開發(fā)者,而是面向機(jī)器學(xué)習(xí)

經(jīng)過三個(gè)多月的公測(cè),Datalore的基本功能也比較完善了。所以今天我們將通過一個(gè)具體的例子(使用卷積網(wǎng)絡(luò)分類服飾圖像)來分享下基于Datalore開發(fā)機(jī)器學(xué)習(xí)項(xiàng)目的體驗(yàn)。

首先我們?cè)L問datalore.io,可以使用Google賬號(hào)或JetBrains賬號(hào)登錄。如果沒有的話,可以注冊(cè)一個(gè)。

登錄后,點(diǎn)擊New workbook圖標(biāo),新建一個(gè)workbook。

如果你接觸過Jupyter Notebook,那么workbook可以看成是Jupyter Notebook的加強(qiáng)版。如果你沒接觸過,那么簡(jiǎn)單來說,workbook是內(nèi)嵌代碼的文檔,其中的代碼是可以直接運(yùn)行的。

workbook是左右雙欄,左邊是源代碼,右邊顯示結(jié)果。

我們注意到,左邊默認(rèn)提供了一些常用操作,包括load dataset(加載數(shù)據(jù)集)、standard imports(標(biāo)準(zhǔn)導(dǎo)入),等等。如果你接觸過JetBrains家的IDE,那么你應(yīng)該已經(jīng)意識(shí)到,這是JetBrains系列IDE廣受贊譽(yù)的意圖行動(dòng)(intention actions)功能。

我們首先要做的是引入相應(yīng)的庫(kù),當(dāng)把鼠標(biāo)懸浮到standard imports(標(biāo)準(zhǔn)導(dǎo)入)后,會(huì)有懸浮提示,告訴我們所謂的標(biāo)準(zhǔn)導(dǎo)入包括numpy、pandas、matplotlib,還有datalore定制的一個(gè)繪圖庫(kù)。如果你打算做一點(diǎn)數(shù)據(jù)分析,或者數(shù)據(jù)可視化的工作,那這個(gè)標(biāo)準(zhǔn)導(dǎo)入就很方便。只需點(diǎn)擊一下就可以自動(dòng)生成導(dǎo)入語句,不用一行一行敲了。

不過我打算試下機(jī)器學(xué)習(xí),所以就不用這個(gè)標(biāo)準(zhǔn)導(dǎo)入了。我將導(dǎo)入TensorFlow

import tensorflow as tf

咦,我只輸了i、m兩個(gè)字母,workbook界面就出現(xiàn)了這個(gè):

是啊,JetBrains出品的東西怎么少得了自動(dòng)補(bǔ)全呀?按回車就好,不用一個(gè)一個(gè)字母敲了。

然后我輸入tensorflow。咦?沒有補(bǔ)全。感覺不太妙。

果然,tensorflow顯示為紅色,意味著出問題了。再看右邊,是報(bào)錯(cuò)信息,提示沒有tensorflow這個(gè)模塊。

看來tensorflow沒有預(yù)裝。我們裝一下。菜單選擇Tools(工具)->Library Manager(庫(kù)管理器),輸入tensorflow搜索。

鼠標(biāo)點(diǎn)下就可以裝了,右邊還有下拉菜單可以選版本。

稍等片刻就裝好了,其間會(huì)彈出窗口顯示安裝信息,等看到綠色的Installation complete(安裝完成)就說明安裝成功了??梢渣c(diǎn)Close(關(guān)閉)把窗口關(guān)了。

由于安裝了新的包,Datalore會(huì)提示你需要重啟內(nèi)核(restart kernel),確認(rèn)就可以了。然后我們看到,報(bào)錯(cuò)信息消失了。我們可以接著鍵入as tf了。

然后我們需要加載數(shù)據(jù)集。點(diǎn)擊load dataset,可以看到,其中包括了一些常用的數(shù)據(jù)集。

前面我已經(jīng)說過,我打算試下機(jī)器學(xué)習(xí)。而且我剛安裝了TensorFlow。那TensorFlow入門最經(jīng)典的數(shù)據(jù)集就是MNIST,Datalore也提供了。

不過么……

“花書”作者Ian Goodfellow、Keras作者Fran?ois Chollet一起炮轟MNIST

上面的推特就不逐字逐句翻譯了,大意就是MNIST不能代表現(xiàn)代的計(jì)算機(jī)視覺任務(wù),學(xué)術(shù)界不應(yīng)該老是用MNIST。

所以我也趕下時(shí)髦,換個(gè)數(shù)據(jù)集用用。好吧,我只是找了個(gè)借口,不管怎么說,MNIST用來入門還是不錯(cuò)的。其實(shí)我只是看了太多MNIST的入門教程,有點(diǎn)審美疲勞了。

手寫數(shù)字看厭了,畢竟數(shù)字又不能當(dāng)飯吃。不如換成衣服、鞋子吧,雖然也不能吃,好歹可以穿啊。

隆重介紹MNIST的時(shí)尚版,F(xiàn)ashion-MNIST。

TensorFlow的API寫起來還是有點(diǎn)啰嗦,所以我決定使用Keras。而且,Keras的datasets模塊自帶獲取和加載Fashion-MNIST的方法。

按照之前描述的方法,通過Library Manager安裝Keras后,加載Fashion-MNIST數(shù)據(jù)集:

from keras.datasets import fashion_mnist

(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()

好吧,這行代碼看著稍微有點(diǎn)長(zhǎng),其實(shí)在Datalore里打起來非???,因?yàn)楹芏嗟胤缴晕⑶靡粌蓚€(gè)字母就可以一路補(bǔ)全下去。與此同時(shí),我們能在右邊看到,Datalore會(huì)自動(dòng)幫我們下載數(shù)據(jù)集,并在下載完成后自動(dòng)加載數(shù)據(jù)集。

好了。數(shù)據(jù)集加載好了,下面我們將構(gòu)建一個(gè)模型分類服飾。分類圖像最常用的是卷積神經(jīng)網(wǎng)絡(luò),這也是我們的選擇。圖像的每個(gè)像素是由整數(shù)表示的(0-255的亮度值),為了提高訓(xùn)練的效率,我們需要首先將其歸一化:

x_train = x_train.astype('float32') / 255

x_train = x_train.reshape(x_train.shape[0], 28, 28, 1)

x_test = x_test.astype('float32') / 255

x_test = x_test.reshape(x_test.shape[0], 28, 28, 1)

除了歸一化外,我們還順便重整了一下數(shù)據(jù)的形狀為28, 28, 1(Fashion-MNIST中的圖像為28x28的灰度圖像)。

和MNIST一樣,F(xiàn)ashion-MNIST中的圖像分屬10類:

圖片來源:Margaret Maynard-Reid

在數(shù)據(jù)集中,標(biāo)簽(y_train)是類別變量,具體而言,是取值范圍為0-9的整數(shù)。一般而言,為了便于模型利用,我們需要將其轉(zhuǎn)成one hot編碼。y_test同理。

y_train = keras.utils.to_categorical(y_train, 10)

y_test = keras.utils.to_categorical(y_test, 10)

這里有一個(gè)提高效率的小技巧。在輸完y_train這行后,按Ctrl + D(Mac OS X下是Command + D),可以復(fù)制當(dāng)前行。之后將復(fù)制行中的兩個(gè)y_train改成y_test就可以了。

設(shè)計(jì)預(yù)處理完畢,接著就是設(shè)計(jì)模型了。由于本文的主題不是關(guān)于如何設(shè)計(jì)卷積網(wǎng)絡(luò),因此我這里就偷個(gè)懶,直接使用Keras自帶的MNIST分類器樣例(examples/mnist_cnn.py),看看這個(gè)為MNIST設(shè)計(jì)的CNN分類器在Fashion-MNIST上的效果如何。

model = Sequential()

model.add(Conv2D(32, kernel_size=(3, 3),

activation='relu',

input_shape=(28, 28, 1)))

model.add(Conv2D(64, (3, 3), activation='relu'))

model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Dropout(0.25))

model.add(Flatten())

model.add(Dense(128, activation='relu'))

model.add(Dropout(0.5))

model.add(Dense(10, activation='softmax'))

這個(gè)CNN網(wǎng)絡(luò)模型還是比較簡(jiǎn)單的。我們有兩個(gè)卷積層(均使用3x3的卷積核和ReLU激活),之后加上最大池化層,然后是Dropout層和全連接層,最后,因?yàn)樾枰A(yù)測(cè)10個(gè)分類,所以順理成章地在輸出層中使用了softmax激活。

接下來我們編譯模型,因?yàn)槭欠诸悊栴},所以損失函數(shù)很自然地使用了交叉熵。優(yōu)化使用了Adadelta,這是Matthew D. Zeiler在2012年底提出的一種優(yōu)化算法,使用自適應(yīng)的學(xué)習(xí)率。

model.compile(loss=keras.losses.categorical_crossentropy,

optimizer=keras.optimizers.Adadelta(),

metrics=['accuracy'])

然后就是訓(xùn)練和評(píng)估,并輸出結(jié)果:

model.compile(loss=keras.losses.categorical_crossentropy,

optimizer=keras.optimizers.Adadelta(),

metrics=['accuracy'])

model.fit(x_train, y_train,

batch_size=128,

epochs=20,

verbose=1,

validation_data=(x_test, y_test))

score = model.evaluate(x_test, y_test, verbose=0)

print('測(cè)試損失', score[0])

print('測(cè)試精確度', score[1])

由于Datalore目前為免費(fèi)公測(cè)階段,只有t2.medium規(guī)格的AWS主機(jī)可用(2核、4 GB內(nèi)存),因此,大約需要等1小時(shí)完成訓(xùn)練。等以后正式上線了,會(huì)有GPU主機(jī)可用(p2.xlarge,4 cpu核心、1 gpu核心、61GB 內(nèi)存,12 GB顯存)。當(dāng)然,你也可以嘗試去Datalore官方論壇申請(qǐng)GPU主機(jī)。

結(jié)果:

測(cè)試損失 0.22063894088864328

測(cè)試精確度 0.9295

20個(gè)epoch后精確度超過90%,比我預(yù)料中的表現(xiàn)要好。

看到這個(gè)結(jié)果,我有點(diǎn)好奇這個(gè)模型在MNIST上的表現(xiàn)有多好。Keras文檔告訴我精確度超過99%,不過,俗話說得好,耳聽為虛,眼見為實(shí)。我想親自試一試。

實(shí)際上,上面的代碼只需改動(dòng)兩處,就可以變?yōu)榉诸怣NIST。

將開頭兩行中的fashion_mnist替換為mnist:

from keras.datasets import mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()

其他的都不用動(dòng)。就這么簡(jiǎn)單!

不過,在此之前,先讓我們保存一下當(dāng)前的版本,以備以后繼續(xù)使用。

通過菜單Tools->Add history checkpoint,我們可以添加一個(gè)checkpoint,比如說,起名為keras-mnist-cnn.

然后,通過菜單Tools->History,我們可以查看workbook的歷史。其中,第一個(gè)checkpoint是創(chuàng)建workbook時(shí)的狀態(tài)。除此之外,勾選左上角的Show inactivity checkpoints之后,我們能看到很多Datalore自動(dòng)保存的checkpoint,你再也不用擔(dān)心不小心丟失代碼了。沒錯(cuò),如果你接觸過JetBrain系的IDE,這就是其歷史功能。

你不僅可以查看不同的checkpoint,還可以比較不同checkpoint之間的區(qū)別:

這個(gè)功能在調(diào)bug的時(shí)候是非常方便的。說到調(diào)bug,在Datalore下調(diào)bug還是比較方便的。比如,假設(shè)我們把模型的輸入形狀改一下,故意改成錯(cuò)誤的:

這雖然是一個(gè)故意編造的簡(jiǎn)單錯(cuò)誤,但確實(shí)是可能出現(xiàn)的錯(cuò)誤。因?yàn)橛械那闆r下,頻道是放在最前的。有的時(shí)候不小心,就會(huì)出現(xiàn)這種失誤。

一旦我們做了這個(gè)改動(dòng)后,Datalore幾乎立刻反應(yīng)過來。

從上圖我們可以看到:

代碼單元左邊框?yàn)榧t色,提示我們這里有誤。正常情況下,左邊框?yàn)殚W爍的綠色(提示正在進(jìn)行運(yùn)算)或黃色(提示運(yùn)算完成)。

右側(cè)結(jié)果為報(bào)錯(cuò)的Trackback.

左側(cè)代碼的出錯(cuò)行有紅色波浪線標(biāo)識(shí)。懸浮鼠標(biāo)于其上,我們能看到報(bào)錯(cuò)信息,如下圖所示。

其實(shí)很多地方,懸浮鼠標(biāo)都能給出相應(yīng)的提示,比如懸浮到y(tǒng)_train后,會(huì)提示這是一個(gè)變量(而不是函數(shù)),甚至Datalore能推斷其類型numpy.ndarray。

而單擊一個(gè)變量后,Datalore會(huì)高亮這一變量的所有用例:

從上圖我們可以看到,Datalore沒有直接簡(jiǎn)單粗暴地匹配字符串,最后兩行中,注釋和字符串里的x_test并沒有高亮。

好了,說了這么多。讓我們回到之前的MNIST數(shù)據(jù)集訓(xùn)練上來。如前所述將兩處fashion_mnist替換為mnist后,我們?cè)贛NIST數(shù)據(jù)集上訓(xùn)練模型,并評(píng)估其表現(xiàn)。

最終訓(xùn)練了一個(gè)多小時(shí)(和Fashion-MNIST時(shí)間差不多,畢竟這兩個(gè)數(shù)據(jù)集的圖像規(guī)格是一樣的,都是28x28的灰度圖像),20個(gè)epoch后精確度為0.9918,看來Keras文檔所言不虛。

當(dāng)然,除了代碼之外,workbook里還能寫文檔。文檔使用Markdown格式,加上了LaTeX公式擴(kuò)展。

另外,線上開發(fā)環(huán)境的一大優(yōu)勢(shì)就是方便協(xié)作。Datalore也不例外。通過菜單File->Share即可邀請(qǐng)別人協(xié)作,一起開發(fā)。

分享共有3種方式:

輸入Datalore用戶名或郵箱,邀請(qǐng)對(duì)方協(xié)作開發(fā)。

分享一個(gè)鏈接,通過這個(gè)鏈接訪問的用戶可以協(xié)作開發(fā)。

同樣是分享一個(gè)鏈接,只不過這是一個(gè)只讀鏈接,通過這個(gè)鏈接訪問的用戶只能查看,無法修改。

最后,附上快捷鍵列表(有些已經(jīng)在前文中介紹過):

C-空格(C在mac os x上是Command鍵,其他平臺(tái)上是ctrl鍵)可以觸發(fā)自動(dòng)補(bǔ)全。

C-d重復(fù)當(dāng)前行

在Markdown單元中,按alt + 左右方向鍵可以在單詞間跳轉(zhuǎn)。

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

    關(guān)注

    1

    文章

    806

    瀏覽量

    31194
  • 機(jī)器學(xué)習(xí)

    關(guān)注

    66

    文章

    8422

    瀏覽量

    132724
  • 數(shù)據(jù)集
    +關(guān)注

    關(guān)注

    4

    文章

    1208

    瀏覽量

    24725

原文標(biāo)題:Datalore初體驗(yàn):JetBrains的云端機(jī)器學(xué)習(xí)開發(fā)環(huán)境

文章出處:【微信號(hào):jqr_AI,微信公眾號(hào):論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    【申精】智能機(jī)器項(xiàng)目實(shí)戰(zhàn)(免費(fèi)) 轉(zhuǎn)

    智能機(jī)器項(xiàng)目實(shí)戰(zhàn)(免費(fèi))本課程著眼于實(shí)際應(yīng)用,循序漸進(jìn)的進(jìn)行機(jī)器人實(shí)戰(zhàn);并在實(shí)戰(zhàn)中提升基礎(chǔ)能力,從結(jié)構(gòu)設(shè)計(jì)基礎(chǔ)、三維設(shè)計(jì)軟件的應(yīng)用、運(yùn)動(dòng)學(xué)和動(dòng)力學(xué)仿真、C語言基礎(chǔ)、單片機(jī)的應(yīng)用、嵌入式開發(fā)
    發(fā)表于 02-23 14:42

    有承接開發(fā)項(xiàng)目的嗎?

    有承接開發(fā)項(xiàng)目的嗎,公司打算開發(fā)一套測(cè)控系統(tǒng),其中控制伺服電機(jī),測(cè)量位移、壓力,測(cè)控溫度,想用ARM開發(fā),觸摸屏操作,同時(shí)上位機(jī)也可以操作,有感興趣的可以詳談,我的QQ:9850622
    發(fā)表于 03-17 12:10

    【米爾MYD-C7Z020開發(fā)板試用申請(qǐng)】機(jī)器項(xiàng)目評(píng)估

    項(xiàng)目名稱:機(jī)器項(xiàng)目評(píng)估試用計(jì)劃:本人在有機(jī)器人和視覺領(lǐng)域有7年多的學(xué)習(xí)開發(fā)經(jīng)驗(yàn),曾設(shè)計(jì)過AG
    發(fā)表于 10-30 17:03

    如何完成機(jī)器學(xué)習(xí)項(xiàng)目流程和數(shù)據(jù)清洗

    機(jī)器學(xué)習(xí):完整機(jī)器學(xué)習(xí)項(xiàng)目流程,數(shù)據(jù)清洗
    發(fā)表于 04-26 09:31

    機(jī)器學(xué)習(xí)入門篇:一個(gè)完整的機(jī)器學(xué)習(xí)項(xiàng)目

    機(jī)器學(xué)習(xí)項(xiàng)目入門篇:一個(gè)完整的機(jī)器學(xué)習(xí)項(xiàng)目
    發(fā)表于 05-11 14:47

    Deeplearningai結(jié)構(gòu)化機(jī)器學(xué)習(xí)項(xiàng)目

    Deeplearningai 結(jié)構(gòu)化機(jī)器學(xué)習(xí)項(xiàng)目 Week2 6-10
    發(fā)表于 05-18 15:12

    通常項(xiàng)目的開發(fā)過程是怎樣的?

    做技術(shù)的,不免要和項(xiàng)目打交道,無論是學(xué)校還是企業(yè),都要有項(xiàng)目的開發(fā)過程吧首先,要對(duì)項(xiàng)目的需求進(jìn)行分析,我想問問都分析一些什么呢?其次,要弄清哪些功能的可執(zhí)行性,具體什么
    發(fā)表于 06-01 15:56

    11個(gè)機(jī)器學(xué)習(xí)開源項(xiàng)目

    隨著機(jī)器學(xué)習(xí)越來越受到開發(fā)者關(guān)注,出現(xiàn)了很多機(jī)器學(xué)習(xí)的開源項(xiàng)目,在本文列舉的11個(gè)
    發(fā)表于 02-14 14:25 ?2823次閱讀

    全年開源項(xiàng)目的盤點(diǎn)和總結(jié)

    如果你們這些.NET 開發(fā)者們想要學(xué)一點(diǎn)機(jī)器學(xué)習(xí)知識(shí)來補(bǔ)充現(xiàn)有的技能,你會(huì)怎么做?現(xiàn)在就有一個(gè)完美的開源項(xiàng)目可以助你開始實(shí)施這一想法!這個(gè)完美的開源
    的頭像 發(fā)表于 01-17 11:18 ?3348次閱讀

    谷歌大牛Ian Goodfellow已經(jīng)加盟蘋果,擔(dān)任特殊項(xiàng)目的機(jī)器學(xué)習(xí)主管

    Ian Goodfellow在蘋果擔(dān)任“特殊項(xiàng)目組的機(jī)器學(xué)習(xí)主管”,具體工作內(nèi)容并未披露。目前,除了為FaceID和Siri等功能開發(fā)AI之外,涉及到AI的還有自動(dòng)駕駛技術(shù),而蘋果不久
    的頭像 發(fā)表于 04-08 08:52 ?2725次閱讀
    谷歌大牛Ian Goodfellow已經(jīng)加盟蘋果,擔(dān)任特殊<b class='flag-5'>項(xiàng)目的</b><b class='flag-5'>機(jī)器</b><b class='flag-5'>學(xué)習(xí)</b>主管

    Everyday Robot項(xiàng)目啟動(dòng) 意在開發(fā)通用學(xué)習(xí)機(jī)器

    今天,Alphabet的X moonshot部門(以前稱為Google X)啟動(dòng)了Everyday Robot項(xiàng)目,該項(xiàng)目的目的開發(fā)“通用學(xué)習(xí)機(jī)器
    發(fā)表于 11-22 11:29 ?798次閱讀

    機(jī)器學(xué)習(xí)模型部署到ML項(xiàng)目的過程

    在構(gòu)建一個(gè)大的機(jī)器學(xué)習(xí)系統(tǒng)時(shí),有很多事情需要考慮。但作為數(shù)據(jù)科學(xué)家,我們常常只擔(dān)心項(xiàng)目的某些部分。
    的頭像 發(fā)表于 05-04 11:56 ?2155次閱讀

    Facebook開發(fā)出更加強(qiáng)大的機(jī)器學(xué)習(xí)模型

    近日,F(xiàn)acebook公司分享了兩個(gè)內(nèi)部人工智能項(xiàng)目的細(xì)節(jié),分別是Learning from video和TimeSformer,這兩個(gè)項(xiàng)目旨在促進(jìn)更強(qiáng)大的機(jī)器學(xué)習(xí)模型的
    的頭像 發(fā)表于 03-18 09:18 ?1732次閱讀

    ST MEMS傳感器內(nèi)嵌機(jī)器學(xué)習(xí)核心的優(yōu)勢(shì)

    ???????一旦您熟悉了開發(fā)步驟并掌握了機(jī)器學(xué)習(xí)項(xiàng)目中的要點(diǎn),就能夠開發(fā)有價(jià)值的機(jī)器
    的頭像 發(fā)表于 09-03 14:55 ?1757次閱讀

    機(jī)器視覺應(yīng)用項(xiàng)目的文檔應(yīng)包括哪些

    和安裝與測(cè)試小組。項(xiàng)目經(jīng)理對(duì)機(jī)器視覺系統(tǒng)必須非常專業(yè)和熟悉,負(fù)責(zé)項(xiàng)目的總體設(shè)計(jì)、任務(wù)分配、進(jìn)度安排和必要的開發(fā)工作;研發(fā)小組致力于光學(xué)系統(tǒng)設(shè)計(jì)、機(jī)械安裝結(jié)構(gòu)設(shè)計(jì)、信號(hào)與電氣設(shè)計(jì)、軟件功
    的頭像 發(fā)表于 09-10 10:39 ?808次閱讀