【轉(zhuǎn)載】TensorFlow 官方文檔中文版--MNIST機(jī)器學(xué)習(xí)入門

wiki.jikexueyuan.com/project/tensorflow-zh/tutorials/mnist_beginners.html

MNIST機(jī)器學(xué)習(xí)入門

這個教程的目標(biāo)讀者是對機(jī)器學(xué)習(xí)和TensorFlow都不太了解的新手矾湃。如果你已經(jīng)了解MNIST和softmax回歸(softmax regression)的相關(guān)知識,你可以閱讀這個快速上手教程名党。

當(dāng)我們開始學(xué)習(xí)編程的時候泉沾,第一件事往往是學(xué)習(xí)打印"Hello World"。就好比編程入門有Hello World蝙搔,機(jī)器學(xué)習(xí)入門有MNIST你弦。

MNIST是一個入門級的計算機(jī)視覺數(shù)據(jù)集毯欣,它包含各種手寫數(shù)字圖片:

它也包含每一張圖片對應(yīng)的標(biāo)簽,告訴我們這個是數(shù)字幾署照。比如座菠,上面這四張圖片的標(biāo)簽分別是5,0藤树,4浴滴,1。

在此教程中岁钓,我們將訓(xùn)練一個機(jī)器學(xué)習(xí)模型用于預(yù)測圖片里面的數(shù)字升略。我們的目的不是要設(shè)計一個世界一流的復(fù)雜模型 -- 盡管我們會在之后給你源代碼去實(shí)現(xiàn)一流的預(yù)測模型 -- 而是要介紹下如何使用TensorFlow。所以屡限,我們這里會從一個很簡單的數(shù)學(xué)模型開始品嚣,它叫做Softmax Regression。

對應(yīng)這個教程的實(shí)現(xiàn)代碼很短钧大,而且真正有意思的內(nèi)容只包含在三行代碼里面翰撑。但是,去理解包含在這些代碼里面的設(shè)計思想是非常重要的:TensorFlow工作流程和機(jī)器學(xué)習(xí)的基本概念啊央。因此眶诈,這個教程會很詳細(xì)地介紹這些代碼的實(shí)現(xiàn)原理涨醋。

MNIST數(shù)據(jù)集

MNIST數(shù)據(jù)集的官網(wǎng)是Yann LeCun's website。在這里逝撬,我們提供了一份python源代碼用于自動下載和安裝這個數(shù)據(jù)集浴骂。你可以下載這份代碼,然后用下面的代碼導(dǎo)入到你的項(xiàng)目里面宪潮,也可以直接復(fù)制粘貼到你的代碼文件里面溯警。

import tensorflow.examples.tutorials.mnist.input_data

mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

下載下來的數(shù)據(jù)集被分成兩部分:60000行的訓(xùn)練數(shù)據(jù)集(mnist.train)和10000行的測試數(shù)據(jù)集(mnist.test)。這樣的切分很重要狡相,在機(jī)器學(xué)習(xí)模型設(shè)計時必須有一個單獨(dú)的測試數(shù)據(jù)集不用于訓(xùn)練而是用來評估這個模型的性能梯轻,從而更加容易把設(shè)計的模型推廣到其他數(shù)據(jù)集上(泛化)。

正如前面提到的一樣尽棕,每一個MNIST數(shù)據(jù)單元有兩部分組成:一張包含手寫數(shù)字的圖片和一個對應(yīng)的標(biāo)簽喳挑。我們把這些圖片設(shè)為“xs”,把這些標(biāo)簽設(shè)為“ys”萄金。訓(xùn)練數(shù)據(jù)集和測試數(shù)據(jù)集都包含xs和ys蟀悦,比如訓(xùn)練數(shù)據(jù)集的圖片是mnist.train.images,訓(xùn)練數(shù)據(jù)集的標(biāo)簽是mnist.train.labels氧敢。

每一張圖片包含28X28個像素點(diǎn)日戈。我們可以用一個數(shù)字?jǐn)?shù)組來表示這張圖片:

我們把這個數(shù)組展開成一個向量,長度是 28x28 = 784孙乖。如何展開這個數(shù)組(數(shù)字間的順序)不重要浙炼,只要保持各個圖片采用相同的方式展開。從這個角度來看唯袄,MNIST數(shù)據(jù)集的圖片就是在784維向量空間里面的點(diǎn), 并且擁有比較復(fù)雜的結(jié)構(gòu)(提醒: 此類數(shù)據(jù)的可視化是計算密集型的)弯屈。

展平圖片的數(shù)字?jǐn)?shù)組會丟失圖片的二維結(jié)構(gòu)信息。這顯然是不理想的恋拷,最優(yōu)秀的計算機(jī)視覺方法會挖掘并利用這些結(jié)構(gòu)信息资厉,我們會在后續(xù)教程中介紹。但是在這個教程中我們忽略這些結(jié)構(gòu)蔬顾,所介紹的簡單數(shù)學(xué)模型宴偿,softmax回歸(softmax regression),不會利用這些結(jié)構(gòu)信息诀豁。

因此窄刘,在MNIST訓(xùn)練數(shù)據(jù)集中,mnist.train.images是一個形狀為[60000, 784]的張量舷胜,第一個維度數(shù)字用來索引圖片娩践,第二個維度數(shù)字用來索引每張圖片中的像素點(diǎn)。在此張量里的每一個元素,都表示某張圖片里的某個像素的強(qiáng)度值翻伺,值介于0和1之間材泄。

相對應(yīng)的MNIST數(shù)據(jù)集的標(biāo)簽是介于0到9的數(shù)字,用來描述給定圖片里表示的數(shù)字穆趴。為了用于這個教程脸爱,我們使標(biāo)簽數(shù)據(jù)是"one-hot vectors"遇汞。 一個one-hot向量除了某一位的數(shù)字是1以外其余各維度數(shù)字都是0未妹。所以在此教程中,數(shù)字n將表示成一個只有在第n維度(從0開始)數(shù)字為1的10維向量空入。比如络它,標(biāo)簽0將表示成([1,0,0,0,0,0,0,0,0,0,0])。因此歪赢,mnist.train.labels是一個[60000, 10]的數(shù)字矩陣化戳。

現(xiàn)在,我們準(zhǔn)備好可以開始構(gòu)建我們的模型啦埋凯!

Softmax回歸介紹

我們知道MNIST的每一張圖片都表示一個數(shù)字点楼,從0到9。我們希望得到給定圖片代表每個數(shù)字的概率白对。比如說掠廓,我們的模型可能推測一張包含9的圖片代表數(shù)字9的概率是80%但是判斷它是8的概率是5%(因?yàn)?和9都有上半部分的小圓),然后給予它代表其他數(shù)字的概率更小的值掂墓。

這是一個使用softmax回歸(softmax regression)模型的經(jīng)典案例工秩。softmax模型可以用來給不同的對象分配概率暇唾。即使在之后,我們訓(xùn)練更加精細(xì)的模型時悦污,最后一步也需要用softmax來分配概率。

softmax回歸(softmax regression)分兩步:第一步

為了得到一張給定圖片屬于某個特定數(shù)字類的證據(jù)(evidence)钉蒲,我們對圖片像素值進(jìn)行加權(quán)求和切端。如果這個像素具有很強(qiáng)的證據(jù)說明這張圖片不屬于該類,那么相應(yīng)的權(quán)值為負(fù)數(shù)顷啼,相反如果這個像素?fù)碛杏欣淖C據(jù)支持這張圖片屬于這個類踏枣,那么權(quán)值是正數(shù)。

下面的圖片顯示了一個模型學(xué)習(xí)到的圖片上每個像素對于特定數(shù)字類的權(quán)值线梗。紅色代表負(fù)數(shù)權(quán)值椰于,藍(lán)色代表正數(shù)權(quán)值。

我們也需要加入一個額外的偏置量(bias)仪搔,因?yàn)檩斎胪鶗в幸恍o關(guān)的干擾量瘾婿。因此對于給定的輸入圖片x它代表的是數(shù)字i的證據(jù)可以表示為

其中

代表權(quán)重,

代表數(shù)字i類的偏置量,j代表給定圖片x的像素索引用于像素求和偏陪。然后用softmax函數(shù)可以把這些證據(jù)轉(zhuǎn)換成概率y

這里的softmax可以看成是一個激勵(activation)函數(shù)或者鏈接(link)函數(shù)抢呆,把我們定義的線性函數(shù)的輸出轉(zhuǎn)換成我們想要的格式,也就是關(guān)于10個數(shù)字類的概率分布笛谦。因此抱虐,給定一張圖片,它對于每一個數(shù)字的吻合度可以被softmax函數(shù)轉(zhuǎn)換成為一個概率值饥脑。softmax函數(shù)可以定義為:

展開等式右邊的子式恳邀,可以得到:

但是更多的時候把softmax模型函數(shù)定義為前一種形式:把輸入值當(dāng)成冪指數(shù)求值,再正則化這些結(jié)果值灶轰。這個冪運(yùn)算表示谣沸,更大的證據(jù)對應(yīng)更大的假設(shè)模型(hypothesis)里面的乘數(shù)權(quán)重值。反之笋颤,擁有更少的證據(jù)意味著在假設(shè)模型里面擁有更小的乘數(shù)系數(shù)乳附。假設(shè)模型里的權(quán)值不可以是0值或者負(fù)值。Softmax然后會正則化這些權(quán)重值伴澄,使它們的總和等于1赋除,以此構(gòu)造一個有效的概率分布。(更多的關(guān)于Softmax函數(shù)的信息非凌,可以參考Michael Nieslen的書里面的這個部分举农,其中有關(guān)于softmax的可交互式的可視化解釋。)

對于softmax回歸模型可以用下面的圖解釋清焕,對于輸入的xs加權(quán)求和并蝗,再分別加上一個偏置量,最后再輸入到softmax函數(shù)中:

如果把它寫成一個等式秸妥,我們可以得到:

我們也可以用向量表示這個計算過程:用矩陣乘法和向量相加滚停。這有助于提高計算效率。(也是一種更有效的思考方式)

更進(jìn)一步粥惧,可以寫成更加緊湊的方式:

實(shí)現(xiàn)回歸模型

為了用python實(shí)現(xiàn)高效的數(shù)值計算键畴,我們通常會使用函數(shù)庫,比如NumPy突雪,會把類似矩陣乘法這樣的復(fù)雜運(yùn)算使用其他外部語言實(shí)現(xiàn)起惕。不幸的是,從外部計算切換回Python的每一個操作咏删,仍然是一個很大的開銷惹想。如果你用GPU來進(jìn)行外部計算,這樣的開銷會更大督函。用分布式的計算方式嘀粱,也會花費(fèi)更多的資源用來傳輸數(shù)據(jù)激挪。

TensorFlow也把復(fù)雜的計算放在python之外完成,但是為了避免前面說的那些開銷锋叨,它做了進(jìn)一步完善垄分。Tensorflow不單獨(dú)地運(yùn)行單一的復(fù)雜計算,而是讓我們可以先用圖描述一系列可交互的計算操作娃磺,然后全部一起在Python之外運(yùn)行薄湿。(這樣類似的運(yùn)行方式,可以在不少的機(jī)器學(xué)習(xí)庫中看到偷卧。)

使用TensorFlow之前豺瘤,首先導(dǎo)入它:

import tensorflow as tf

我們通過操作符號變量來描述這些可交互的操作單元,可以用下面的方式創(chuàng)建一個:

x = tf.placeholder(tf.float32, [None, 784])

x不是一個特定的值涯冠,而是一個占位符placeholder炉奴,我們在TensorFlow運(yùn)行計算時輸入這個值逼庞。我們希望能夠輸入任意數(shù)量的MNIST圖像蛇更,每一張圖展平成784維的向量。我們用2維的浮點(diǎn)數(shù)張量來表示這些圖赛糟,這個張量的形狀是[None派任,784 ]。(這里的None表示此張量的第一個維度可以是任何長度的璧南。)

我們的模型也需要權(quán)重值和偏置量掌逛,當(dāng)然我們可以把它們當(dāng)做是另外的輸入(使用占位符),但TensorFlow有一個更好的方法來表示它們:Variable司倚。 一個Variable代表一個可修改的張量豆混,存在在TensorFlow的用于描述交互性操作的圖中。它們可以用于計算輸入值动知,也可以在計算中被修改皿伺。對于各種機(jī)器學(xué)習(xí)應(yīng)用,一般都會有模型參數(shù)盒粮,可以用Variable表示鸵鸥。

W = tf.Variable(tf.zeros([784,10]))

b = tf.Variable(tf.zeros([10]))

我們賦予tf.Variable不同的初值來創(chuàng)建不同的Variable:在這里,我們都用全為零的張量來初始化W和b丹皱。因?yàn)槲覀円獙W(xué)習(xí)W和b的值妒穴,它們的初值可以隨意設(shè)置。

注意摊崭,W的維度是[784讼油,10],因?yàn)槲覀兿胍?84維的圖片向量乘以它以得到一個10維的證據(jù)值向量呢簸,每一位對應(yīng)不同數(shù)字類矮台。b的形狀是[10]淆攻,所以我們可以直接把它加到輸出上面。

現(xiàn)在嘿架,我們可以實(shí)現(xiàn)我們的模型啦瓶珊。只需要一行代碼!

y = tf.nn.softmax(tf.matmul(x,W) + b)

首先耸彪,我們用tf.matmul(??X伞芹,W)表示x乘以W,對應(yīng)之前等式里面的

蝉娜,這里x是一個2維張量擁有多個輸入唱较。然后再加上b,把和輸入到tf.nn.softmax函數(shù)里面召川。

至此南缓,我們先用了幾行簡短的代碼來設(shè)置變量,然后只用了一行代碼來定義我們的模型荧呐。TensorFlow不僅僅可以使softmax回歸模型計算變得特別簡單汉形,它也用這種非常靈活的方式來描述其他各種數(shù)值計算,從機(jī)器學(xué)習(xí)模型對物理學(xué)模擬仿真模型倍阐。一旦被定義好之后概疆,我們的模型就可以在不同的設(shè)備上運(yùn)行:計算機(jī)的CPU,GPU峰搪,甚至是手機(jī)岔冀!

訓(xùn)練模型

為了訓(xùn)練我們的模型,我們首先需要定義一個指標(biāo)來評估這個模型是好的概耻。其實(shí)使套,在機(jī)器學(xué)習(xí),我們通常定義指標(biāo)來表示一個模型是壞的鞠柄,這個指標(biāo)稱為成本(cost)或損失(loss)侦高,然后盡量最小化這個指標(biāo)。但是春锋,這兩種方式是相同的矫膨。

一個非常常見的,非常漂亮的成本函數(shù)是“交叉熵”(cross-entropy)期奔。交叉熵產(chǎn)生于信息論里面的信息壓縮編碼技術(shù)侧馅,但是它后來演變成為從博弈論到機(jī)器學(xué)習(xí)等其他領(lǐng)域里的重要技術(shù)手段。它的定義如下:

y是我們預(yù)測的概率分布,y'是實(shí)際的分布(我們輸入的one-hot vector)呐萌。比較粗糙的理解是馁痴,交叉熵是用來衡量我們的預(yù)測用于描述真相的低效性。更詳細(xì)的關(guān)于交叉熵的解釋超出本教程的范疇肺孤,但是你很有必要好好理解它罗晕。

為了計算交叉熵济欢,我們首先需要添加一個新的占位符用于輸入正確值:

y_ = tf.placeholder("float", [None,10])

然后我們可以用

計算交叉熵:

cross_entropy = -tf.reduce_sum(y_*tf.log(y))

首先,用tf.log計算y的每個元素的對數(shù)小渊。接下來法褥,我們把y_的每一個元素和tf.log(y)的對應(yīng)元素相乘。最后酬屉,用tf.reduce_sum計算張量的所有元素的總和半等。(注意,這里的交叉熵不僅僅用來衡量單一的一對預(yù)測和真實(shí)值呐萨,而是所有100幅圖片的交叉熵的總和杀饵。對于100個數(shù)據(jù)點(diǎn)的預(yù)測表現(xiàn)比單一數(shù)據(jù)點(diǎn)的表現(xiàn)能更好地描述我們的模型的性能。

現(xiàn)在我們知道我們需要我們的模型做什么啦谬擦,用TensorFlow來訓(xùn)練它是非常容易的切距。因?yàn)門ensorFlow擁有一張描述你各個計算單元的圖,它可以自動地使用反向傳播算法(backpropagation algorithm)來有效地確定你的變量是如何影響你想要最小化的那個成本值的惨远。然后谜悟,TensorFlow會用你選擇的優(yōu)化算法來不斷地修改變量以降低成本。

train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)

在這里锨络,我們要求TensorFlow用梯度下降算法(gradient descent algorithm)以0.01的學(xué)習(xí)速率最小化交叉熵赌躺。梯度下降算法(gradient descent algorithm)是一個簡單的學(xué)習(xí)過程,TensorFlow只需將每個變量一點(diǎn)點(diǎn)地往使成本不斷降低的方向移動羡儿。當(dāng)然TensorFlow也提供了其他許多優(yōu)化算法:只要簡單地調(diào)整一行代碼就可以使用其他的算法。

TensorFlow在這里實(shí)際上所做的是是钥,它會在后臺給描述你的計算的那張圖里面增加一系列新的計算操作單元用于實(shí)現(xiàn)反向傳播算法和梯度下降算法掠归。然后,它返回給你的只是一個單一的操作悄泥,當(dāng)運(yùn)行這個操作時虏冻,它用梯度下降算法訓(xùn)練你的模型,微調(diào)你的變量弹囚,不斷減少成本厨相。

現(xiàn)在,我們已經(jīng)設(shè)置好了我們的模型鸥鹉。在運(yùn)行計算之前蛮穿,我們需要添加一個操作來初始化我們創(chuàng)建的變量:

init = tf.initialize_all_variables()

現(xiàn)在我們可以在一個Session里面啟動我們的模型,并且初始化變量:

sess = tf.Session()

sess.run(init)

然后開始訓(xùn)練模型毁渗,這里我們讓模型循環(huán)訓(xùn)練1000次践磅!

for i in range(1000):

batch_xs, batch_ys = mnist.train.next_batch(100)

sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})

該循環(huán)的每個步驟中,我們都會隨機(jī)抓取訓(xùn)練數(shù)據(jù)中的100個批處理數(shù)據(jù)點(diǎn)灸异,然后我們用這些數(shù)據(jù)點(diǎn)作為參數(shù)替換之前的占位符來運(yùn)行train_step府适。

使用一小部分的隨機(jī)數(shù)據(jù)來進(jìn)行訓(xùn)練被稱為隨機(jī)訓(xùn)練(stochastic training)- 在這里更確切的說是隨機(jī)梯度下降訓(xùn)練羔飞。在理想情況下,我們希望用我們所有的數(shù)據(jù)來進(jìn)行每一步的訓(xùn)練檐春,因?yàn)檫@能給我們更好的訓(xùn)練結(jié)果逻淌,但顯然這需要很大的計算開銷。所以疟暖,每一次訓(xùn)練我們可以使用不同的數(shù)據(jù)子集恍风,這樣做既可以減少計算開銷,又可以最大化地學(xué)習(xí)到數(shù)據(jù)集的總體特性誓篱。

評估我們的模型

那么我們的模型性能如何呢朋贬?

首先讓我們找出那些預(yù)測正確的標(biāo)簽。tf.argmax是一個非常有用的函數(shù)窜骄,它能給出某個tensor對象在某一維上的其數(shù)據(jù)最大值所在的索引值锦募。由于標(biāo)簽向量是由0,1組成,因此最大值1所在的索引位置就是類別標(biāo)簽邻遏,比如tf.argmax(y,1)返回的是模型對于任一輸入x預(yù)測到的標(biāo)簽值糠亩,而tf.argmax(y_,1)代表正確的標(biāo)簽,我們可以用tf.equal來檢測我們的預(yù)測是否真實(shí)標(biāo)簽匹配(索引位置一樣表示匹配)准验。

correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))

這行代碼會給我們一組布爾值赎线。為了確定正確預(yù)測項(xiàng)的比例,我們可以把布爾值轉(zhuǎn)換成浮點(diǎn)數(shù)糊饱,然后取平均值垂寥。例如,[True, False, True, True]會變成[1,0,1,1]另锋,取平均值后得到0.75.

accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))

最后滞项,我們計算所學(xué)習(xí)到的模型在測試數(shù)據(jù)集上面的正確率。

print sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels})

這個最終結(jié)果值應(yīng)該大約是91%夭坪。

這個結(jié)果好嗎文判?嗯,并不太好室梅。事實(shí)上戏仓,這個結(jié)果是很差的。這是因?yàn)槲覀儍H僅使用了一個非常簡單的模型亡鼠。不過赏殃,做一些小小的改進(jìn),我們就可以得到97%的正確率拆宛。最好的模型甚至可以獲得超過99.7%的準(zhǔn)確率Iど荨(想了解更多信息,可以看看這個關(guān)于各種模型的性能對比列表浑厚。)

比結(jié)果更重要的是股耽,我們從這個模型中學(xué)習(xí)到的設(shè)計思想根盒。不過,如果你仍然對這里的結(jié)果有點(diǎn)失望物蝙,可以查看下一個教程炎滞,在那里你可以學(xué)習(xí)如何用TensorFlow構(gòu)建更加復(fù)雜的模型以獲得更好的性能!


原文鏈接:http://wiki.jikexueyuan.com/project/tensorflow-zh/tutorials/mnist_beginners.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末诬乞,一起剝皮案震驚了整個濱河市册赛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌震嫉,老刑警劉巖森瘪,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異票堵,居然都是意外死亡扼睬,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進(jìn)店門悴势,熙熙樓的掌柜王于貴愁眉苦臉地迎上來窗宇,“玉大人,你說我怎么就攤上這事特纤【。” “怎么了?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵捧存,是天一觀的道長粪躬。 經(jīng)常有香客問我,道長矗蕊,這世上最難降的妖魔是什么短蜕? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮傻咖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘岖研。我一直安慰自己卿操,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布孙援。 她就那樣靜靜地躺著害淤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拓售。 梳的紋絲不亂的頭發(fā)上窥摄,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天,我揣著相機(jī)與錄音础淤,去河邊找鬼崭放。 笑死哨苛,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的币砂。 我是一名探鬼主播建峭,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼决摧!你這毒婦竟也來了亿蒸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤掌桩,失蹤者是張志新(化名)和其女友劉穎边锁,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體波岛,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡茅坛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了盆色。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片灰蛙。...
    茶點(diǎn)故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖隔躲,靈堂內(nèi)的尸體忽然破棺而出摩梧,到底是詐尸還是另有隱情,我是刑警寧澤宣旱,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布仅父,位于F島的核電站,受9級特大地震影響浑吟,放射性物質(zhì)發(fā)生泄漏笙纤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一组力、第九天 我趴在偏房一處隱蔽的房頂上張望省容。 院中可真熱鬧,春花似錦燎字、人聲如沸腥椒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽笼蛛。三九已至,卻和暖如春蛉鹿,著一層夾襖步出監(jiān)牢的瞬間滨砍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留惋戏,地道東北人领追。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像日川,于是被迫代替她去往敵國和親蔓腐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評論 2 354

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

  • tensorflow中文社區(qū)對官方文檔進(jìn)行了完整翻譯龄句。鑒于官方更新不少內(nèi)容回论,而現(xiàn)有的翻譯基本上都已過時。故本人對更...
    周乘閱讀 2,699評論 0 14
  • 一.目的 類似學(xué)習(xí)開發(fā)語言的第一個代碼分歇,Hello World傀蓉! 機(jī)器學(xué)習(xí)中,我們通過MNIST來學(xué)習(xí)手寫輸入法的...
    Coming0524閱讀 6,489評論 2 8
  • MNIST For ML Beginners 這個教程是給機(jī)器學(xué)習(xí)和TensorFlow的新手準(zhǔn)備的职抡,如果你已經(jīng)知...
    迅速傅里葉變換閱讀 1,997評論 0 3
  • 總論部分講的主要是企業(yè)進(jìn)化的三部曲葬燎,哪三部曲呢?一缚甩,用全能創(chuàng)新思維確定自身進(jìn)化方向谱净;二,在自身短板上提升創(chuàng)新...
    迷死她張閱讀 449評論 0 3
  • 我有時會健忘擅威, 不管是重要的還是不重要的壕探。 不管我是有意的還是無意的, 那時你在郊丛, 或許你應(yīng)該提醒我李请。
    九呀閱讀 177評論 0 2