Tensorflow之旅(5 - 完結(jié))(戴德曼翻譯)

五. Tensorflow圖的可視化

? ? ? ? ?深度學(xué)習(xí)模型通常使用錯綜復(fù)雜的神經(jīng)網(wǎng)絡(luò)丰滑。比如但绕,文獻(xiàn)【19】描述的谷歌Inception模型就是一個有36000個獨立單元的卷積神經(jīng)網(wǎng)絡(luò)。而文獻(xiàn)【8】描述的某種長短時記憶模型(LSTM)用到了15000個節(jié)點王悍。為了使用和調(diào)優(yōu)如此復(fù)雜的網(wǎng)絡(luò)柒莉,必須依賴強有力的可視化工具纲熏。Tensorboard是Tensorflow的可視化儀表盤。本章節(jié)將講述Tensorboard的功能棚辽。

A. Tensorboard的特性

Tensorboard的核心特性就是構(gòu)建明細(xì)易懂計算圖的可視化界面技竟。如下圖例子可以看到Tensorboard是如何展示計算圖的。


? ? ? ? name scope(命名空間)是Tensorflow里面一個重要可視化分類方法屈藐。它可以把同屬于一個命名空間的算子榔组,關(guān)系,輸入和輸出顯示在同一個方框圖內(nèi)联逻。下圖展示了搓扯,從上圖擴展一個layer1命名空間的詳細(xì)算法細(xì)節(jié)。


? ? ? ? ?另外包归,Tensorboard允許用戶追蹤單個變量在訓(xùn)練過程中的變化情況锨推。你可以附加兩類總結(jié)算子到計算圖上去生成報告(scalar summaries和histogram summaries)。Scalar summaries顯示的是張量伸縮的進(jìn)度圖公壤,也就是在某次訓(xùn)練迭代的采樣數(shù)據(jù)换可。這樣你可以看到訓(xùn)練的精確度和損失變化情況。Histogram summaries節(jié)點允許用戶去追蹤數(shù)值分布情況厦幅,比如神經(jīng)網(wǎng)絡(luò)的權(quán)重或者softmax估值分布沾鳄。下圖展示了這兩種報告。


我們注意到Tensorboard采用了網(wǎng)頁交互形式确憨。一旦你的計算圖被加載進(jìn)來译荞,你就可以觀察模型,監(jiān)控算子運行休弃。具體的Tensorboard在線演示可以在這里找到:https://www.tensorflow.org/tensorboard/index.html

B. Tensorboard的實操

為了把Tensorboard整合到你的Tensorflow代碼吞歼,你需要至少做三步。第一玫芦,你需要使用命名空間來規(guī)劃你的節(jié)點浆熔。第二,你需要給你的算子增加某種類型的報告桥帆。最后第三部医增,你需要調(diào)用SummaryWriter去把Summaries得到的張量寫到文件中去。與其分別去寫每一個summaries老虫,還不如調(diào)用tf.merge_all_summaries()整合所有的summaries叶骨,然后一次性寫入文件。下面展示了Tensorboard的樣例代碼祈匙。

with tf.name_scope(’Variables’):

x = tf.constant(1.0)

y = tf.constant(2.0)

tf.scalar_summary(’z’, x + y)

merged = tf.merge_all_summaries()

writer = tf.train.SummaryWriter(’/tmp/log’, graph)

with tf.Session(graph=graph):forstepinrange(1000):

writer.add_summary(

merged.eval(), global_step=step)

六. 比較其它深度學(xué)習(xí)框架

除了Tensorflow忽刽,我們還能找到其它一些深度學(xué)習(xí)框架。人氣比較高的有Theano夺欲,Torch和Caffe跪帝。在這一章,我們會探索這些框架和Tensorflow的異同點些阅,進(jìn)行一系列定性和定量的分析伞剑。

A. 定性分析

下面我們分別比較上述三種深度學(xué)習(xí)框架和Tensorflow的差異。下圖則是匯總了這個比較市埋。

? ? ? ? 1)Theano:在我們需要討論的三種Tensorflow的替代框架中黎泣,Theano是最像Tensorflow的。如同Tensorflow一樣缤谎,Theano的編程模型也是聲明式而不是命令式的基于計算圖抒倚。而且,Theano也使用符號差異化坷澡。然后Theano有一個比較長時間的圖編譯時間托呕,因為它需要把Python代碼轉(zhuǎn)化為C++/CUDA代碼【5】。一方面频敛,這是因為Theano采用了很多高級圖優(yōu)化的算法【5】镣陕,而Tensorflow僅僅是做了子圖消減優(yōu)化。對比Tensorboard姻政, Theano的可視化工具可以用可憐來形容呆抑。它除了輸出一些可讀的文字來表示圖或靜態(tài)圖像,它還需要一個插件來生成類似交互式網(wǎng)頁可視化汁展,剩下來的東西鹊碍,Theano就是泛善可陳了。

? ? ? ? 2)Torch:Torch和Tensorflow根本不同的地方是Torch是C/CUDAde后端實現(xiàn)食绿,加上Lua的前端編程接口侈咕。Lua確實是相當(dāng)快的腳本語言,可以快速構(gòu)建原型系統(tǒng)器紧,但是相對于Python耀销,它算是非主流。雖然Lua 具備各種性能和功能上的優(yōu)勢铲汪,但是對于工業(yè)界而言熊尉,對比Tensorflow的Python API而言罐柳,就顯得曲高和寡了。除了編程語言的考量狰住,Torch的編程模型也和Tensorflow不同张吉。它采用命令式編程,也不聲明計算圖催植。這就要求程序員還要仔細(xì)安排算子執(zhí)行的順序肮蛹。這也暗示了Torch在前向和反向傳播計算梯度的時候,是用符號到數(shù)值而不是符號到符號差異化來優(yōu)化创南。

? ? ? ? 3)Caffe:Caffe和Tensorflow有著天壤之別伦忠。Caffe的模型創(chuàng)建擁有MATLAB和Python編程接口,主要使用谷歌的協(xié)議緩沖語言稿辙,這樣帶來和Python截然不同的編程體驗昆码。另外,在Caffe里面的基本構(gòu)建單元是神經(jīng)網(wǎng)絡(luò)的層邓深,而不是Tensorflow里面的算子未桥。這樣Tensorflow算是更為底層的框架。和Torch相似芥备,Caffe也不是專注于構(gòu)建計算圖冬耿,或者符號。所以計算導(dǎo)數(shù)是通過符號到數(shù)值的方法萌壳。Caffe特別適合于開發(fā)卷積神經(jīng)網(wǎng)絡(luò)亦镶,用于圖像識別任務(wù)。但是袱瓮,它就沒有Tensorflow那樣在神經(jīng)網(wǎng)絡(luò)領(lǐng)域具備普適性缤骨。比如Caffe在架構(gòu)上不支持循環(huán)架構(gòu),而這時RNN尺借,LSTM這樣神經(jīng)網(wǎng)絡(luò)的基本構(gòu)造绊起。另外,Caffe也不支持分布式系統(tǒng)燎斩。

B. 定量分析

? ? ? ? 接下來虱歪,我們會對這幾種框架做定量分析來,同時給出深度學(xué)習(xí)框架評估的整體發(fā)展趨勢栅表。

? ? ? ? 文獻(xiàn)【20】的研究是由博世研發(fā)中心在2016年3月進(jìn)行的笋鄙,他們對比了Tensorflow,Torch怪瓶,Theano和Caffe這幾種不同的神經(jīng)網(wǎng)絡(luò)架構(gòu)萧落。他們在Intel Xeon E5-1650 v2 CPU @ 3.50 GHz and an NVIDIA GeForce GTX Titan X/PCIe/SSE2 GPU這樣配置的機器上安裝Ubuntu14.04,然后跑LeNet CNN模型【21】來看不同的框架的性能如何。他們特別留意神經(jīng)網(wǎng)絡(luò)的前向傳播速度找岖,因為他們相信這和框架部署策略有關(guān)陨倡;還有反向傳播速度,這是和訓(xùn)練模型性能相關(guān)宣增。我們摘要了他們結(jié)論如下表玫膀,這個結(jié)果是在兩種情況下得到的矛缨,(a)是一個CPU跑12個線程爹脾,(b)是GPU。從結(jié)果來看箕昭,有趣的是Tensorflow無論是在CPU還是在GPU都跑不過Torch灵妨。最有意思的是Tensorflow在跑GPU的時候成績掉的很厲害,是倒數(shù)第一落竹。文獻(xiàn)【20】的作者注意到這可能是由于測試Tensorflow使用的是NVIDIA的cuDNNv2泌霍,而其他庫用的是v3. 他們在文中強調(diào),這么做是因為Tensorflow的官方文檔建議這么配置cuDNN的版本述召。

? ? ? ? 我們能夠拿到的第二個測試來源是文獻(xiàn)【22】卷積神經(jīng)網(wǎng)絡(luò)評測平臺的結(jié)果朱转,你可以在github上找到他們。它是由Facebook的一個AI研究工程師Soumith Chintala維護(hù)的积暖。我們參考的結(jié)果是2016年五月25日提交的藤为。Chintala提交了圍繞卷積神經(jīng)網(wǎng)絡(luò)的許多框架的實現(xiàn),當(dāng)然包括Tensorflow夺刑,Torch和Caffe缅疟。Theano沒有參加評測,所以我們這里看不到它的有關(guān)數(shù)據(jù)遍愿。該作者聲稱的硬件配置是6-core Intel Core i7-5930K CPU @ 3.50GHz配有an NVIDIA Titan X graphics chip存淫,跑的是Ubuntu14.04。該評測也分別給出了正向傳播和反向傳播的速度如下表:

? ? ? ? 不出意料沼填,Tensorflow是僅次于Torch的框架桅咆。最后我們來看一下文獻(xiàn)【5】的評測,這是由Theano開發(fā)團(tuán)隊在2016年5月9日提交的報告坞笙。除了CNN模型之外岩饼,他們還測試了之前我們提到的AlexNet架構(gòu),測試還包括了在Penn Treebank【24】上跑LSTM的結(jié)果羞海。他們的評測針對小模型(200個節(jié)點的單隱藏層忌愚,每個序列長20),統(tǒng)計每秒處理多少單詞却邓;針對大模型(兩個650個節(jié)點的隱藏層硕糊,序列長為50)。在文獻(xiàn)【5】還提到一個中等模型的測試,這里我們不做討論简十,評測結(jié)果如下圖所示:

? ? ? ? 這個結(jié)果是在硬件配置NVIDIA Digits DevBox with 4 Titan X GPUs and an Intel Core i7-5930K CPU的機器上跑出來的檬某。,而且他們給所有框架使用的都是cuDNN v4螟蝙。Caffe的運行結(jié)果沒有在列恢恼。在他們的評測結(jié)果里,Tensorflow在小模型表現(xiàn)最好胰默,大模型稍差场斑。這個表格來源于文獻(xiàn)【5】。

當(dāng)Tensorflow剛剛發(fā)布的時候牵署,表現(xiàn)奇差漏隐,整個深度學(xué)習(xí)社區(qū)都表示失望。隨后奴迅,不斷推出的新版本青责,不斷改進(jìn)和增強功能,給深度學(xué)習(xí)帶來了驚人的進(jìn)步取具。這也反映在我們的一系列挑選工作中脖隶。最早的三次評測【20】表明,Tensorflow完全不能和Torch暇检,Theano和Caffe相提并論产阱。但是僅僅兩個月后,【22】的結(jié)果已經(jīng)顯示Tensorflow追趕上來占哟,到了最后的評測【5】的時候心墅,Tensorflow已經(jīng)處在領(lǐng)先的地位了。我們預(yù)測Tensorflow的性能還會繼續(xù)改進(jìn)榨乎,前途無量怎燥。特別是在分布式處理的場景下,目前和可以預(yù)見的將來蜜暑,Tensorflow都將是領(lǐng)先地位铐姚。

七. Tensorflow的實際應(yīng)用

? ? ? ? Tensorflow發(fā)布才短短六個月,學(xué)術(shù)界和工業(yè)界還沒有能夠完全擁抱Tensorflow肛捍,一些現(xiàn)有應(yīng)用的移植還需要時間隐绵,新的研究還需時日。但是一點毋庸置疑拙毫,谷歌已經(jīng)積極應(yīng)用和推廣Tensorflow在各種任務(wù)中【19】【25】【26】【27】【28】依许。我們將選擇性的看一看這些應(yīng)用是怎么使用Tensorflow的。

A. 學(xué)術(shù)界

? ? ? ? 首先提到Tensorflow的是2016年二月的文獻(xiàn)【29】缀蹄,來自谷歌大腦組的Szegedy峭跳,Ioffe和Vanhoucke發(fā)表的文章膘婶。他們用Tensorflow改進(jìn)了Inception模型【19】,主要用于圖像識別蛀醉。作者給出了ImageNet測試集最高5檔3.08%偏差的好成績悬襟。

? ? ? ? 在文獻(xiàn)【25】,Ramsunder等人對于藥品發(fā)現(xiàn)的多任務(wù)網(wǎng)絡(luò)的討論使用了Tensorflow拯刁,這是斯坦福大學(xué)和谷歌之間的聯(lián)合研究工作脊岳。這篇文章描述了使用Tensorflow構(gòu)建深層神經(jīng)網(wǎng)絡(luò)做虛擬掃描來選擇潛在的候選藥物。這是為了幫助醫(yī)藥公司和科研社區(qū)尋找為治療疾病的新藥垛玻。

? ? ? ? August和Ni應(yīng)用Tensorflow創(chuàng)建了遞歸神經(jīng)網(wǎng)絡(luò)優(yōu)化動態(tài)解耦割捅,一種在量子內(nèi)存抑制誤差的技術(shù)∝舶【30】作者旨在維持量子糾纏態(tài)棺牧,這是構(gòu)建通用量子計算機的關(guān)鍵需求巫糙。

最后朗儒,文獻(xiàn)【31】研究了自然語言處理的sequence-to-sequence模型,作者使用Tensorflow参淹,采用滑動窗口技術(shù)去做字符級別的英語到拉脫維亞語在音頻和視頻內(nèi)容的翻譯醉锄。作者用這個方法去分類電視節(jié)目,廣播節(jié)目浙值,并且聚類單個的故事恳不。

B. 工業(yè)界

? ? ? ? 除了谷歌之外,工業(yè)界還很少有人使用Tensorflow开呐,至少公開的情況來看是這個樣子烟勋。所以我們來看看谷歌的Tensorflow應(yīng)用情況。

? ? ? ? 最近筐付,谷歌在調(diào)整它的核心業(yè)務(wù)算法PageRank【32】系統(tǒng)RankBrain【33】卵惦,使用的技術(shù)就是Tensorflow。RankBrain使用大規(guī)模分布式深度神經(jīng)網(wǎng)絡(luò)來做搜索排序瓦戚。根據(jù)文獻(xiàn)【33】沮尿,超過15%發(fā)給www.google.com的查詢是全新查詢。RankBrain系統(tǒng)可以通過相似性比對來給出未知查詢建議较解。

? ? ? ? 另一個應(yīng)用是谷歌的智能郵件回復(fù)系統(tǒng)【27】畜疾。谷歌已經(jīng)整合了智能回復(fù)功能在其郵件系統(tǒng)的Inbox里面。系統(tǒng)使用遞歸神經(jīng)網(wǎng)絡(luò)和特定LSTM模塊進(jìn)行序列到序列的學(xué)習(xí)和自然語言理解印衔。一個編碼器映射一個語料庫到一個“思維向量”啡捶,而解碼器則在語法和語義上合成正確的回復(fù),然后以建議的形式呈現(xiàn)給用戶奸焙。

? ? ? ? 在文獻(xiàn)【26】瞎暑,谷歌在使用卷積神經(jīng)網(wǎng)絡(luò)做圖像識別和自動文本翻譯徒溪。作為谷歌手機的內(nèi)置功能,對于用戶來說的外文可以被算法識別金顿,然后翻譯成用戶識別語言臊泌,并且呈現(xiàn)在原文所在圖像上。這種方法可以用來翻譯圖片里的街道名揍拆。文獻(xiàn)【26】特別強調(diào)如果部署這種算法在低端手機設(shè)備和慢速網(wǎng)絡(luò)上渠概。因此,神經(jīng)網(wǎng)絡(luò)訓(xùn)練小模型嫂拴,然后應(yīng)用于資源首先的場景也在發(fā)展播揪。

? ? ? ? 最后,我們已經(jīng)注意到谷歌旗下的DeppMind筒狠,著名的AI研究機構(gòu)已經(jīng)把他們的研究平臺從Torch7轉(zhuǎn)移到Tensorflow了猪狈。【28】有消息稱【17】辩恼,DeepMind使用Tensorflow雇庙,在谷歌新發(fā)布的張量處理單元(TPU)上訓(xùn)練他們的AlphaGo模型。該文獻(xiàn)作者就是谷歌DeepMind的雇員灶伊,揭示了為什么Tensorflow對于DeepMind有好處的四個理由:

? ? ? ? 1)Tensorflow的大規(guī)模應(yīng)用是構(gòu)建在谷歌云平臺上疆前,可以很容易提供充足的計算力。

? ? ? ? 2)Tensorflow支持TPU這樣的硬件擴展聘萨。

? ? ? ? 3)Tensorflow的主要編程接口是Python竹椒,這是谷歌的核心編程語言,要比Lua能夠得到更好的支持米辐。

? ? ? ? 4)Tensorflow是能夠很好支持多GPU的框架胸完。

八. 總結(jié)

? ? ? ? 我們已經(jīng)從各個方面完整的討論了Tensorflow,這種基于計算圖的開源深度學(xué)習(xí)庫的各種特性翘贮,包括能夠快速計算梯度赊窥,它固有的支持分布式計算的特性,強有力可視化工具择膝。它能夠在很細(xì)顆粒度構(gòu)建神經(jīng)網(wǎng)絡(luò)誓琼,允許高度定制模型,同時也支持一些快速原型搭建的封裝庫肴捉,比如TFLearn腹侣。相比Torch,Theano之類的框架齿穗,Tensorflow增加了新特征和改進(jìn)了現(xiàn)有特性傲隶。它在性能方面的表現(xiàn),開始不盡人意窃页,但是隨著時間的推移跺株,不斷的隨著新庫的發(fā)布在改進(jìn)复濒。

? ? ? ? 我們注意到對于Tensorflow的分布式運行性能的評測目前開展的很少。我們認(rèn)為這是很重要的一環(huán)乒省,也是學(xué)術(shù)界需要深入研究的一點巧颈。

? ? ? ? Tensorflow已經(jīng)在開源社區(qū)取得了相當(dāng)?shù)娜藲夂蛷娪辛Φ牡谌街С帧9雀枰呀?jīng)做出了明智的決定袖扛。我們相信砸泛,Tensorflow不僅僅對于它的所有者有利,也會惠及更為廣大的科研社區(qū)蛆封;它會打開通往更快更大規(guī)模的人工智能之門唇礁。

附錄-1

#!/usr/bin/env python

# -*- coding: utf-8 -*-

""" A one-hidden-layer-MLP MNIST-classifier. """

from__future__importabsolute_importfrom__future__importdivisionfrom__future__importprint_function

# Import the training data (MNIST)

fromtensorflow.examples.tutorials.mnistimportinput_data

importtensorflow as tf

# Possibly download and extract the MNIST data set.

# Retrieve the labels as one-hot-encoded vectors.mnist = input_data.read_data_sets("/tmp/mnist",

one_hot=True)

# Create a new graph

graph = tf.Graph()

# Set our graph as the one to add nodes to

with graph.as_default():

# Placeholder for input examples (None =

variable dimension)

examples = tf.placeholder(shape=[None, 784],

dtype=tf.float32)

# Placeholder for labels

labels = tf.placeholder(shape=[None, 10],

dtype=tf.float32)

weights =

tf.Variable(tf.truncated_normal(shape=[784,

10], stddev=0.1))

bias = tf.Variable(tf.constant(0.1, shape=[10]))

# Apply an affine transformation to the input

features

logits = tf.matmul(examples, weights) + bias

estimates = tf.nn.softmax(logits)

# Compute the cross-entropy

cross_entropy = -tf.reduce_sum(labels*tf.log(estimates),

reduction_indices=[1])

loss = tf.reduce_mean(cross_entropy)

# Create a gradient-descent optimizer that

minimizes the loss.

# We choose a learning rate of 0.01

optimizer =

tf.train.GradientDescentOptimizer(0.5).minimize(loss)

# Find the indices where the predictions were

correct

correct_predictions = tf.equal(

tf.argmax(estimates, dimension=1),

tf.argmax(labels, dimension=1))

accuracy =

tf.reduce_mean(tf.cast(correct_predictions,

tf.float32))

with tf.Session(graph=graph) as session:

tf.initialize_all_variables().run()forstepinrange(1001):

# And finally the loss

example_batch, label_batch =

mnist.train.next_batch(100)

feed_dict = {examples: example_batch, labels:

label_batch}

ifstep % 100 == 0:

_, loss_value, accuracy_value =

session.run(

[optimizer, loss, accuracy],

feed_dict=feed_dict

)print("Loss at time {0}: {1}".format(step,

loss_value))print("Accuracy at time {0}:

{1}".format(step, accuracy_value))

optimizer.run(feed_dict)

參考文獻(xiàn)



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市惨篱,隨后出現(xiàn)的幾起案子盏筐,更是在濱河造成了極大的恐慌,老刑警劉巖砸讳,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件琢融,死亡現(xiàn)場離奇詭異,居然都是意外死亡绣夺,警方通過查閱死者的電腦和手機吏奸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來陶耍,“玉大人,你說我怎么就攤上這事她混×页” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵坤按,是天一觀的道長毯欣。 經(jīng)常有香客問我,道長臭脓,這世上最難降的妖魔是什么酗钞? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮来累,結(jié)果婚禮上砚作,老公的妹妹穿的比我還像新娘。我一直安慰自己嘹锁,他們只是感情好葫录,可當(dāng)我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著领猾,像睡著了一般米同。 火紅的嫁衣襯著肌膚如雪骇扇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天面粮,我揣著相機與錄音少孝,去河邊找鬼。 笑死熬苍,一個胖子當(dāng)著我的面吹牛韭山,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播冷溃,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼钱磅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了似枕?” 一聲冷哼從身側(cè)響起盖淡,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎凿歼,沒想到半個月后褪迟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡答憔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年味赃,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片虐拓。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡心俗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蓉驹,到底是詐尸還是另有隱情城榛,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布态兴,位于F島的核電站狠持,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏瞻润。R本人自食惡果不足惜喘垂,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望绍撞。 院中可真熱鬧正勒,春花似錦、人聲如沸楚午。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽矾柜。三九已至阱驾,卻和暖如春就谜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背里覆。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工丧荐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人喧枷。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓虹统,卻偏偏與公主長得像,于是被迫代替她去往敵國和親隧甚。 傳聞我的和親對象是個殘疾皇子车荔,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,465評論 2 348

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