tf.nn.conv2d()

概述

tf.nn.conv2d是TensorFlow里面實(shí)現(xiàn)卷積的函數(shù),參考文檔對(duì)它的介紹并不是很詳細(xì),實(shí)際上這是搭建卷積神經(jīng)網(wǎng)絡(luò)比較核心的一個(gè)方法烙如,非常重要么抗。

說明

tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None)

參數(shù)

  • input:指需要做卷積的輸入圖像,它要求是一個(gè)Tensor亚铁,具有[batch, in_height, in_width, in_channels]這樣的shape蝇刀,具體含義是[訓(xùn)練時(shí)一個(gè)batch的圖片數(shù)量, 圖片高度, 圖片寬度, 圖像通道數(shù)],注意這是一個(gè)4維的Tensor徘溢,要求類型為float32和float64其中之一
  • filter:相當(dāng)于CNN中的卷積核吞琐,它要求是一個(gè)Tensor,具有[filter_height, filter_width, in_channels, out_channels]這樣的shape然爆,具體含義是[卷積核的高度站粟,卷積核的寬度,圖像通道數(shù)曾雕,卷積核個(gè)數(shù)]奴烙,要求類型與參數(shù)input相同,有一個(gè)地方需要注意剖张,第三維in_channels缸沃,就是參數(shù)input的第四維
  • strides:卷積時(shí)在圖像每一維的步長,這是一個(gè)一維的向量修械,長度4
  • padding:string類型的量,只能是"SAME","VALID"其中之一检盼,這個(gè)值決定了不同的卷積方法肯污,當(dāng)其為‘SAME’時(shí),表示卷積核可以停留在圖像邊緣吨枉。
  • use_cudnn_on_gpu:bool類型蹦渣,是否使用cudnn加速,默認(rèn)為true
  • name:指定該操作的name

返回

結(jié)果返回一個(gè)Tensor貌亭,這個(gè)輸出柬唯,就是我們常說的feature map

實(shí)例

1.考慮一種最簡單的情況,現(xiàn)在有一張3×3單通道的圖像(對(duì)應(yīng)的shape:[1圃庭,3锄奢,3,1])剧腻,用一個(gè)1×1的卷積核(對(duì)應(yīng)的shape:[1拘央,1,1书在,1])去做卷積灰伟,最后會(huì)得到一張3×3的feature map。輸出:[1,3, 3, 1]

input_arg = tf.Variable(tf.ones([1, 3, 3, 1]))
filter_arg = tf.Variable(tf.ones([1, 1, 1, 1]))
op = tf.nn.conv2d(input_arg, filter_arg, strides=[1, 3, 3, 1], 
                   use_cudnn_on_gpu=False, padding='VALID')

--------------case1--------------
[[[[ 1.]
[ 1.]
[ 1.]]

[[ 1.]
[ 1.]
[ 1.]]

[[ 1.]
[ 1.]
[ 1.]]]]

2.增加圖片的通道數(shù)儒旬,使用一張3×3五通道的圖像(對(duì)應(yīng)的shape:[1栏账,3帖族,3,5])挡爵,用一個(gè)1×1的卷積核(對(duì)應(yīng)的shape:[1竖般,1,1了讨,1])去做卷積捻激,仍然是一張3×3的feature map,這就相當(dāng)于每一個(gè)像素點(diǎn)前计,卷積核都與該像素點(diǎn)的每一個(gè)通道做點(diǎn)積胞谭。輸出:[1, 3, 3, 1]

input_arg = tf.Variable(tf.ones([1, 3, 3, 5]))
filter_arg = tf.Variable(tf.ones([1, 1, 5, 1]))
op = tf.nn.conv2d(input_arg, filter_arg, strides=[1, 1, 1, 1], 
                   use_cudnn_on_gpu=False, padding='VALID')

--------------case2--------------
[[[[ 5.]
[ 5.]
[ 5.]]

[[ 5.]
[ 5.]
[ 5.]]

[[ 5.]
[ 5.]
[ 5.]]]]

3.把卷積核擴(kuò)大,現(xiàn)在用3×3的卷積核做卷積男杈,最后的輸出是一個(gè)值丈屹,相當(dāng)于情況2的feature map所有像素點(diǎn)的值求和。輸出:[1, 1, 1, 1]

input_arg = tf.Variable(tf.ones([1, 3, 3, 5]))
filter_arg = tf.Variable(tf.ones([3, 3, 5, 1]))
op = tf.nn.conv2d(input_arg, filter_arg, strides=[1, 1, 1, 1], 
                  use_cudnn_on_gpu=False, padding='VALID')

--------------case3--------------
[[[[ 45.]]]]

4.使用更大的圖片將情況2的圖片擴(kuò)大到5×5伶棒,仍然是3×3的卷積核旺垒,令步長為1,輸出3×3的feature map肤无。
注意我們可以把這種情況看成情況2和情況3的中間狀態(tài)先蒋,卷積核以步長1滑動(dòng)遍歷全圖,以下x表示的位置宛渐,表示卷積核停留的位置竞漾,每停留一個(gè),輸出feature map的一個(gè)像素窥翩。輸出:[1, 3, 3, 1]
.....
.xxx.
.xxx.
.xxx.
.....

input_arg = tf.Variable(tf.ones([1, 5, 5, 5]))
filter_arg = tf.Variable(tf.ones([3, 3, 5, 1]))
op = tf.nn.conv2d(input_arg, filter_arg, strides=[1, 1, 1, 1], 
                  use_cudnn_on_gpu=False, padding='VALID')

--------------case4--------------
[[[[ 45.]
[ 45.]
[ 45.]]

[[ 45.]
[ 45.]
[ 45.]]

[[ 45.]
[ 45.]
[ 45.]]]]

5.上面我們一直令參數(shù)padding的值為‘VALID’业岁,當(dāng)其為‘SAME’時(shí),表示卷積核可以停留在圖像邊緣寇蚊,輸出:[1, 5, 5, 1]
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx

input_arg = tf.Variable(tf.ones([1, 5, 5, 5]))
filter_arg = tf.Variable(tf.ones([3, 3, 5, 1]))
op = tf.nn.conv2d(input_arg, filter_arg, strides=[1, 1, 1, 1], 
                  use_cudnn_on_gpu=False, padding='SAME')

--------------case5--------------
[[[[ 20.]
[ 30.]
[ 30.]
[ 30.]
[ 20.]]

[[ 30.]
[ 45.]
[ 45.]
[ 45.]
[ 30.]]

[[ 30.]
[ 45.]
[ 45.]
[ 45.]
[ 30.]]

[[ 30.]
[ 45.]
[ 45.]
[ 45.]
[ 30.]]

[[ 20.]
[ 30.]
[ 30.]
[ 30.]
[ 20.]]]]

6.如果卷積核有多個(gè)笔时,此時(shí)輸出7張5×5的feature map。輸出:[1, 5, 5, 7]

 input_arg = tf.Variable(tf.ones([1, 5, 5, 5]))
filter_arg = tf.Variable(tf.ones([3, 3, 5, 7]))
op = tf.nn.conv2d(input_arg, filter_arg, strides=[1, 1, 1, 1], 
                  use_cudnn_on_gpu=False, padding='SAME')
oplist.append([op, 'case6'])

--------------case6--------------
[[[[ 20. 20. 20. ..., 20. 20. 20.]
[ 30. 30. 30. ..., 30. 30. 30.]
[ 30. 30. 30. ..., 30. 30. 30.]
[ 30. 30. 30. ..., 30. 30. 30.]
[ 20. 20. 20. ..., 20. 20. 20.]]

[[ 30. 30. 30. ..., 30. 30. 30.]
[ 45. 45. 45. ..., 45. 45. 45.]
[ 45. 45. 45. ..., 45. 45. 45.]
[ 45. 45. 45. ..., 45. 45. 45.]
[ 30. 30. 30. ..., 30. 30. 30.]]

[[ 30. 30. 30. ..., 30. 30. 30.]
[ 45. 45. 45. ..., 45. 45. 45.]
[ 45. 45. 45. ..., 45. 45. 45.]
[ 45. 45. 45. ..., 45. 45. 45.]
[ 30. 30. 30. ..., 30. 30. 30.]]

[[ 30. 30. 30. ..., 30. 30. 30.]
[ 45. 45. 45. ..., 45. 45. 45.]
[ 45. 45. 45. ..., 45. 45. 45.]
[ 45. 45. 45. ..., 45. 45. 45.]
[ 30. 30. 30. ..., 30. 30. 30.]]

[[ 20. 20. 20. ..., 20. 20. 20.]
[ 30. 30. 30. ..., 30. 30. 30.]
[ 30. 30. 30. ..., 30. 30. 30.]
[ 30. 30. 30. ..., 30. 30. 30.]
[ 20. 20. 20. ..., 20. 20. 20.]]]]

7.步長不為1的情況仗岸,文檔里說了對(duì)于圖片允耿,因?yàn)橹挥袃删S,通常strides取[1扒怖,stride右犹,stride,1]姚垃。輸出:[1, 3, 3, 7]
x.x.x
.....
x.x.x
.....
x.x.x

input_arg = tf.Variable(tf.ones([1, 5, 5, 5]))
filter_arg = tf.Variable(tf.ones([3, 3, 5, 7]))
op = tf.nn.conv2d(input_arg, filter_arg, strides=[1, 2, 2, 1], 
                  use_cudnn_on_gpu=False, padding='SAME')
oplist.append([op, 'case7'])

--------------case7--------------
[[[[ 20. 20. 20. ..., 20. 20. 20.]
[ 30. 30. 30. ..., 30. 30. 30.]
[ 20. 20. 20. ..., 20. 20. 20.]]

[[ 30. 30. 30. ..., 30. 30. 30.]
[ 45. 45. 45. ..., 45. 45. 45.]
[ 30. 30. 30. ..., 30. 30. 30.]]

[[ 20. 20. 20. ..., 20. 20. 20.]
[ 30. 30. 30. ..., 30. 30. 30.]
[ 20. 20. 20. ..., 20. 20. 20.]]]]

8.如果batch值不為1念链,同時(shí)輸入4張圖,輸出的每張圖,都有7張3×3的feature map掂墓。輸出:[4, 3, 3, 7]

input_arg = tf.Variable(tf.ones([4, 5, 5, 5]))
filter_arg = tf.Variable(tf.ones([3, 3, 5, 7]))
op = tf.nn.conv2d(input_arg, filter_arg, strides=[1, 2, 2, 1], 
                  use_cudnn_on_gpu=False, padding='SAME')

--------------case8--------------
[[[[ 20. 20. 20. ..., 20. 20. 20.]
[ 30. 30. 30. ..., 30. 30. 30.]
[ 20. 20. 20. ..., 20. 20. 20.]]

[[ 30. 30. 30. ..., 30. 30. 30.]
[ 45. 45. 45. ..., 45. 45. 45.]
[ 30. 30. 30. ..., 30. 30. 30.]]

[[ 20. 20. 20. ..., 20. 20. 20.]
[ 30. 30. 30. ..., 30. 30. 30.]
[ 20. 20. 20. ..., 20. 20. 20.]]]

[[[ 20. 20. 20. ..., 20. 20. 20.]
[ 30. 30. 30. ..., 30. 30. 30.]
[ 20. 20. 20. ..., 20. 20. 20.]]

[[ 30. 30. 30. ..., 30. 30. 30.]
[ 45. 45. 45. ..., 45. 45. 45.]
[ 30. 30. 30. ..., 30. 30. 30.]]

[[ 20. 20. 20. ..., 20. 20. 20.]
[ 30. 30. 30. ..., 30. 30. 30.]
[ 20. 20. 20. ..., 20. 20. 20.]]]

[[[ 20. 20. 20. ..., 20. 20. 20.]
[ 30. 30. 30. ..., 30. 30. 30.]
[ 20. 20. 20. ..., 20. 20. 20.]]

[[ 30. 30. 30. ..., 30. 30. 30.]
[ 45. 45. 45. ..., 45. 45. 45.]
[ 30. 30. 30. ..., 30. 30. 30.]]

[[ 20. 20. 20. ..., 20. 20. 20.]
[ 30. 30. 30. ..., 30. 30. 30.]
[ 20. 20. 20. ..., 20. 20. 20.]]]

[[[ 20. 20. 20. ..., 20. 20. 20.]
[ 30. 30. 30. ..., 30. 30. 30.]
[ 20. 20. 20. ..., 20. 20. 20.]]

[[ 30. 30. 30. ..., 30. 30. 30.]
[ 45. 45. 45. ..., 45. 45. 45.]
[ 30. 30. 30. ..., 30. 30. 30.]]

[[ 20. 20. 20. ..., 20. 20. 20.]
[ 30. 30. 30. ..., 30. 30. 30.]
[ 20. 20. 20. ..., 20. 20. 20.]]]]

代碼

import tensorflow as tf

oplist = []

# input_arg = [batch, in_height, in_width, in_channels]
# filter_arg = [filter_height, filter_width, in_channels, out_channels]

# case 1
input_arg = tf.Variable(tf.ones([1, 3, 3, 1]))
filter_arg = tf.Variable(tf.ones([1, 1, 1, 1]))
op = tf.nn.conv2d(input_arg, filter_arg, strides=[1, 1, 1, 1], 
                   use_cudnn_on_gpu=False, padding='VALID')
oplist.append([op, 'case1'])

# case 2
input_arg = tf.Variable(tf.ones([1, 3, 3, 5]))
filter_arg = tf.Variable(tf.ones([1, 1, 5, 1]))

op = tf.nn.conv2d(input_arg, filter_arg, strides=[1, 1, 1, 1], 
                   use_cudnn_on_gpu=False, padding='VALID')
oplist.append([op, 'case2'])

# case 3
input_arg = tf.Variable(tf.ones([1, 3, 3, 5]))
filter_arg = tf.Variable(tf.ones([3, 3, 5, 1]))
op = tf.nn.conv2d(input_arg, filter_arg, strides=[1, 1, 1, 1], 
                  use_cudnn_on_gpu=False, padding='VALID')
oplist.append([op, 'case3'])

# case 4
input_arg = tf.Variable(tf.ones([1, 5, 5, 5]))
filter_arg = tf.Variable(tf.ones([3, 3, 5, 1]))
op = tf.nn.conv2d(input_arg, filter_arg, strides=[1, 1, 1, 1], 
                  use_cudnn_on_gpu=False, padding='VALID')
oplist.append([op, 'case4'])

# case 5
input_arg = tf.Variable(tf.ones([1, 5, 5, 5]))
filter_arg = tf.Variable(tf.ones([3, 3, 5, 1]))
op = tf.nn.conv2d(input_arg, filter_arg, strides=[1, 1, 1, 1], 
                  use_cudnn_on_gpu=False, padding='SAME')
oplist.append([op, 'case5'])

# case 6
input_arg = tf.Variable(tf.ones([1, 5, 5, 5]))
filter_arg = tf.Variable(tf.ones([3, 3, 5, 7]))
op = tf.nn.conv2d(input_arg, filter_arg, strides=[1, 1, 1, 1], 
                  use_cudnn_on_gpu=False, padding='SAME')
oplist.append([op, 'case6'])

# case 7
input_arg = tf.Variable(tf.ones([1, 5, 5, 5]))
filter_arg = tf.Variable(tf.ones([3, 3, 5, 7]))
op = tf.nn.conv2d(input_arg, filter_arg, strides=[1, 2, 2, 1], 
                  use_cudnn_on_gpu=False, padding='SAME')
oplist.append([op, 'case7'])

# case 8
input_arg = tf.Variable(tf.ones([4, 5, 5, 5]))
filter_arg = tf.Variable(tf.ones([3, 3, 5, 7]))
op = tf.nn.conv2d(input_arg, filter_arg, strides=[1, 2, 2, 1], 
                  use_cudnn_on_gpu=False, padding='SAME')
oplist.append([op, 'case8'])

with tf.Session() as sess:
    init = tf.global_variables_initializer()
    sess.run(init)
    for aop in oplist:
        print('--------------{}--------------'.format(aop[1]))  
        print(sess.run(aop[0]))
        print('\n')

--------------case1--------------
[[[[ 1.]
[ 1.]
[ 1.]]

[[ 1.]
[ 1.]
[ 1.]]

[[ 1.]
[ 1.]
[ 1.]]]]

--------------case2--------------
[[[[ 5.]
[ 5.]
[ 5.]]

[[ 5.]
[ 5.]
[ 5.]]

[[ 5.]
[ 5.]
[ 5.]]]]

--------------case3--------------
[[[[ 45.]]]]

--------------case4--------------
[[[[ 45.]
[ 45.]
[ 45.]]

[[ 45.]
[ 45.]
[ 45.]]

[[ 45.]
[ 45.]
[ 45.]]]]

--------------case5--------------
[[[[ 20.]
[ 30.]
[ 30.]
[ 30.]
[ 20.]]

[[ 30.]
[ 45.]
[ 45.]
[ 45.]
[ 30.]]

[[ 30.]
[ 45.]
[ 45.]
[ 45.]
[ 30.]]

[[ 30.]
[ 45.]
[ 45.]
[ 45.]
[ 30.]]

[[ 20.]
[ 30.]
[ 30.]
[ 30.]
[ 20.]]]]

--------------case6--------------
[[[[ 20. 20. 20. ..., 20. 20. 20.]
[ 30. 30. 30. ..., 30. 30. 30.]
[ 30. 30. 30. ..., 30. 30. 30.]
[ 30. 30. 30. ..., 30. 30. 30.]
[ 20. 20. 20. ..., 20. 20. 20.]]

[[ 30. 30. 30. ..., 30. 30. 30.]
[ 45. 45. 45. ..., 45. 45. 45.]
[ 45. 45. 45. ..., 45. 45. 45.]
[ 45. 45. 45. ..., 45. 45. 45.]
[ 30. 30. 30. ..., 30. 30. 30.]]

[[ 30. 30. 30. ..., 30. 30. 30.]
[ 45. 45. 45. ..., 45. 45. 45.]
[ 45. 45. 45. ..., 45. 45. 45.]
[ 45. 45. 45. ..., 45. 45. 45.]
[ 30. 30. 30. ..., 30. 30. 30.]]

[[ 30. 30. 30. ..., 30. 30. 30.]
[ 45. 45. 45. ..., 45. 45. 45.]
[ 45. 45. 45. ..., 45. 45. 45.]
[ 45. 45. 45. ..., 45. 45. 45.]
[ 30. 30. 30. ..., 30. 30. 30.]]

[[ 20. 20. 20. ..., 20. 20. 20.]
[ 30. 30. 30. ..., 30. 30. 30.]
[ 30. 30. 30. ..., 30. 30. 30.]
[ 30. 30. 30. ..., 30. 30. 30.]
[ 20. 20. 20. ..., 20. 20. 20.]]]]

--------------case7--------------
[[[[ 20. 20. 20. ..., 20. 20. 20.]
[ 30. 30. 30. ..., 30. 30. 30.]
[ 20. 20. 20. ..., 20. 20. 20.]]

[[ 30. 30. 30. ..., 30. 30. 30.]
[ 45. 45. 45. ..., 45. 45. 45.]
[ 30. 30. 30. ..., 30. 30. 30.]]

[[ 20. 20. 20. ..., 20. 20. 20.]
[ 30. 30. 30. ..., 30. 30. 30.]
[ 20. 20. 20. ..., 20. 20. 20.]]]]

--------------case8--------------
[[[[ 20. 20. 20. ..., 20. 20. 20.]
[ 30. 30. 30. ..., 30. 30. 30.]
[ 20. 20. 20. ..., 20. 20. 20.]]

[[ 30. 30. 30. ..., 30. 30. 30.]
[ 45. 45. 45. ..., 45. 45. 45.]
[ 30. 30. 30. ..., 30. 30. 30.]]

[[ 20. 20. 20. ..., 20. 20. 20.]
[ 30. 30. 30. ..., 30. 30. 30.]
[ 20. 20. 20. ..., 20. 20. 20.]]]

[[[ 20. 20. 20. ..., 20. 20. 20.]
[ 30. 30. 30. ..., 30. 30. 30.]
[ 20. 20. 20. ..., 20. 20. 20.]]

[[ 30. 30. 30. ..., 30. 30. 30.]
[ 45. 45. 45. ..., 45. 45. 45.]
[ 30. 30. 30. ..., 30. 30. 30.]]

[[ 20. 20. 20. ..., 20. 20. 20.]
[ 30. 30. 30. ..., 30. 30. 30.]
[ 20. 20. 20. ..., 20. 20. 20.]]]

[[[ 20. 20. 20. ..., 20. 20. 20.]
[ 30. 30. 30. ..., 30. 30. 30.]
[ 20. 20. 20. ..., 20. 20. 20.]]

[[ 30. 30. 30. ..., 30. 30. 30.]
[ 45. 45. 45. ..., 45. 45. 45.]
[ 30. 30. 30. ..., 30. 30. 30.]]

[[ 20. 20. 20. ..., 20. 20. 20.]
[ 30. 30. 30. ..., 30. 30. 30.]
[ 20. 20. 20. ..., 20. 20. 20.]]]

[[[ 20. 20. 20. ..., 20. 20. 20.]
[ 30. 30. 30. ..., 30. 30. 30.]
[ 20. 20. 20. ..., 20. 20. 20.]]

[[ 30. 30. 30. ..., 30. 30. 30.]
[ 45. 45. 45. ..., 45. 45. 45.]
[ 30. 30. 30. ..., 30. 30. 30.]]

[[ 20. 20. 20. ..., 20. 20. 20.]
[ 30. 30. 30. ..., 30. 30. 30.]
[ 20. 20. 20. ..., 20. 20. 20.]]]]

參考

http://www.cnblogs.com/welhzh/p/6607581.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谦纱,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子君编,更是在濱河造成了極大的恐慌跨嘉,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吃嘿,死亡現(xiàn)場離奇詭異祠乃,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)兑燥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門亮瓷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人降瞳,你說我怎么就攤上這事嘱支。” “怎么了挣饥?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵除师,是天一觀的道長。 經(jīng)常有香客問我扔枫,道長汛聚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任短荐,我火速辦了婚禮倚舀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘搓侄。我一直安慰自己,他們只是感情好话速,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布讶踪。 她就那樣靜靜地躺著,像睡著了一般泊交。 火紅的嫁衣襯著肌膚如雪乳讥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天廓俭,我揣著相機(jī)與錄音云石,去河邊找鬼。 笑死研乒,一個(gè)胖子當(dāng)著我的面吹牛汹忠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼宽菜,長吁一口氣:“原來是場噩夢啊……” “哼谣膳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起铅乡,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤继谚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后阵幸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體花履,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年挚赊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了诡壁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡咬腕,死狀恐怖欢峰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情涨共,我是刑警寧澤纽帖,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站举反,受9級(jí)特大地震影響懊直,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜火鼻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一室囊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧魁索,春花似錦融撞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鹏控,卻和暖如春致扯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背当辐。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來泰國打工抖僵, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人缘揪。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓耍群,卻偏偏與公主長得像义桂,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子世吨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

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