TensorFlow实现多层感知机MINIST分类
TensorFlow實(shí)現(xiàn)多層感知機(jī)MINIST分類
TensorFlow 支持自動(dòng)求導(dǎo),可以使用 TensorFlow 優(yōu)化器來計(jì)算和使用梯度。使用梯度自動(dòng)更新用變量定義的張量。本文將使用 TensorFlow 優(yōu)化器來訓(xùn)練網(wǎng)絡(luò)。
前面定義了層、權(quán)重、損失、梯度以及通過梯度更新權(quán)重。用公式實(shí)現(xiàn)可以幫助我們更好地理解,但隨著網(wǎng)絡(luò)層數(shù)的增加,這可能非常麻煩。
使用 TensorFlow 的一些強(qiáng)大功能,如 Contrib(層)來定義神經(jīng)網(wǎng)絡(luò)層及使用 TensorFlow 自帶的優(yōu)化器來計(jì)算和使用梯度。
通過前面的學(xué)習(xí),已經(jīng)知道如何使用 TensorFlow 的優(yōu)化器。Contrib 可以用來添加各種層到神經(jīng)網(wǎng)絡(luò)模型,如添加構(gòu)建塊。這里使用的一個(gè)方法是 tf.contrib.layers.fully_connected,在 TensorFlow 文檔中定義如下:
這樣就添加了一個(gè)全連接層。
提示:上面那段代碼創(chuàng)建了一個(gè)稱為權(quán)重的變量,表示全連接的權(quán)重矩陣,該矩陣與輸入相乘產(chǎn)生隱藏層單元的張量。如果提供了 normalizer_fn(比如batch_norm),那么就會(huì)歸一化。否則,如果 normalizer_fn 是 None,并且設(shè)置了 biases_initializer,則會(huì)創(chuàng)建一個(gè)偏置變量并將其添加到隱藏層單元中。最后,如果 activation_fn 不是 None,它也會(huì)被應(yīng)用到隱藏層單元。
具體做法
第一步是改變損失函數(shù),盡管對(duì)于分類任務(wù),最好使用交叉熵?fù)p失函數(shù)。這里繼續(xù)使用均方誤差(MSE):
接下來,使用 GradientDescentOptimizer:
對(duì)于同一組超參數(shù),只有這兩處改變,在測(cè)試數(shù)據(jù)集上的準(zhǔn)確率只有 61.3%。增加 max_epoch,可以提高準(zhǔn)確性,但不能有效地發(fā)揮 TensorFlow 的能力。
這是一個(gè)分類問題,所以最好使用交叉熵?fù)p失,隱藏層使用 ReLU 激活函數(shù),輸出層使用 softmax 函數(shù)。做些必要的修改,完整代碼如下所示:
解讀分析
修改后的 MNIST MLP 分類器在測(cè)試數(shù)據(jù)集上只用了一個(gè)隱藏層,并且在 10 個(gè) epoch 內(nèi),只需要幾行代碼,就可以得到 96% 的精度:
由此可見 TensorFlow 的強(qiáng)大之處。
總結(jié)
以上是生活随笔為你收集整理的TensorFlow实现多层感知机MINIST分类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TensorFlow反向传播算法实现
- 下一篇: TensorFlow实现多层感知机函数逼