女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

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

各深度學(xué)習(xí)框架之間性能差異比較分析

8g3K_AI_Thinker ? 2017-12-06 16:04 ? 次閱讀

深度學(xué)習(xí)框架哪家強(qiáng):TensorFlow?Caffe?MXNet?Keras?PyTorch?對(duì)于這幾大框架在運(yùn)行各項(xiàng)深度任務(wù)時(shí)的性能差異如何,各位讀者不免會(huì)有所好奇。

微軟數(shù)據(jù)科學(xué)家Ilia Karmanov最新測試的結(jié)果顯示,亞馬遜MXNet在CNN、RNN與NLP情感分析任務(wù)上性能強(qiáng)勁,而TensorFlow僅擅長于特征提取。

項(xiàng)目內(nèi)的測試代碼并非專門為深度學(xué)習(xí)性能而編寫,目的僅在于簡單比較一下各框架之間的性能差異。

以下為該項(xiàng)目詳情。

我們做這個(gè)榜單的初衷是為了好玩,所以省略了很多重要部分的比較。比如:幫助和支持,自定義圖層(可以創(chuàng)建一個(gè)膠囊網(wǎng)絡(luò)嗎?),數(shù)據(jù)加載器,調(diào)試,不同的平臺(tái)支持,分布式訓(xùn)練等等。

我們不確定是否能對(duì)框架的整體性能提出任何建議,因?yàn)楸卷?xiàng)目主要還是在演示如何在不同的框架中創(chuàng)建相同的神經(jīng)網(wǎng)絡(luò)

例如,使用Caffe2在Python中創(chuàng)建CNN,然后在Julia中使用KNet復(fù)制這個(gè)網(wǎng)絡(luò),或者也可以在PyTorch中嘗試創(chuàng)建一個(gè)RNN并在Tensorflow中復(fù)制它。你可以在Chainer中進(jìn)行一些特征提取,然后在CNTK中復(fù)制這個(gè)操作。

因?yàn)镸icrosoft Azure深度學(xué)習(xí)虛擬機(jī)NC6上的框架已經(jīng)更新到了最新版本,所以notebooks代碼選擇在上面運(yùn)行,僅占用了顯卡Nvidia K80 GPU一半的性能。

測試目標(biāo)

創(chuàng)建深度學(xué)習(xí)框架的Rosetta Stone(譯者注:一個(gè)非常好用的外語學(xué)習(xí)軟件),使數(shù)據(jù)科學(xué)家能夠輕松地將他們的專業(yè)知識(shí)從一個(gè)框架轉(zhuǎn)移到另一個(gè)框架(通過翻譯,而不是從頭開始學(xué)習(xí))。另外,是為了更加透明地在模型訓(xùn)練時(shí)間和默認(rèn)選項(xiàng)方面進(jìn)行比較。

許多在線教程使用非常低級(jí)別的API,雖然這些API非常詳細(xì),但對(duì)于大多數(shù)用例來說,并沒有多大意義,因?yàn)榇蠖鄶?shù)時(shí)候有更高級(jí)別的幫助程序可用。在這里,我們直接忽略沖突的默認(rèn)值的條件下,嘗試采用最高級(jí)別的API,以便在框架之間進(jìn)行更容易的比較。

下面的結(jié)果將證明,一旦使用更高級(jí)的API,代碼結(jié)構(gòu)變得非常相似,并且可以粗略地表示為:

加載數(shù)據(jù); x_train,x_test,y_train,y_test = cifar_for_library(channel_first =?,one_hot =?)

生成CNN / RNN網(wǎng)絡(luò)結(jié)構(gòu)(通常在最后一層上不激活)

指定損失函數(shù)(交叉熵與softmax是一起指定的),優(yōu)化器并初始化網(wǎng)絡(luò)權(quán)重+會(huì)話

用mini-batch的方式來訓(xùn)練訓(xùn)練集并使用自定義迭代器(所有框架都使用公共的數(shù)據(jù)庫)

在測試集的mini-batch上面進(jìn)行預(yù)測

計(jì)算準(zhǔn)確率

本質(zhì)上,我們是在比較一系列確定性的數(shù)學(xué)運(yùn)算(盡管是隨機(jī)初始化),所以比較跨框架的準(zhǔn)確性就是沒有意義了。相反,它會(huì)提示我們?nèi)z查想要的匹配(?),以確保我們正在比較的是相同的模型架構(gòu)。

測試結(jié)果

在CIFAR-10數(shù)據(jù)集上訓(xùn)練CNN(VGG類型)網(wǎng)絡(luò)

性能對(duì)比- 圖像識(shí)別

該模型的輸入是標(biāo)準(zhǔn)的CIFAR-10數(shù)據(jù)集,包含五萬個(gè)訓(xùn)練圖像和一萬個(gè)測試圖像,均勻分布在10個(gè)類別中。每個(gè)32×32像素的圖像轉(zhuǎn)化為張量的形式(3,32,32),像素值從0-255歸一化到0-1。 例如:汽車圖像的相關(guān)參數(shù)y=(0,1,0,0,0,0,0,0,0,0),其標(biāo)簽是= [飛機(jī),汽車,鳥,貓,鹿,狗,青蛙,馬,船 ,卡車]

在IMDB數(shù)據(jù)集上訓(xùn)練RNN(GRU,門控循環(huán)單元)

性能對(duì)比 - 自然語言處理(情感分析)

這個(gè)模型的輸入是標(biāo)準(zhǔn)的IMDB電影評(píng)論數(shù)據(jù)集,包含兩萬五千個(gè)訓(xùn)練評(píng)論和兩萬五千個(gè)測試評(píng)論,統(tǒng)一分為2個(gè)等級(jí)(正面/負(fù)面)。 下載的評(píng)論已經(jīng)是單詞索引的張量形式,例如 (如果你喜歡像南方公園這樣的成人喜劇漫畫)將被表示為(1 2 3 4 5 6 3 7 8)。

遵循Keras框架的處理方法,其中起始字符被設(shè)置為1,詞匯外(使用3萬大小的詞匯庫)被表示為2,因此詞索引從3開始。通過零填充/截?cái)嗟姆绞剑衙織l評(píng)論都固定到150個(gè)字。

在可能的情況下,我會(huì)嘗試使用cudnn的方式來優(yōu)化RNN(由CUDNN = True開關(guān)來控制),因?yàn)槲覀冇幸粋€(gè)可以輕易降低到CuDNN水平的簡單的RNN。例如,對(duì)于CNTK,我們使用optimized_rnnstack而不是Recurrence(LSTM())函數(shù)。 雖然它不太靈活,但是速度要快得多。

例如,對(duì)于CNTK,我們不能再使用類似層歸一化的更復(fù)雜的變量。在PyTorch中,這是默認(rèn)啟用的。但是對(duì)于MXNet,我無法找到這樣的RNN函數(shù),而是使用稍慢的Fused RNN函數(shù)。

Keras最近剛得到了cudnn的支持,但是只有Tensorflow后端可以使用(而不是CNTK后端)。 Tensorflow有許多RNN變種,其中包括他們自己定制的內(nèi)核。這里有一個(gè)很好的基準(zhǔn),我將嘗試更新使用CudnnLSTM的樣例而不是當(dāng)前的方法。

注:CNTK框架是支持動(dòng)態(tài)軸,這意味著我們不需要將輸入填充到150個(gè)字,就可以按原樣輸入,但是由于我找不到與其他框架做到這一點(diǎn)的方法,所以我還是采用填充的方法。這樣對(duì)CNTK框架有點(diǎn)不公平,因?yàn)闀?huì)低估了它的能力。

分類模型創(chuàng)建大小為(150x125)的嵌入矩陣,然后采用100個(gè)門控循環(huán)單元,并將最終輸出(不是輸出序列也不是隱藏狀態(tài))作為輸出。

ResNet-50(特征提取)推斷性能對(duì)比

加載一個(gè)預(yù)訓(xùn)練好的ResNet50模型并在avg_pooling結(jié)束后變成(7,7)向量處截?cái)啵敵鲆粋€(gè)2048維的向量。在這里可以插入一個(gè)softmax層或其它的分類器,例如用激勵(lì)樹來實(shí)現(xiàn)遷移學(xué)習(xí)。此處,在CPU和GPU上向avg_pool層進(jìn)行前向傳遞的時(shí)間均計(jì)算在內(nèi)。

我從中學(xué)到了什么?

關(guān)于CNN

以下提供了一些我在看到github上面提出的問題后比較跨框架的測試準(zhǔn)確率時(shí)的一些見解。

1. 上面的例子(Keras除外),為了便于比較,嘗試使用相同級(jí)別的API,因此都使用相同的生成器函數(shù)。 對(duì)于MXNet和CNTK,我嘗試了一個(gè)更高級(jí)別的API,在這里我使用了框架的訓(xùn)練生成器函數(shù)。在這個(gè)例子中,速度的提高是微不足道的,因?yàn)檎麄€(gè)數(shù)據(jù)集都是作為NumPy數(shù)組加載到RAM中的,而且在處理的時(shí)候每個(gè)迭代的數(shù)據(jù)都是隨機(jī)的。我懷疑框架的生成器是異步執(zhí)行隨機(jī)的。

奇怪的是,框架的隨機(jī)操作似乎是在一個(gè)批次層次上而不是在一個(gè)觀察層次上進(jìn)行的,因此會(huì)略微降低測試精度(至少在10個(gè)迭代之后)。 對(duì)于我們會(huì)進(jìn)行的輸入輸出活動(dòng)以及可能在運(yùn)行中進(jìn)行預(yù)處理和數(shù)據(jù)增強(qiáng)的情況,自定義的生成器將對(duì)性能產(chǎn)生更大的影響。

2.讓CuDNN自動(dòng)調(diào)整/窮舉搜索參數(shù)(能選擇最有效的CNN算法來固定圖像的大小)能在性能上帶來一個(gè)巨大的提升。Chainer,Caffe2,PyTorch和Theano這四個(gè)框架都必須手動(dòng)啟動(dòng)它。CNTK,MXNet和Tensorflow三個(gè)框架是默認(rèn)啟用CuDNN的。

賈揚(yáng)清提到了cudnnGet (默認(rèn))和cudnnFind之間性能的提升。然而,其在TitanX GPU上的差異小得多。

現(xiàn)在看來,在K80 +上采用的新的cudnn使其性能差異問題更為突出。由于在目標(biāo)檢測各種圖像大小的組合上運(yùn)行cudnnFind會(huì)出現(xiàn)較大的性能下降,所以窮舉搜索算法應(yīng)該是不能在目標(biāo)檢測的任務(wù)上使用了。

3.使用Keras時(shí),選擇與后端框架相匹配的[NCHW]排序很重要。CNTK是channels first,我曾經(jīng)在Keras上錯(cuò)誤的配置為channels last。這樣就必須在每一個(gè)batch上改變它的順序,同時(shí)會(huì)造成性能嚴(yán)重的下降。通常,[NHWC]是大多數(shù)框架的默認(rèn)設(shè)置(如Tensorflow),[NCHW]是在NVIDIA GPU上使用cuDNN訓(xùn)練時(shí)可以使用的最佳順序。

4.Tensorflow,PyTorch,Caffe2和Theano四個(gè)框架都需要一個(gè)提供給dropout層的布爾值來指示我們是否訓(xùn)練,因?yàn)檫@對(duì)在測試集上的準(zhǔn)確率有很大的影響,72 vs 77%。因此,在這種情況下不應(yīng)該使用Dropout來測試。

5.使用Tensorflow框架時(shí)需要兩個(gè)改變:通過啟用TF_ENABLE_WINOGRAD_NONFUSED,同時(shí)還改變提供給channel first而不是channel last的維度(data_format ='channels_first')。對(duì)卷積操作啟用WINOGRAD,自然而然的就將keras變成改成以TF作為后端。

6.Softmax層通常與cross_entropy_loss()函數(shù)一起用于大部分的功能,你需要檢查一下你是否要激活最終的全連接層,以節(jié)省使用兩次的時(shí)間。

7.不同框架的內(nèi)核初始化器可能會(huì)有所不同,并且會(huì)對(duì)準(zhǔn)確性有±1%的影響。我盡可能統(tǒng)一地指定xavier / glorot,而不要太冗長的內(nèi)核初始化。

8.為了SGD-momentum中momentum類型的實(shí)現(xiàn),我不得不關(guān)閉unit_gain。因?yàn)樗贑NTK框架上是默認(rèn)關(guān)閉,以此來跟其他框架的實(shí)現(xiàn)保持一致。

9.Caffe2對(duì)網(wǎng)絡(luò)的第一層(no_gradient_to_input = 1)進(jìn)行了額外的優(yōu)化,可以通過不計(jì)算輸入的梯度產(chǎn)生了一個(gè)比較小的速度提升。Tensorflow和MXNet可能已經(jīng)默認(rèn)啟用了此功能。 計(jì)算這個(gè)梯度對(duì)于研究和像deep-dream的網(wǎng)絡(luò)是有用的。

10.在max-pooling之后使用ReLU激活意味著你在減少維度之后才執(zhí)行一個(gè)計(jì)算,從而能夠減少幾秒鐘。這可以使采用MXNet框架的運(yùn)行時(shí)間縮短3秒。

11.一些可能有用的額外檢查:

是否指定的內(nèi)核(3)變成了對(duì)稱元組(3,3)或1維卷積(3,1)?

步長(最大池化中的)是否是默認(rèn)為(1,1)或等于內(nèi)核(Keras這樣做的)?

默認(rèn)填充通常是off(0,0)或valid,但檢查一下它不是on/'same'是很有用的

卷積層上默認(rèn)的激活是否是'None'或'ReLu'的

Bias值的初始化可能不能(有時(shí)是沒有bias值)

梯度的下降和無窮大的值或 NaNs的處理可能因框架不同而不同

有些框架支持稀疏的標(biāo)簽,而不是one-hot編碼類型的(例如我使用的Tensorflow有f.nn.sparse_softmax_cross_entropy_with_logits函數(shù))

數(shù)據(jù)類型的假設(shè)可能是不同的-例如,我曾經(jīng)試著用float32和int32類型來初始化X和Y。但是在torch中Y需要double類型(是為了可以使用在torch.LongTensor(y).cuda函數(shù)中)的數(shù)據(jù)

如果框架有一個(gè)稍微低級(jí)一點(diǎn)的API,請(qǐng)確保在測試過程中不要通過設(shè)置training= False來計(jì)算梯度。

12.據(jù)說安裝支持python3.5版本的Caffe2有點(diǎn)困難。因此我這里分享了一個(gè)腳本

關(guān)于RNN

1. 大多數(shù)框架(例如Tensorflow)上,都有多個(gè)RNN實(shí)現(xiàn)/內(nèi)核; 一旦降低到cudnn LSTM / GRU級(jí)別,執(zhí)行速度是最快的。但是,這種實(shí)現(xiàn)不太靈活(例如,可能希望層歸一化),并且接下來如果在CPU上運(yùn)行推理可能會(huì)出現(xiàn)問題。

2.在cuDNN這個(gè)層面,大部分框架的運(yùn)行時(shí)間是非常相似的。這個(gè)Nvidia的博客文章寫到過幾個(gè)有趣的用于循環(huán)神經(jīng)網(wǎng)絡(luò)cuDNN優(yōu)化的方法,例如,融合 - “將許多小矩陣的計(jì)算結(jié)合為大矩陣的計(jì)算,并盡可能地對(duì)計(jì)算進(jìn)行流式處理,增加與內(nèi)存I / O計(jì)算的比率,從而在GPU上獲得更好的性能。”

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

    關(guān)注

    8

    文章

    2691

    瀏覽量

    84437
  • 深度學(xué)習(xí)
    +關(guān)注

    關(guān)注

    73

    文章

    5554

    瀏覽量

    122473
  • tensorflow
    +關(guān)注

    關(guān)注

    13

    文章

    330

    瀏覽量

    61030

原文標(biāo)題:深度學(xué)習(xí)框架哪家強(qiáng)?TensorFlow擅長推斷特征提取,MXNet稱霸CNN、RNN和情感分析

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

收藏 人收藏

    評(píng)論

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

    京東中臺(tái)化底層支撐框架技術(shù)分析及隨想

    作者:京東零售 徐開廷 本文大約1.7萬字,閱讀需要13分鐘。 導(dǎo)讀:近幾年,除AIGC外,軟件領(lǐng)域相關(guān)比較大的變化,就是相關(guān)業(yè)務(wù)領(lǐng)域開始如火如荼地建設(shè)中臺(tái)和去中臺(tái)化了。本文不探討中臺(tái)對(duì)公司組織
    的頭像 發(fā)表于 04-08 11:29 ?222次閱讀
    京東中臺(tái)化底層支撐<b class='flag-5'>框架</b>技術(shù)<b class='flag-5'>分析</b>及隨想

    HarmonyOS NEXT 原生應(yīng)用/元服務(wù)-DevEco Profiler性能問題定位深度錄制

    快照,分析單個(gè)內(nèi)存快照或多個(gè)內(nèi)存快照之間差異,定位ArkTS的內(nèi)存問題。 CPU:通過深度采集CPU內(nèi)核相關(guān)數(shù)據(jù),直觀地呈現(xiàn)出當(dāng)前選擇調(diào)優(yōu)應(yīng)用/元服務(wù)進(jìn)程的CPU使用率、CPU
    發(fā)表于 02-24 16:06

    BP神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)的關(guān)系

    BP神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)之間存在著密切的關(guān)系,以下是對(duì)它們之間關(guān)系的介紹: 一、BP神經(jīng)網(wǎng)絡(luò)的基本概念 BP神經(jīng)網(wǎng)絡(luò),即反向傳播神經(jīng)網(wǎng)絡(luò)(Backpropagation Neural N
    的頭像 發(fā)表于 02-12 15:15 ?699次閱讀

    深度學(xué)習(xí)工作負(fù)載中GPU與LPU的主要差異

    ,一個(gè)新的競爭力量——LPU(Language Processing Unit,語言處理單元)已悄然登場,LPU專注于解決自然語言處理(NLP)任務(wù)中的順序性問題,是構(gòu)建AI應(yīng)用不可或缺的一環(huán)。 本文旨在探討深度學(xué)習(xí)工作負(fù)載中GPU與LPU的主要
    的頭像 發(fā)表于 12-09 11:01 ?3219次閱讀
    <b class='flag-5'>深度</b><b class='flag-5'>學(xué)習(xí)</b>工作負(fù)載中GPU與LPU的主要<b class='flag-5'>差異</b>

    RNN與LSTM模型的比較分析

    RNN(循環(huán)神經(jīng)網(wǎng)絡(luò))與LSTM(長短期記憶網(wǎng)絡(luò))模型在深度學(xué)習(xí)領(lǐng)域都具有處理序列數(shù)據(jù)的能力,但它們?cè)诮Y(jié)構(gòu)、功能和應(yīng)用上存在顯著的差異。以下是對(duì)RNN與LSTM模型的比較
    的頭像 發(fā)表于 11-15 10:05 ?1959次閱讀

    AI大模型與深度學(xué)習(xí)的關(guān)系

    AI大模型與深度學(xué)習(xí)之間存在著密不可分的關(guān)系,它們互為促進(jìn),相輔相成。以下是對(duì)兩者關(guān)系的介紹: 一、深度學(xué)習(xí)是AI大模型的基礎(chǔ) 技術(shù)支撐 :
    的頭像 發(fā)表于 10-23 15:25 ?2677次閱讀

    FPGA做深度學(xué)習(xí)能走多遠(yuǎn)?

    電子領(lǐng)域,F(xiàn)PGA 可能需要在性能、成本和功耗之間進(jìn)行更精細(xì)的平衡,以滿足市場需求。 ? 市場競爭:隨著深度學(xué)習(xí)市場的不斷發(fā)展,其他技術(shù)(如 GPU、ASIC 等)也在不斷進(jìn)步和競爭。
    發(fā)表于 09-27 20:53

    NVIDIA推出全新深度學(xué)習(xí)框架fVDB

    在 SIGGRAPH 上推出的全新深度學(xué)習(xí)框架可用于打造自動(dòng)駕駛汽車、氣候科學(xué)和智慧城市的 AI 就緒型虛擬表示。
    的頭像 發(fā)表于 08-01 14:31 ?1018次閱讀

    PyTorch深度學(xué)習(xí)開發(fā)環(huán)境搭建指南

    PyTorch作為一種流行的深度學(xué)習(xí)框架,其開發(fā)環(huán)境的搭建對(duì)于深度學(xué)習(xí)研究者和開發(fā)者來說至關(guān)重要。在Windows操作系統(tǒng)上搭建PyTorc
    的頭像 發(fā)表于 07-16 18:29 ?2253次閱讀

    開關(guān)柜和環(huán)網(wǎng)柜之間有哪什么差異

    開關(guān)柜、環(huán)網(wǎng)柜之間差異分析
    的頭像 發(fā)表于 07-16 15:37 ?1068次閱讀
    開關(guān)柜和環(huán)網(wǎng)柜<b class='flag-5'>之間</b>有哪什么<b class='flag-5'>差異</b>?

    深度學(xué)習(xí)中的無監(jiān)督學(xué)習(xí)方法綜述

    深度學(xué)習(xí)作為機(jī)器學(xué)習(xí)領(lǐng)域的一個(gè)重要分支,近年來在多個(gè)領(lǐng)域取得了顯著的成果,特別是在圖像識(shí)別、語音識(shí)別、自然語言處理等領(lǐng)域。然而,深度學(xué)習(xí)模型
    的頭像 發(fā)表于 07-09 10:50 ?1543次閱讀

    深度學(xué)習(xí)與nlp的區(qū)別在哪

    深度學(xué)習(xí)和自然語言處理(NLP)是計(jì)算機(jī)科學(xué)領(lǐng)域中兩個(gè)非常重要的研究方向。它們之間既有聯(lián)系,也有區(qū)別。本文將介紹深度學(xué)習(xí)與NLP的區(qū)別。
    的頭像 發(fā)表于 07-05 09:47 ?1498次閱讀

    深度學(xué)習(xí)常用的Python庫

    深度學(xué)習(xí)常用的Python庫,包括核心庫、可視化工具、深度學(xué)習(xí)框架、自然語言處理庫以及數(shù)據(jù)抓取庫等,并詳細(xì)
    的頭像 發(fā)表于 07-03 16:04 ?1061次閱讀

    TensorFlow與PyTorch深度學(xué)習(xí)框架比較與選擇

    學(xué)習(xí)框架,它們各自擁有獨(dú)特的特點(diǎn)和優(yōu)勢(shì)。本文將從背景介紹、核心特性、操作步驟、性能對(duì)比以及選擇指南等方面對(duì)TensorFlow和PyTorch進(jìn)行詳細(xì)比較,以幫助讀者了解這兩個(gè)
    的頭像 發(fā)表于 07-02 14:04 ?1501次閱讀

    深度學(xué)習(xí)與傳統(tǒng)機(jī)器學(xué)習(xí)的對(duì)比

    在人工智能的浪潮中,機(jī)器學(xué)習(xí)深度學(xué)習(xí)無疑是兩大核心驅(qū)動(dòng)力。它們各自以其獨(dú)特的方式推動(dòng)著技術(shù)的進(jìn)步,為眾多領(lǐng)域帶來了革命性的變化。然而,盡管它們都屬于機(jī)器學(xué)習(xí)的范疇,但
    的頭像 發(fā)表于 07-01 11:40 ?2209次閱讀