2020-03-18【遺傳算法-加速適應度評估】 Automatically Designing CNN Architectures Using Genetic Algorithm for Im...

創(chuàng)新:

提出了一種基于遺傳算法的CNNs體系結構自動設計方法淘正,能夠自動產(chǎn)生一種處理圖像分類任務的CNN體系結構堕阔。該算法在工作之前不需要任何預處理期奔,在發(fā)現(xiàn)的CNN上也不需要任何后處理,這意味著它是完全自動的。與其他架構發(fā)現(xiàn)演算法相比碰纬,所提出的演算法平均只占用一個百分比的計算資源。

1.CNNs的深度不局限于一個預先定義的數(shù)目,而是在進化過程中,通過尋找對給定數(shù)據(jù)具有最佳分類精度的CNN來發(fā)現(xiàn)最佳深度培廓。

2.該算法直接引入了跳躍連接(The skip connection),理論和實驗都證明了跳躍連接在有效訓練深層結構中的優(yōu)越性强戴。以這種方式,進化的cnn能夠通過使用深層架構處理復雜數(shù)據(jù)炕柔,避免梯度消失(GV)問題[33]酌泰。此外,這種設計還可以減少搜索空間匕累,以便在有限的時間內(nèi)獲得最佳性能陵刹。此外,與其他性能相似的模型相比欢嘿,該算法所改進的體系結構具有更少的參數(shù)衰琐。

3.完全自動化,不需要人工干預的CNN架構炼蹦。

4.一個異步計算組件來加速計算羡宙,一個cache組件來縮短適應度評估時間。

提出的算法:

1.該算法的框架

具體地說掐隐,通過給遺傳算法和圖像分類數(shù)據(jù)集一組預先定義好的cnn構造塊狗热、種群大小以及最大生成數(shù),該算法通過一系列進化過程開始工作虑省,最后找出CNN的最佳結構來對給定的圖像數(shù)據(jù)集進行分類匿刮。

在進化過程中,使用預先設定的編碼策略對預先設定的構造塊(第1行)進行編碼探颈,并使用預先設定的種群大小對種群進行隨機初始化熟丸。

然后,當前生成的計數(shù)器初始化為零(第2行)伪节。

在進化過程中光羞,在給定的數(shù)據(jù)集(第4行)上評估編碼CNN特定架構的每個個體的適應度。之后怀大,根據(jù)適應度選擇親本個體纱兑,然后由遺傳算子產(chǎn)生新的后代(第5行)。

然后化借,通過環(huán)境選擇從當前種群中選出存活到下一代的個體種群(第6行)潜慎。具體地說,當前種群由父種群和生成的子種群組成。最后勘纯,計數(shù)器增加一個,并且繼續(xù)進化钓瞭,直到計數(shù)器超過預定義的最大生成驳遵。

如圖2所示,所提出的算法遵循GA的標準流水線(在算法1的第5行集中描述了選擇山涡、交叉和變異的階段堤结,以及圖2所示的后代種群)。注意鸭丛,遺傳算子由交叉和變異操作組成竞穷。

算法框架

2.初始化

如第2節(jié)所述,CNN由卷積層鳞溉、池化層和偶爾的完全連接層組成瘾带。CNN的表現(xiàn)在很大程度上依賴于它的深度,跳過連接可以使深度變成現(xiàn)實熟菲。在所提出的編碼策略中看政,我們設計了一個新的構造塊,直接使用跳躍連接(skip-layer)來代替形成CNN時的卷積層抄罕。此外允蚣,在建議的編碼策略中丟棄完全連接的層(原因將在本小節(jié)后面給出)〈艋撸總之嚷兔,所提出的編碼策略中,僅使用跳躍層(skip-layer)和池化層(pooling)來構造CNN做入。

具體地說冒晰,跳躍層由兩個卷積層和一個跳躍連接組成。跳躍連接從第一卷積層的輸入連接到第二卷積層的輸出母蛛。跳躍層的示例如圖3所示翩剪。如上所述,卷積層的參數(shù)是特征映射的數(shù)目彩郊、濾波器大小前弯、步長和卷積操作類型。在所提出的編碼策略中秫逝,我們對濾波器大小恕出、步長和卷積運算使用相同的設置。特別地违帆,濾波器和步長分別設置為3×3和1×1浙巫,并且僅使用相同的卷積運算類型。為此,為跳躍層編碼的參數(shù)是兩個卷積層(分別表示為F1和F2)的特征映射的數(shù)目的畴。此外渊抄,對于內(nèi)核大小和步幅大小,所提出的編碼策略中使用的池化層被設置為2×2丧裁。為此护桦,為池化層編碼的參數(shù)只是池類型(表示為P 1)。請注意煎娇,本小節(jié)稍后將解釋此設計的原因以及采用此設計的設置二庵。

跳躍層

算法2顯示了種群初始化的細節(jié)。簡單地說缓呛,T個個體以相同的方式初始化催享,然后存儲到P0中。在個體初始化過程中哟绊,個體的長度(表示為L)表示對應CNN的深度因妙,首先被隨機初始化(第3行)。然后票髓,創(chuàng)建一個包含L個節(jié)點的鏈表(第4行)兰迫。之后,配置每個節(jié)點(第5-20行)炬称,然后將鏈表存儲到P0(第21行)汁果。在每個節(jié)點的配置期間,從(0玲躯,1)(第6行)隨機生成一個數(shù)字r据德。如果r<0.5,則通過將此節(jié)點的類型屬性設置為1跷车,將其標記為跳過層棘利。否則,此節(jié)點通過將其類型設置為2來表示池層朽缴。在跳過連接層的情況下善玫,特征映射的編號隨機生成,然后分別分配給node.F 1和node.F2(第7-10行)密强。否則茅郎,池類型由擲硬幣的概率決定。尤其是或渤,當概率低于0.5時系冗,池類型node.P1設置為max,否則為mean(第11-19行)薪鹦。

初始化

接下來掌敬,我們將詳細說明放棄完全連接層的原因惯豆,在跳躍層中使用兩個卷積層,以及所提出算法中跳躍層和池層的設置奔害。通常楷兽,多個完全連接的層被添加到CNN的尾部。然而华临,全連接層由于其緊密的連接容易導致過擬合現(xiàn)象[40]拄养。為了減少過度擬合,通常使用隨機移除一部分連接[41]银舱。但是,每個移除將引入一個附加參數(shù)跛梗。只有正確地指定參數(shù)才能使相應的CNN具有良好的性能寻馏。同時,全連接層的數(shù)量和每個全連接層的神經(jīng)元數(shù)量是額外的參數(shù)核偿,很難調(diào)整诚欠。如果將完全連接的層合并到所提出的編碼策略中,搜索空間將大大擴大漾岳,從而增加搜索最佳CNN結構的難度轰绵。在跳躍層中使用兩個卷積層的靈感來自ResNet的設計,并且在文獻[10]尼荆、[11]左腔、[14]、[15]中實驗證明了這種跳躍層的有效性捅儒。但是液样,ResNet的每個跳過層中的特征映射的大小被設置為相等。在我們提出的編碼策略中巧还,特征映射的大小可以不同鞭莽,這被認為是更靈活的。此外麸祷,將卷積運算類型設置為相同澎怒,并使用1×1步長,可以使輸入數(shù)據(jù)的維數(shù)保持不變阶牍,這對于這種自動設計來說更加靈活喷面。請注意1×1步幅不會改變圖像大小。就過濾器和內(nèi)核大小的設置以及池層中的跨距大小而言走孽,它們都基于現(xiàn)有手工CNN的設計[10]乖酬,[11]。此外融求,指定此類設置的另一個重要原因是基于我們在手動調(diào)整CNN體系結構方面的專業(yè)知識咬像。這些設置的有效性將在第5節(jié)中顯示。

3.適應度評估


算法三

算法3詳細描述了種群Pt中個體的適應度評估。簡單地說县昂,給定包含所有用于評估適應度的個體的總體Pt和要在其上發(fā)現(xiàn)CNN最佳結構的圖像分類數(shù)據(jù)集肮柜,算法3以相同的方式評估Pt的每個個體,最后返回包含已評估適應度的個體的Pt倒彰。具體地說审洞,如果適應度評估是針對初始化的總體,即P0待讳,則創(chuàng)建全局緩存系統(tǒng)(表示為緩存)芒澜,存儲具有不可見架構的個體的適應度(第1-4行)。對于Pt中的每個個體(由個體表示)创淡,如果在C ache中找到個體痴晦,則直接從Cache(第6-8行)檢索其適合性。否則琳彩,將個體異步放置在可用的GPU上進行其適應度評估(第9-13行)誊酌。請注意,從緩存中查詢個人是基于個人的標識符的露乏。理論上碧浊,可以使用任意標識符,只要它們能夠區(qū)分編碼不同體系結構的個體瘟仿。在所提出的算法中箱锐,224散列碼[42]作為對應的標識符,該散列碼已被大多數(shù)編程語言實現(xiàn)劳较,就編碼的體系結構而言瑞躺。此外,該個體被異步地放置在可用GPU上兴想,這意味著我們不需要等待下一個個體的適應度評估幢哨,直到當前個體的適應度評估完成,而只需立即將下一個個體放置在可用GPU上嫂便。

算法4

輸入:個體捞镰、可用的GPU、訓練時段數(shù)毙替、全局緩存岸售、訓練數(shù)據(jù)和來自給定圖像分類數(shù)據(jù)集的驗證數(shù)據(jù)。

輸出:個體及其適應度厂画。

算法4給出了評價個體適應度的細節(jié)凸丸。首先,對單個的CNN進行解碼袱院,并在給定的圖像分類數(shù)據(jù)集的基礎上屎慢,在CNN(第1行)中加入一個分類器瞭稼。在提出的算法中,使用softmax分類器[43]腻惠,并且特定的類數(shù)由給定的圖像數(shù)據(jù)集確定环肘。解碼CNN時,在卷積層的輸出中添加整流激活函數(shù)[44]和隨后的批量規(guī)范化操作[45]集灌,卷積層的輸出基于現(xiàn)代CNNs的慣例[9]悔雹,[10]。此外欣喧,當跳躍層的空間數(shù)與輸入數(shù)據(jù)的空間數(shù)不同時腌零,向輸入數(shù)據(jù)添加卷積層,卷積層具有單位濾波器和單位跨距唆阿,但具有相應數(shù)目的特征映射[9]益涧、[10]。之后酷鸦,利用給定的GPU(第4行)對訓練數(shù)據(jù)進行隨機梯度下降(SGD)算法[46]訓練CNN,并根據(jù)驗證數(shù)據(jù)(第5行)計算分類精度牙咏。注意臼隔,使用softmax分類器和SGD訓練方法是基于深度學習社區(qū)的慣例的。當訓練階段結束時妄壶,驗證數(shù)據(jù)的最佳分類精度被設置為個體的適應度(第10行)摔握。最后,將個體的標識符和適應度關聯(lián)起來并放入緩存(第11行)丁寄。

接下來氨淌,給出了設計這種異步和緩存組件的原因。綜上所述伊磺,由于CNNs上的訓練是非常耗時的盛正,根據(jù)具體的體系結構,訓練時間從幾個小時到幾個月不等屑埋,因此本文提出的算法旨在加快適應度評估的速度豪筝。具體來說,異步組件是一個基于GPU的并行計算平臺摘能。由于計算梯度的計算性質续崖,深學習算法通常放在gpu上以加快訓練速度[47]。事實上团搞,現(xiàn)有的深度學習庫严望,如Tensor-flow[48]和Pythorch[49],支持對多個GPU的計算逻恐。然而像吻,它們的并行計算是基于數(shù)據(jù)并行和模型并行管道峻黍。在數(shù)據(jù)并行流水線中,輸入的數(shù)據(jù)被分成幾個較小的組萧豆,每個組放在一個GPU上進行計算奸披。原因是一個GPU有限的內(nèi)存無法同時有效地處理整個數(shù)據(jù)。在并行流水線模型中涮雷,一個模型被劃分為幾個較小的模型阵面,每個GPU攜帶一個較小的模型。顯而易見的原因是一個GPU的計算能力有限洪鸭,無法運行整個模型样刷。然而,設計的平行管道顯然不屬于這兩條管道中的任何一條览爵,而是在更高的層次上置鼻。因此,設計這種異步組件是為了充分利用GPU的計算資源蜓竹,特別是對于基于種群的算法箕母。此外,如果問題可以劃分為幾個獨立的子問題俱济,則異步組件在解決大型問題時被廣泛使用嘶是。通過在不同的計算平臺上并行執(zhí)行這些子問題,可以縮短整個問題的總處理時間蛛碌。在過去聂喇,進化算法通常被用來解決適應度評估不是時間消耗的問題,并且在開發(fā)這種異步組件時沒有關鍵的需要蔚携。有時希太,它們只是使用基于所采用的編程語言的內(nèi)置組件。然而酝蜒,幾乎所有這些內(nèi)置組件都是基于cpu的誊辉,它們不能有效地訓練深層神經(jīng)網(wǎng)絡,主要是因為神經(jīng)網(wǎng)絡的加速平臺是基于gpu的亡脑。此外芥映,每個個體的適應度評估是獨立的,這正好滿足了使用該技術的場景远豺∧纹基于上述原因,該算法設計了一個異步組件躯护。cache組件還用于加速適應度評估惊来,這是基于以下考慮:1)如果其架構沒有改變,則存活到下一代的個體不需要再次評估適應度棺滞;2)已評估的架構裁蚁,可以在下一代中通過突變和交叉操作再生矢渊。

4.生成子代

生成子代的細節(jié)如算法5所示,該算法由兩部分組成枉证。第一個是交叉(第1-18行)矮男,第二個是突變(第19-26行)。在交叉操作過程中室谚,將完全生成| Pt |后代毡鉴,其中|·|測量集合的大小。具體來說秒赤,首先選擇兩個父母猪瞬,每個父母都是根據(jù)更好的適應度從兩個隨機選擇的個體中選擇的(第3-7行)。這種選擇被稱為二元競賽選擇[50]入篮,在GAs中廣泛用于單目標優(yōu)化陈瘦。一旦選擇了父節(jié)點,將生成一個隨機數(shù)(第8行)潮售,以確定是否進行交叉痊项。如果生成的數(shù)目不低于預定義的交叉概率,則將這兩個父個體作為后代放入Qt(第16行)酥诽。否則鞍泉,將每個父個體隨機分成兩部分,并交換來自兩個父個體的兩部分以創(chuàng)建兩個后代(第10-14行)盆均。在變異操作中塞弊,首先生成一個隨機數(shù)(第20行)漱逸,如果生成的數(shù)低于pm(第21-25行)泪姨,則在當前個體上形成變異。在對個體進行變異時饰抒,從當前個體中隨機選擇一個位置(表示為i)肮砾,并基于pl中定義的概率從所提供的變異列表中選擇一個特定的變異操作(表示為m),然后對位置i執(zhí)行m袋坑。

在所提出的算法中仗处,變異列表中定義的可用變異操作有:

?添加帶有隨機設置的跳過層;

?添加具有隨機設置的池層枣宫;

?移除選定位置的層婆誓;

?隨機改變

所選位置的構建基塊。

其次也颤,給出了設計這種交叉算子和基于給定概率表選擇變異算子的動機洋幻。首先,設計的交叉算子受傳統(tǒng)遺傳算法中單點交叉[37]的啟發(fā)翅娶。然而文留,單點交叉只為等長個體設計好唯。設計的交叉算子適用于長度可變的個體。盡管所設計的交叉算子很簡單燥翅,但它可以提高發(fā)現(xiàn)更好的CNNs結構的性能骑篙,這將在第5節(jié)中得到實驗證明。其次森书,現(xiàn)有的算法使用相同的概率來選擇特定的變異操作靶端。在該算法中,所提供的變異操作是以不同的概率選擇的拄氯。特別地躲查,我們提供了一個更高的概率為“添加跳躍層”突變,這將鼓勵一個更高的概率译柏,以增加CNN的深度镣煮。對于其他的變異操作,我們?nèi)匀皇褂孟嗤母怕时陕蟆_@種設計背后的動機是典唇,更深入的CNN往往具有更強大的能力,如前所述胯府。盡管“添加池層”也可以增加CNN的深度介衔,但是使用一個池層,輸入數(shù)據(jù)的維數(shù)將減少到一半骂因,從而導致發(fā)現(xiàn)的CNN不可用炎咖。為此,我們并沒有把更高的概率放在上面寒波。

環(huán)境選擇:

算法6

算法6顯示了環(huán)境選擇的細節(jié)乘盼。首先,利用二元競賽選擇從當前種群(Qt∪Pt)中選擇| Pt |個體俄烁,然后將這些選擇的個體放入下一個種群(表示為Pt+1)(第2-6行)绸栅。其次,選擇最佳個體页屠,檢查是否已放入Pt+1中粹胯。如果沒有,它將替換Pt+1中最差的個體(第7-10行)辰企。

原則上风纠,只有為下一代選擇最優(yōu)秀的個體才可能導致過早收斂現(xiàn)象[51],這將導致算法陷入局部最優(yōu)[23]牢贸,[52]竹观。如果我們不為下一代選擇最好的個體,算法就不會收斂十减。原則上栈幸,一個理想的種群不僅應該包含好的種群愤估,還應該包含相對不好的種群,以增強多樣性[53]速址,[54]玩焰。為此,二進制錦標賽選擇通常用于這樣的目的[50]芍锚,[55]昔园。然而,僅使用二元競賽選擇可能會錯過最佳個體并炮,導致算法沒有朝著更好的方向發(fā)展默刚。因此,我們顯式地將最優(yōu)個體加入到下一個種群中逃魄,這在進化算法中被視為精英策略[56]荤西。


補缺:

在CNN的變體中,有一種趨勢是它們的架構越來越深伍俘。例如邪锌,LeNet5的深度是6,VGG是16癌瘾,而ResNet[11]的深度是1202觅丰。這種設計背后的原理是,更深層次的CNN通常具有更強大的能力來處理復雜和大規(guī)模的數(shù)據(jù)妨退。

一般來說妇萄,CNNs體系結構的設計算法可以根據(jù)其基本技術分為兩類:

一.使用進化算法。如:genetic CNN method (Genetic CNN) [13], the large-scale evolution method (Large-scale Evolution) [14], the hierarchical representation method (Hierarchical Evolution) [15] and the Cartesian genetic programming method (CGP-CNN) [16].? ? 沒有充分利用進化算法的優(yōu)點咬荷,導致計算量大冠句,分類精度不高。

二.使用基于強化學習的算法萍丐。如:the neural architecture search method (NAS) [18], the meta-modelling method (MetaQNN) [19], the efficient architecture search method (EAS) [20] and the block design method (Block-QNN-S) [21].?由于強化學習的性質轩端,比第一種需要更多的計算資源放典。

depending on whether expertise in CNNs is required or not in using these algorithms, they can also be classified into the automatic and the semi-automatic categories. The first includes Large-scale Evolution, CGP- CNN, NAS and Meta-CNN, while the second is composed of Genetic CNN, Hierarchical Evolution, EAS and Block- QNN-S.

GV問題是指在深層神經(jīng)網(wǎng)絡的反向傳播訓練中梯度變小或爆炸

跳躍連接:跳躍連接是指那些連接不相鄰層神經(jīng)元的連接逝变。跳躍連接縮短了反向傳播的層數(shù),因此應減輕GV問題奋构。如上所述壳影,CNN越深,它處理復雜數(shù)據(jù)的能力就越強弥臼。結合不跳過的連接宴咧,具有跳過連接的CNN可以具有深度架構所具有的能力,并且還可以有效地進行訓練径缅〔粽ぃ【S. Hochreiter and J. Schmidhuber, “Long short-term memory,”Neural Computation, vol. 9, no. 8, pp. 1735–1780, 1997.】

遺傳算法:流程圖如圖2所示烙肺。具體來說,首先隨機初始化個體群(即具有架構變體的cnn)氧卧,然后評估每個個體的適合性桃笙。適應度是根據(jù)待優(yōu)化問題的上下文(即CNNs在特定圖像分類任務上的性能)由一個被稱為適應度函數(shù)的定義函數(shù)來度量的。函數(shù)的輸入是編碼在個體中的決策變量沙绝。之后搏明,通過選擇操作,選擇適合性較好的個體闪檬,希望能產(chǎn)生適合性較好的后代星著。具體地說,通過交換或改變所選親本個體的編碼信息粗悯,即通過交叉和變異操作虚循,生成新的后代。對這些產(chǎn)生的后代進行適應度評估样傍,然后通過環(huán)境選擇邮丰,從當前種群(由親本種群和產(chǎn)生的后代組成)中選擇存活到下一代的種群。通過重復這些操作铭乾,期望在遺傳算法終止時從種群中找到最優(yōu)解剪廉。注意,在我們的實驗中炕檩,終止遺傳算法的典型標準是預定義的最大生成數(shù)斗蒋,比如20。

[10] ?G. Huang, Z. Liu, K. Q. Weinberger, and L. van der Maaten,“Densely connected convolutional networks,” in Proceedings of 2017 IEEE Conference on Computer Vision and Pattern Recognition,Honolulu, HI, USA, 2017, pp. 2261–2269.

[11] ?K. He, X. Zhang, S. Ren, and J. Sun, “Identity mappings in deep residual networks,” in Lecture Notes in Computer Science.Amsterdam, the Netherlands: Springer, 2016, pp. 630–645.

[14] E. Real, S. Moore, A. Selle, S. Saxena, Y. L. Suematsu, J. Tan, Q. Le, and A. Kurakin, “Large-scale evolution of image classifiers,” inProceedings of Machine Learning Research, Sydney, Australia, 2017,pp. 2902–2911.

[15] H. Liu, K. Simonyan, O. Vinyals, C. Fernando, and K. Kavukcuoglu, “Hierarchical representations for efficient architecture search,” in Proceedings of 2018 Machine Learning Research, Stockholm, Sweden, 2018.

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末笛质,一起剝皮案震驚了整個濱河市泉沾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌妇押,老刑警劉巖跷究,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異敲霍,居然都是意外死亡俊马,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門肩杈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來柴我,“玉大人,你說我怎么就攤上這事扩然∷胰澹” “怎么了?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長界睁。 經(jīng)常有香客問我觉增,道長,這世上最難降的妖魔是什么翻斟? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任抑片,我火速辦了婚禮,結果婚禮上杨赤,老公的妹妹穿的比我還像新娘敞斋。我一直安慰自己,他們只是感情好疾牲,可當我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布植捎。 她就那樣靜靜地躺著,像睡著了一般阳柔。 火紅的嫁衣襯著肌膚如雪焰枢。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天舌剂,我揣著相機與錄音济锄,去河邊找鬼。 笑死霍转,一個胖子當著我的面吹牛荐绝,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播避消,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼低滩,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了岩喷?” 一聲冷哼從身側響起恕沫,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎纱意,沒想到半個月后婶溯,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡偷霉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年迄委,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腾它。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡跑筝,死狀恐怖死讹,靈堂內(nèi)的尸體忽然破棺而出瞒滴,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布妓忍,位于F島的核電站虏两,受9級特大地震影響,放射性物質發(fā)生泄漏世剖。R本人自食惡果不足惜定罢,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望旁瘫。 院中可真熱鬧祖凫,春花似錦、人聲如沸酬凳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宁仔。三九已至稠屠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間翎苫,已是汗流浹背权埠。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留煎谍,地道東北人攘蔽。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像呐粘,于是被迫代替她去往敵國和親秩彤。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內(nèi)容