亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

TensorFlow實(shí)現(xiàn)MLP多層感知機(jī)模型

 更新時(shí)間:2021年10月11日 16:47:56   作者:marsjhao  
這篇文章主要為大家詳細(xì)介紹了TensorFlow實(shí)現(xiàn)MLP多層感知機(jī)模型,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

一、多層感知機(jī)簡(jiǎn)介

Softmax回歸可以算是多分類(lèi)問(wèn)題logistic回歸,它和神經(jīng)網(wǎng)絡(luò)的最大區(qū)別是沒(méi)有隱含層。理論上只要隱含節(jié)點(diǎn)足夠多,即時(shí)只有一個(gè)隱含層的神經(jīng)網(wǎng)絡(luò)也可以擬合任意函數(shù),同時(shí)隱含層越多,越容易擬合復(fù)雜結(jié)構(gòu)。為了擬合復(fù)雜函數(shù)需要的隱含節(jié)點(diǎn)的數(shù)目,基本上隨著隱含層的數(shù)量增多呈指數(shù)下降的趨勢(shì),也就是說(shuō)層數(shù)越多,神經(jīng)網(wǎng)絡(luò)所需要的隱含節(jié)點(diǎn)可以越少。層數(shù)越深,概念越抽象,需要背誦的知識(shí)點(diǎn)就越少。在實(shí)際應(yīng)用中,深層神經(jīng)網(wǎng)絡(luò)會(huì)遇到許多困難,如過(guò)擬合、參數(shù)調(diào)試、梯度彌散等。

過(guò)擬合是機(jī)器學(xué)習(xí)中的一個(gè)常見(jiàn)問(wèn)題,是指模型預(yù)測(cè)準(zhǔn)確率在訓(xùn)練集上升高,但是在測(cè)試集上的準(zhǔn)確率反而下降,這通常意味著模型的泛化能力不好,過(guò)度擬合了訓(xùn)練集。針對(duì)這個(gè)問(wèn)題,Hinton教授團(tuán)隊(duì)提出了Dropout的解決辦法,在使用CNN訓(xùn)練圖像數(shù)據(jù)時(shí)效果尤其有效,其大體思路是在訓(xùn)練時(shí)將神經(jīng)網(wǎng)絡(luò)某一層的輸出節(jié)點(diǎn)數(shù)據(jù)隨機(jī)丟失一部分。這種做法實(shí)質(zhì)上等于創(chuàng)造出了許多新的隨機(jī)樣本,通過(guò)增大樣本量、減少特征數(shù)量來(lái)防止過(guò)擬合。

參數(shù)調(diào)試問(wèn)題尤其是SGD(StochasticGradient Descent)的參數(shù),對(duì)SGD設(shè)置不同的學(xué)習(xí)率learning rate,最后得到的結(jié)果可能差異巨大。神經(jīng)網(wǎng)絡(luò)的優(yōu)化通常不是一個(gè)簡(jiǎn)單的凸優(yōu)化問(wèn)題,它處處充滿(mǎn)了局部最優(yōu)。有理論表示,神經(jīng)網(wǎng)絡(luò)可能有很多個(gè)局部最優(yōu)解都可以達(dá)到比較好的分類(lèi)效果,而全局最優(yōu)很可能造成過(guò)擬合。對(duì)SGD,我們希望一開(kāi)始學(xué)習(xí)率大一些,加速收斂,在訓(xùn)練的后期又希望學(xué)習(xí)率小一些,這樣可以低速進(jìn)入一個(gè)局部最優(yōu)解。不同的機(jī)器學(xué)習(xí)問(wèn)題的學(xué)習(xí)率設(shè)置也需要針對(duì)性的調(diào)試,像Adagrad、Adam、Adadelta等自適應(yīng)的方法可以減輕調(diào)試參數(shù)的負(fù)擔(dān)。對(duì)于這些優(yōu)化算法,通常我們使用其默認(rèn)的參數(shù)設(shè)置就可以得到比較好的效果。

梯度彌散(Gradient Vanishment)是另一個(gè)影響深層神經(jīng)網(wǎng)絡(luò)訓(xùn)練的問(wèn)題,在ReLU激活函數(shù)出現(xiàn)之前,神經(jīng)網(wǎng)絡(luò)訓(xùn)練是使用Sigmoid作為激活函數(shù)。非線(xiàn)性的Sigmoid函數(shù)在信號(hào)的特征空間映射上,對(duì)中央?yún)^(qū)的信號(hào)增益較大,對(duì)兩側(cè)區(qū)的信號(hào)增益小。當(dāng)神經(jīng)網(wǎng)絡(luò)層數(shù)較多時(shí),Sigmoid函數(shù)在反向傳播中梯度值會(huì)逐漸減小,到達(dá)前面幾層的梯度值就變得非常小了,在神經(jīng)網(wǎng)絡(luò)訓(xùn)練的時(shí)候,前面幾層的神經(jīng)網(wǎng)絡(luò)參數(shù)幾乎得不到訓(xùn)練更新。指導(dǎo)ReLU,y = max(0, x),的出現(xiàn)才比較完美的解決了梯度彌散的問(wèn)題。信號(hào)在超過(guò)某個(gè)閾值時(shí),神經(jīng)元才會(huì)進(jìn)入興奮和激活的狀態(tài),否則會(huì)處于抑制狀態(tài)。ReLU可以很好的反向傳遞梯度,經(jīng)過(guò)多層的梯度反向傳播,梯度依舊不會(huì)大幅減小,因此非常適合深層神經(jīng)網(wǎng)絡(luò)的訓(xùn)練。ReLU對(duì)比于Sigmoid的主要特點(diǎn)有以下幾點(diǎn):(1)單側(cè)抑制;(2)相對(duì)寬闊的興奮邊界;(3)稀疏激活性。目前,ReLU及其變種EIU、PReLU、RReLU已經(jīng)成為最主流的激活函數(shù)。實(shí)踐中大部分情況下(包括MLP、CNN、RNN)將隱含層的激活函數(shù)從Sigmoid替換為ReLU都可以帶來(lái)訓(xùn)練速度和模型準(zhǔn)確率的提升。當(dāng)然神經(jīng)網(wǎng)絡(luò)的輸出層一般都是Sigmoid函數(shù),因?yàn)樗罱咏怕瘦敵龇植肌?/p>

二、TensorFlow實(shí)現(xiàn)過(guò)程

完整代碼:

import tensorflow as tf 
from tensorflow.examples.tutorials.mnist import input_data 
 
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True) 
in_units = 784 #輸入節(jié)點(diǎn)數(shù) 
h1_units = 300 #隱含層節(jié)點(diǎn)數(shù) 
W1 = tf.Variable(tf.truncated_normal([in_units, h1_units], stddev=0.1)) #初始化隱含層權(quán)重W1,服從默認(rèn)均值為0,標(biāo)準(zhǔn)差為0.1的截?cái)嗾龖B(tài)分布 
b1 = tf.Variable(tf.zeros([h1_units])) #隱含層偏置b1全部初始化為0 
W2 = tf.Variable(tf.zeros([h1_units, 10]))  
b2 = tf.Variable(tf.zeros([10])) 
x = tf.placeholder(tf.float32, [None, in_units]) 
keep_prob = tf.placeholder(tf.float32) #Dropout失活率 
 
#定義模型結(jié)構(gòu) 
hidden1 = tf.nn.relu(tf.matmul(x, W1) + b1) 
hidden1_drop = tf.nn.dropout(hidden1, keep_prob) 
y = tf.nn.softmax(tf.matmul(hidden1_drop, W2) + b2) 
 
#訓(xùn)練部分 
y_ = tf.placeholder(tf.float32, [None, 10]) 
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1])) 
train_step = tf.train.AdagradOptimizer(0.3).minimize(cross_entropy) 
 
#定義一個(gè)InteractiveSession會(huì)話(huà)并初始化全部變量 
sess = tf.InteractiveSession() 
tf.global_variables_initializer().run() 
correct_prediction = tf.equal(tf.arg_max(y, 1), tf.arg_max(y_, 1)) 
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) 
for i in range(3001): 
  batch_xs, batch_ys = mnist.train.next_batch(100) 
  train_step.run({x: batch_xs, y_: batch_ys, keep_prob: 0.75}) 
  if i % 200 ==0: 
    #訓(xùn)練過(guò)程每200步在測(cè)試集上驗(yàn)證一下準(zhǔn)確率,動(dòng)態(tài)顯示訓(xùn)練過(guò)程 
    print(i, 'training_arruracy:', accuracy.eval({x: mnist.test.images, y_: mnist.test.labels,  
               keep_prob: 1.0})) 
print('final_accuracy:', accuracy.eval({x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0})) 

在TensorFlow上實(shí)現(xiàn)的Softmax回歸模型對(duì)MNIST數(shù)據(jù)集取得了92%的正確率,現(xiàn)在我們給神經(jīng)網(wǎng)絡(luò)加上一層隱含層,并使用減輕過(guò)擬合的Dropout、自適應(yīng)學(xué)習(xí)率的Adagrad以及解決梯度彌散問(wèn)題激活函數(shù)ReLU。

首先,載入TensorFlow的并加載MNIST、數(shù)據(jù)集。指定輸入節(jié)點(diǎn)數(shù)in_units和隱含層節(jié)點(diǎn)數(shù)h1_units。初始化隱含層的全中W1和偏置b1,因?yàn)槟P褪褂玫募せ詈瘮?shù)是ReLU,需要使用正態(tài)分布對(duì)W1進(jìn)行初始化,給權(quán)重參數(shù)增加一些噪聲來(lái)打破完全對(duì)稱(chēng)并避免0梯度。在其它一些模型中,有時(shí)還需要給偏置初始化一些非零初始值來(lái)避免dead neuron(死亡神經(jīng)元)。對(duì)于輸出層Softmax,直接將全中W2和偏置b2全部初始化為0即可。接下來(lái)為輸入x設(shè)置placeholder,并為不同的Dropout設(shè)置一個(gè)輸入placeholder,通常在訓(xùn)練時(shí)小于1,預(yù)測(cè)時(shí)等于1。

下面定義模型結(jié)構(gòu),首先定義一個(gè)隱含層hidden1,通過(guò)tf.nn.relu(tf.matmul(x,W1) + b1)實(shí)現(xiàn)一個(gè)激活函數(shù)為ReLU的隱含層,這個(gè)隱含層的計(jì)算公式就是y = relu(W1x + b1)。接下來(lái)調(diào)用tf.nn.dropout實(shí)現(xiàn)Dropout功能,隨機(jī)將一部分神經(jīng)元節(jié)點(diǎn)置為0,這里的keep_prob參數(shù)是保留的數(shù)據(jù)比例而不是置為0的比例。在訓(xùn)練的時(shí)候應(yīng)該是小于1用以制造隨機(jī)性,防止過(guò)擬合;在預(yù)測(cè)的時(shí)候應(yīng)該等于1,即全部特征用來(lái)預(yù)測(cè)樣本的類(lèi)別。

在優(yōu)化器選擇上,我們選擇Adagrad并把學(xué)習(xí)率設(shè)置為0.3,這里我們直接使用tf.train.AdagradOptimizer(0.3)就可以了。

接下來(lái)的訓(xùn)練部分和預(yù)測(cè)部分以及定義繪畫(huà)等請(qǐng)參見(jiàn)另一篇博文MNIST在TensorFLow上的Softmax回歸模型實(shí)現(xiàn),有詳細(xì)介紹。

最終,但隱含層MLP模型在測(cè)試集上可以達(dá)到98%的準(zhǔn)確率,相比之前Softmax回歸模型的92%的準(zhǔn)確率有了飛躍性的提高。

三、其他補(bǔ)充說(shuō)明

1. tf.truncated_normal

tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32,seed=None, name=None)

函數(shù)功能:返回指定形狀的服從指定均值和標(biāo)準(zhǔn)差的截?cái)嗾龖B(tài)分布的tensor。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python使用draw類(lèi)繪制圖形示例講解

    Python使用draw類(lèi)繪制圖形示例講解

    這篇文章主要介紹了Python使用draw類(lèi)繪制圖形的哪些函數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 詳解Python命令行解析工具Argparse

    詳解Python命令行解析工具Argparse

    這篇文章主要為大家詳細(xì)介紹了Python命令行解析工具Argparse的相關(guān)資料,感興趣的小伙伴們可以參考一下
    2016-04-04
  • Python的mysql數(shù)據(jù)庫(kù)的更新如何實(shí)現(xiàn)

    Python的mysql數(shù)據(jù)庫(kù)的更新如何實(shí)現(xiàn)

    這篇文章主要介紹了Python的mysql數(shù)據(jù)庫(kù)的更新如何實(shí)現(xiàn)的相關(guān)資料,這里提供實(shí)例代碼,幫助大家理解應(yīng)用這部分知識(shí),需要的朋友可以參考下
    2017-07-07
  • 使用Python實(shí)現(xiàn)提取快遞信息

    使用Python實(shí)現(xiàn)提取快遞信息

    這篇文章主要為大家詳細(xì)介紹了如何使用Python調(diào)用快遞查詢(xún)API接口,并提取出我們需要的快遞信息,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04
  • Python監(jiān)測(cè)屏幕界面內(nèi)容變化并發(fā)送通知方法詳解

    Python監(jiān)測(cè)屏幕界面內(nèi)容變化并發(fā)送通知方法詳解

    這篇文章主要為大家介紹了Python監(jiān)測(cè)屏幕界面內(nèi)容變化并發(fā)送通知,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • 詳解python函數(shù)的閉包問(wèn)題(內(nèi)部函數(shù)與外部函數(shù)詳述)

    詳解python函數(shù)的閉包問(wèn)題(內(nèi)部函數(shù)與外部函數(shù)詳述)

    這篇文章主要介紹了python函數(shù)的閉包問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Python用imghdr模塊識(shí)別圖片格式實(shí)例解析

    Python用imghdr模塊識(shí)別圖片格式實(shí)例解析

    這篇文章主要介紹了Python用imghdr模塊識(shí)別圖片格式實(shí)例解析,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • 詳解Python中for循環(huán)是如何工作的

    詳解Python中for循環(huán)是如何工作的

    如果你對(duì)python中的for循環(huán)不是很清楚,那么建議你看看這篇文章,本文主要給大家介紹了關(guān)于Python中for循環(huán)是如何工作的相關(guān)資料,介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-06-06
  • Pycharm直接使用遠(yuǎn)程服務(wù)器代碼并調(diào)試的解決方法

    Pycharm直接使用遠(yuǎn)程服務(wù)器代碼并調(diào)試的解決方法

    這篇文章主要介紹了Pycharm直接使用遠(yuǎn)程服務(wù)器代碼并調(diào)試的解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02
  • python opencv實(shí)現(xiàn)簡(jiǎn)易畫(huà)圖板

    python opencv實(shí)現(xiàn)簡(jiǎn)易畫(huà)圖板

    這篇文章主要為大家詳細(xì)介紹了python opencv實(shí)現(xiàn)簡(jiǎn)易畫(huà)圖板,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08

最新評(píng)論