亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種用于執(zhí)行batchnormalization運(yùn)算的裝置和方法與流程

文檔序號(hào):12906538閱讀:347來源:國(guó)知局
一種用于執(zhí)行batch normalization運(yùn)算的裝置和方法與流程

本發(fā)明涉及人工神經(jīng)網(wǎng)絡(luò)技術(shù),具體地涉及一種用于執(zhí)行人工神經(jīng)網(wǎng)絡(luò)中batchnormalization正向和反向運(yùn)算的裝置和方法。



背景技術(shù):

多層人工神經(jīng)網(wǎng)絡(luò)被廣泛應(yīng)用于模式識(shí)別,圖像處理,函數(shù)逼近和優(yōu)化計(jì)算等領(lǐng)域,多層人工神經(jīng)網(wǎng)絡(luò)在近年來由于其較高的識(shí)別準(zhǔn)確度和較好的可并行性,受到學(xué)術(shù)界和工業(yè)界越來越廣泛的關(guān)注,而多層人工神經(jīng)網(wǎng)絡(luò)中的batchnormalization運(yùn)算因?yàn)槠淇梢约铀偕窠?jīng)網(wǎng)絡(luò)訓(xùn)練速度,提高識(shí)別精度的特性,被越來越多的運(yùn)用到了多層神經(jīng)網(wǎng)絡(luò)中。

一種支持batchnormalization運(yùn)算的已知方法是使用通用處理器。該方法通過使用通用寄存器堆和通用功能部件執(zhí)行通用指令來支持上述算法。該方法的缺點(diǎn)之一是單個(gè)通用處理器的運(yùn)算性能較低,無法滿足通常的多層人工神經(jīng)網(wǎng)絡(luò)運(yùn)算的性能需求。而多個(gè)通用處理器并行執(zhí)行時(shí),通用處理器之間相互通信又成為了性能瓶頸。另外,通用處理器需要把多層人工神經(jīng)網(wǎng)絡(luò)正向運(yùn)算譯碼成一長(zhǎng)列運(yùn)算及訪存指令序列,處理器前端譯碼帶來了較大的功耗開銷。

另一種支持batchnormalization的已知方法是使用圖形處理器(gpu)。該方法通過使用通用寄存器堆和通用流處理單元執(zhí)行通用simd指令來支持上述算法。由于gpu是專門用來執(zhí)行圖形圖像運(yùn)算以及科學(xué)計(jì)算的設(shè)備,沒有對(duì)多層人工神經(jīng)網(wǎng)絡(luò)batchnormalization運(yùn)算的專門支持,仍然需要大量的前端譯碼工作才能執(zhí)行多層人工神經(jīng)網(wǎng)絡(luò)運(yùn)算,帶來了大量的額外開銷。另外gpu只有較小的片上緩存,多層人工神經(jīng)網(wǎng)絡(luò)batchnormalization的模型數(shù)據(jù)需要反復(fù)從片外搬運(yùn),片外帶寬成為了主要性能瓶頸。并且batchnormalization運(yùn)算有大量的例如求和的歸一化運(yùn)算,gpu的并行架構(gòu)并不適合做這種大量歸一化的運(yùn)算。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明的一個(gè)方面提供了一種用于執(zhí)行人工神經(jīng)網(wǎng)絡(luò)batchnormalization運(yùn)算的裝置,包括指令存儲(chǔ)單元、控制器單元、數(shù)據(jù)訪問單元、運(yùn)算模塊,其中:指令存儲(chǔ)單元用于通過數(shù)據(jù)訪問單元讀入指令并緩存讀入的指令;控制器單元用于從指令存儲(chǔ)單元讀取指令,并將該指令譯碼成控制運(yùn)算模塊的微指令;數(shù)據(jù)訪問單元用于從外部地址空間向運(yùn)算模塊的相應(yīng)數(shù)據(jù)緩存單元中寫數(shù)據(jù)或從所述數(shù)據(jù)緩存單元向外部地址空間讀數(shù)據(jù);運(yùn)算模塊用于對(duì)數(shù)據(jù)的具體計(jì)算。

本發(fā)明的另一個(gè)方面提供了一種使用上述裝置執(zhí)行batchnormalization正向運(yùn)算的方法。在使用過程中,假設(shè)x是每一個(gè)輸入神經(jīng)元元素,y是輸出元素。學(xué)習(xí)參數(shù)alpha、beta、極小常數(shù)eps、均值e[x]、方差var[x]均為訓(xùn)練過程中得到的常數(shù),該裝置并行的完成batchnormalization正向y=f(x)=alpha*(x-e[x])/sqrt(var(x)+eps)+beta計(jì)算過程得到輸出神經(jīng)元。在訓(xùn)練過程中,正向運(yùn)算需要?jiǎng)討B(tài)的計(jì)算均值e[x]、方差var[x]。通過本裝置的運(yùn)算模塊完成均值、方差計(jì)算過程中的累加和(歸一化)運(yùn)算,從而計(jì)算訓(xùn)練過程中每一次迭代的均值和方差。

本發(fā)明的另一方面提供了一種使用上述裝置執(zhí)行batchnormalization反向運(yùn)算的方法。假設(shè)一個(gè)像素點(diǎn)傳入的梯度為dl/dy,正向過程輸出為y,則經(jīng)過batchnormalization反向傳播出的梯度dl/dx=(alpha/sqrt(var(x)+eps))*(dl/dy-mean(dl/dy)-mean(dl/dy*y)*y)學(xué)習(xí)參數(shù)的alpha的梯度:dl/dalpha=(∑dl/dy)*y,學(xué)習(xí)參數(shù)beta的梯度:dl/dbeta=∑dl/dy。batchnormalization的反向過程通過運(yùn)算單元并行的完成神經(jīng)元的歸一化運(yùn)算例如取均值、方差等。

本發(fā)明可以應(yīng)用于以下(包括但不限于)場(chǎng)景中:數(shù)據(jù)處理、機(jī)器人、電腦、打印機(jī)、掃描儀、電話、平板電腦、智能終端、手機(jī)、行車記錄儀、導(dǎo)航儀、傳感器、攝像頭、云端服務(wù)器、相機(jī)、攝像機(jī)、投影儀、手表、耳機(jī)、移動(dòng)存儲(chǔ)、可穿戴設(shè)備等各類電子產(chǎn)品;飛機(jī)、輪船、車輛等各類交通工具;電視、空調(diào)、微波爐、冰箱、電飯煲、加濕器、洗衣機(jī)、電燈、 燃?xì)庠?、油煙機(jī)等各類家用電器;以及包括核磁共振儀、b超、心電圖儀等各類醫(yī)療設(shè)備。

本發(fā)明通過采用用于執(zhí)行batchnormalization運(yùn)算的裝置和指令集,解決了cpu和gpu運(yùn)算性能不足,前端譯碼開銷大的問題。有效提高了對(duì)batchnormalization正反向運(yùn)算的支持。

本發(fā)明通過采用針對(duì)batchnormalization運(yùn)算的專用片上緩存,充分挖掘了輸入神經(jīng)元和中間數(shù)據(jù)的重用性,避免了反復(fù)向內(nèi)存讀取這些數(shù)據(jù),降低了內(nèi)存訪問帶寬,避免了內(nèi)存帶寬成為多層人工神經(jīng)網(wǎng)絡(luò)正向運(yùn)算性能瓶頸的問題。

本發(fā)明通過采用針對(duì)batchnormalization運(yùn)算的專用運(yùn)算單元較好的平衡了并行和串行之間的關(guān)系。避免了cpu架構(gòu)只是串行運(yùn)算,數(shù)據(jù)規(guī)模較大時(shí)速度較慢,gpu架構(gòu)只是并行運(yùn)算,處理不好歸一化運(yùn)算的弱點(diǎn)。本發(fā)明中數(shù)據(jù)存儲(chǔ)單元和運(yùn)算單元相配合可以較好的平衡歸一化串行運(yùn)算和并行運(yùn)算。

附圖說明

為了更完整地理解本發(fā)明及其優(yōu)勢(shì),現(xiàn)在將參考結(jié)合附圖的以下描述,其中:

圖1示出了根據(jù)本發(fā)明實(shí)施例的用于執(zhí)行batchnormalization運(yùn)算的裝置的整體結(jié)構(gòu)的示例框圖。

圖2示出了根據(jù)本發(fā)明實(shí)施例的用于執(zhí)行batchnormalization運(yùn)算的裝置中運(yùn)算模塊結(jié)構(gòu)的示例框圖。

圖3示出了根據(jù)本發(fā)明實(shí)施例的batchnormalization運(yùn)算過程的示例框圖。

圖4示出了根據(jù)本發(fā)明實(shí)施例的batchnormalization運(yùn)算的流程圖。

具體實(shí)施方式

為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,以下結(jié)合具體實(shí)施例,并參照附圖,對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說明。

batchnormalization運(yùn)算包括正向和反向兩部分。在人工神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程中batchnormalization運(yùn)算的正向和反向都需要運(yùn)用,而在人工神經(jīng)網(wǎng)絡(luò)使用過程中僅執(zhí)行batchnormalization運(yùn)算的正向過程。在人工神經(jīng)網(wǎng)絡(luò)使用過程中使用了訓(xùn)練過程得到的參數(shù),例如batchnormalization運(yùn)算中的均值、方差等數(shù)據(jù)不必再重復(fù)計(jì)算。

圖1示出了根據(jù)本發(fā)明用于執(zhí)行人工神經(jīng)網(wǎng)絡(luò)batchnormalization運(yùn)算的裝置的整體結(jié)構(gòu)圖。如圖1所示,該裝置包括指令存儲(chǔ)單元1、控制器單元2、數(shù)據(jù)訪問單元3和運(yùn)算模塊4。指令存儲(chǔ)單元1、控制器單元2、數(shù)據(jù)訪問單元3、運(yùn)算模塊4均可以通過硬件電路(例如包括但不限于fpga、cgra、專用集成電路asic、模擬電路和憶阻器等)實(shí)現(xiàn)。

指令存儲(chǔ)單元1通過數(shù)據(jù)訪問單元3讀入指令并緩存讀入的指令。指令存儲(chǔ)單元可以通過各種不同存儲(chǔ)器件(sram、edram、dram、憶阻器、3d-dram或非易失存儲(chǔ)等)實(shí)現(xiàn)。

控制器單元2從指令存儲(chǔ)單元1中讀取指令,將指令譯碼成控制其他單元或模塊行為的微指令,然后將各自的微指令分發(fā)至各個(gè)單元或模塊,所述其他單元或模塊例如數(shù)據(jù)訪問單元3、運(yùn)算模塊4等。

數(shù)據(jù)訪問單元3能夠訪問外部地址空間,直接向裝置內(nèi)部的各個(gè)緩存單元讀寫數(shù)據(jù),完成數(shù)據(jù)的加載和存儲(chǔ)。

圖2示出了根據(jù)本發(fā)明實(shí)施例的用于執(zhí)行人工神經(jīng)網(wǎng)絡(luò)batchnormalization運(yùn)算的裝置中運(yùn)算模塊4的結(jié)構(gòu)的示例框圖。如圖2所示,運(yùn)算模塊4包括運(yùn)算單元41、數(shù)據(jù)依賴關(guān)系判定單元42、神經(jīng)元緩存單元43和中間值緩存單元44。

運(yùn)算單元41接收控制器單元2發(fā)出的微指令并進(jìn)行算數(shù)邏輯運(yùn)算。

數(shù)據(jù)依賴關(guān)系判斷單元42負(fù)責(zé)計(jì)算過程中對(duì)神經(jīng)元緩存單元的讀寫操作。數(shù)據(jù)依賴關(guān)系判斷單元42執(zhí)行讀寫操作之前會(huì)首先保證指令之間所用的數(shù)據(jù)不存在讀寫一致性沖突。例如,所有發(fā)往數(shù)據(jù)依賴關(guān)系單元42的微指令都會(huì)被存入數(shù)據(jù)依賴關(guān)系單元42內(nèi)部的指令隊(duì)列里,在該隊(duì)列中,讀指令的讀取數(shù)據(jù)的范圍如果與隊(duì)列位置靠前的寫指令寫數(shù)據(jù)的范圍發(fā)生沖突,則該指令必須等到所依賴的寫指令被執(zhí)行后才能夠執(zhí)行。

神經(jīng)元緩存單元43緩存該運(yùn)算模塊4的輸入神經(jīng)元向量數(shù)據(jù)和輸出神經(jīng)元值數(shù)據(jù)。

中間值緩存單元44緩存該運(yùn)算模塊4在計(jì)算過程中需要的中間值數(shù)據(jù)。例如運(yùn)算過程中計(jì)算的部分和、部分平方和等數(shù)據(jù)。對(duì)于每一個(gè)運(yùn)算模塊4,中間值緩存單元44會(huì)存儲(chǔ)batchnormalization運(yùn)算過程的中間值數(shù)據(jù)。例如正向的batchnormalization操作,在人工神經(jīng)網(wǎng)絡(luò)的使用過程中。假設(shè)x是每一個(gè)輸入神經(jīng)元數(shù)據(jù),y是輸出神經(jīng)元數(shù)據(jù)。學(xué)習(xí)參數(shù)alpha、beta,這兩個(gè)參數(shù)在反向訓(xùn)練過程中不斷更新,用于之后計(jì)算輸出神經(jīng)元數(shù)據(jù)y的公式中。極小常數(shù)eps,代表一個(gè)極小量數(shù)據(jù),通??梢杂?0的-5次方代表,實(shí)際使用中也可以設(shè)為0。均值e[x]代表輸入數(shù)據(jù)的神經(jīng)元數(shù)據(jù)x以batch大小為一個(gè)總量所求出的均值,var[x]表示相應(yīng)的輸入神經(jīng)元數(shù)據(jù)x以batch大小為一個(gè)總量所求出的方差。在人工神經(jīng)網(wǎng)絡(luò)算法中,輸入神經(jīng)元數(shù)據(jù)通常有四個(gè)維度:輸入的批量即batch(也有叫number)大小、輸入的頻道數(shù)目即channel、輸入的高h(yuǎn)eight、輸入的寬width,這四個(gè)維度決定了輸入數(shù)據(jù)x的總數(shù)目,e[x]、var[x]就是以batch為總數(shù)目計(jì)算另外三個(gè)維度上數(shù)據(jù)的均值、方差。運(yùn)算單元41可以并行的完成y=f(x)=alpha*(x-e[x])/sqrt(var(x)+eps)+beta計(jì)算過程,sqrt代表開方操作,該過程的常數(shù)數(shù)據(jù)可以存儲(chǔ)在中間值緩存單元中,得到的結(jié)果返回到數(shù)據(jù)訪問單元得到輸出神經(jīng)元。在人工神經(jīng)網(wǎng)絡(luò)算法中,輸入神經(jīng)元數(shù)據(jù)通常有四個(gè)維度:輸入的批量為batch大小、輸入的頻道數(shù)目為channel、輸入的為高h(yuǎn)eight、輸入的寬為width,這四個(gè)維度決定了輸入數(shù)據(jù)x的總數(shù)目,e[x]、var[x]就是以batch為總數(shù)目計(jì)算另外三個(gè)維度上數(shù)據(jù)的均值、方差。并且,由于該裝置的數(shù)據(jù)存儲(chǔ)方式是按照channel、height、weight三個(gè)維度存儲(chǔ)的,該裝置在讀取輸入神經(jīng)元數(shù)據(jù)x時(shí)可以依序讀入完成之后的求和、求均值、求方差操作。

對(duì)于batchnormalization的正向運(yùn)算過程,在batchnormalization運(yùn)算過程中的均值和方差可以使用已經(jīng)計(jì)算好的均值方差e(x)、var(x),將該參數(shù)作為常數(shù)存儲(chǔ)和運(yùn)算使用,完成之后的計(jì)算過程在batchnormalization運(yùn)算過程中的均值和方差也可以在正向過程中根據(jù)輸入數(shù)據(jù)計(jì)算。運(yùn)算單元要計(jì)算每一次的均值與方差數(shù)據(jù)。在每一次訓(xùn)練迭代過程中,輸入神經(jīng) 元經(jīng)由運(yùn)算單元計(jì)算均值和方差,將該部分?jǐn)?shù)據(jù)放于中間值緩存單元44中,用于該次迭代過程的f(x)后續(xù)計(jì)算。

本發(fā)明還提供在前述裝置上執(zhí)行人工神經(jīng)網(wǎng)絡(luò)batchnormalization運(yùn)算的指令集。指令集中包括config指令、compute指令、io指令、nop指令、jump指令和move指令,其中:

config指令在batchnormalization計(jì)算開始前配置當(dāng)前層計(jì)算需要的各種常數(shù);

compute指令完成batchnormalization過程的算術(shù)邏輯計(jì)算;

io指令實(shí)現(xiàn)從外部地址空間讀入計(jì)算需要的輸入數(shù)據(jù)以及在計(jì)算完成后將數(shù)據(jù)存回至外部空間;

nop指令負(fù)責(zé)清空當(dāng)前裝置內(nèi)部所有微指令存儲(chǔ)隊(duì)列中的微指令,保證nop指令之前的所有指令全部執(zhí)行完畢。nop指令本身不包含任何操作;

jump指令負(fù)責(zé)控制將要從指令存儲(chǔ)單元讀取的下一條指令地址的跳轉(zhuǎn),用來實(shí)現(xiàn)控制流的跳轉(zhuǎn);

move指令負(fù)責(zé)將裝置內(nèi)部地址空間某一地址的數(shù)據(jù)搬運(yùn)至裝置內(nèi)部地址空間的另一地址,該過程獨(dú)立于運(yùn)算單元,在執(zhí)行過程中不占用運(yùn)算單元的資源。

圖3示出了根據(jù)本發(fā)明實(shí)施例的人工神經(jīng)網(wǎng)絡(luò)batchnormalization正向和反向運(yùn)算的示例框圖。對(duì)于公式out=(in-middle)/middle,in是輸入神經(jīng)元數(shù)據(jù),out是輸出神經(jīng)元數(shù)據(jù)。middle是運(yùn)算過程中的中間值,該中間值是均值、方差等需要做歸一化運(yùn)算的中間結(jié)果,通過運(yùn)算模塊4并行的計(jì)算歸一化過程中的部分中間值[middlel,...,middlen],存儲(chǔ)到中間值緩存單元44。之后運(yùn)算模塊4對(duì)每一個(gè)輸入神經(jīng)元數(shù)據(jù)in用中間值middle并行的計(jì)算出輸出神經(jīng)元數(shù)據(jù)out,得到最后的輸出向量。

圖4示出根據(jù)一個(gè)實(shí)施例的訓(xùn)練過程中的batchnormalization正向運(yùn)算流程圖。該流程圖描述利用本發(fā)明的裝置和指令集實(shí)現(xiàn)圖3所示的batchnormalization運(yùn)算的正向運(yùn)算的過程。

在步驟s1,在指令存儲(chǔ)單元1的首地址處預(yù)先存入一條io指令。

在步驟s2,運(yùn)算開始,控制器單元2從指令存儲(chǔ)單元1的首地址讀取該條io指令,根據(jù)譯出的微指令,數(shù)據(jù)訪問單元3從外部地址空間讀取相應(yīng)的所有batchnormalization正向運(yùn)算指令,并將其緩存在指令存儲(chǔ)單元1中。

在步驟s3,控制器單元2接著從指令存儲(chǔ)單元讀入下一條io指令,根據(jù)譯出的微指令,數(shù)據(jù)訪問單元3從外部地址空間讀取運(yùn)算模塊4需要的所有數(shù)據(jù)(例如,包括輸入神經(jīng)元向量、batch大小、學(xué)習(xí)參數(shù)alpha、beta、極小值eps、均值、方差等)至運(yùn)算模塊4的神經(jīng)元緩存單元43。

在步驟s4,控制器單元2接著從指令存儲(chǔ)單元讀入下一條config指令,根據(jù)譯出的微指令,裝置配置batchnormalization運(yùn)算。例如,本次正向運(yùn)算過程是使用計(jì)算好的均值方差,還是根據(jù)輸入計(jì)算均值方差。

在步驟s5,控制器單元2接著從指令存儲(chǔ)單元讀入下一條compute指令,根據(jù)譯出的微指令,運(yùn)算模塊4從神經(jīng)元緩存單元讀取輸入神經(jīng)元向量,計(jì)算輸入神經(jīng)元的均值和方差存入中間值緩存單元中。

在步驟s6,運(yùn)算模塊4根據(jù)compute指令譯出的微指令將輸入神經(jīng)元緩存單元和中間值緩存單元中的數(shù)據(jù)完成減去均值后除以方差與極小量eps和的平方根操作,將結(jié)果存回中間值緩存單元。

在步驟s7,運(yùn)算模塊4根據(jù)compute指令譯出的微指令,從神經(jīng)元緩存單元43讀取學(xué)習(xí)參數(shù)alpha,與中間值相乘后加上學(xué)習(xí)參數(shù)beta返回至神經(jīng)元緩存。

在步驟s8,控制器單元接著從指令存儲(chǔ)單元讀入下一條io指令,根據(jù)譯出的微指令,數(shù)據(jù)訪問單元3將神經(jīng)元緩存單元43中的輸出神經(jīng)元向量存至外部地址空間指定地址,運(yùn)算結(jié)束。

對(duì)于使用過程中的batchnormalizaiton運(yùn)算的正向過程與訓(xùn)練過程中的batchnormalization運(yùn)算的正向過程區(qū)別在于步驟s4中配置使用常數(shù)均值和方差,不需要每次動(dòng)態(tài)計(jì)算,也就是去掉了步驟s5。其他與圖4相同。

對(duì)于batchnormalization運(yùn)算的反向過程與上述的正向過程類似。區(qū)別在于操作的數(shù)據(jù)不同。假設(shè)一個(gè)像素點(diǎn)傳入的梯度為dl/dy,反向傳出的梯度是dl/dx,正向過程輸出為y,其余參數(shù)表示含義與正向過程相同,則經(jīng)過batchnormalization反向傳播出的梯度 dl/dx=(alpha/sqrt(var(x)+eps))*(dl/dy-mean(dl/dy)-mean(dl/dy*y)*y),其中mean是取均值操作。學(xué)習(xí)參數(shù)的alpha的梯度:dl/dalpha=(∑dl/dy)*y,學(xué)習(xí)參數(shù)beta的梯度:dl/dbeta=∑dl/dy,通過這兩個(gè)梯度更新學(xué)習(xí)參數(shù)的數(shù)值。batchnormalization的反向過程通過運(yùn)算單元?dú)w一化運(yùn)算梯度數(shù)據(jù)例如取均值、方差等。之后運(yùn)算單元并行的完成公式中其余操作。

通過采用用于執(zhí)行batchnormalization運(yùn)算的裝置和指令集,解決了cpu和gpu運(yùn)算性能不足,前端譯碼開銷大的問題。有效提高了對(duì)batchnormalization正反向運(yùn)算的支持。

通過采用針對(duì)batchnormalization運(yùn)算的專用片上緩存,充分挖掘了輸入神經(jīng)元和中間數(shù)據(jù)的重用性,避免了反復(fù)向內(nèi)存讀取這些數(shù)據(jù),降低了內(nèi)存訪問帶寬,避免了內(nèi)存帶寬成為多層人工神經(jīng)網(wǎng)絡(luò)正向運(yùn)算性能瓶頸的問題。

通過采用針對(duì)batchnormalization運(yùn)算的專用運(yùn)算單元較好的平衡了并行和串行之間的關(guān)系。避免了cpu架構(gòu)只是串行運(yùn)算,數(shù)據(jù)規(guī)模較大時(shí)速度較慢,gpu架構(gòu)只是并行運(yùn)算,處理不好歸一化運(yùn)算的弱點(diǎn)。本發(fā)明中數(shù)據(jù)存儲(chǔ)單元和運(yùn)算單元相配合可以較好的平衡歸一化串行運(yùn)算和并行運(yùn)算。

以上所述的具體實(shí)施例,對(duì)本發(fā)明的目的、技術(shù)方案和有益效果進(jìn)行了進(jìn)一步詳細(xì)說明,應(yīng)理解的是,以上所述僅為本發(fā)明的具體實(shí)施例而已,并不用于限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1