最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2018年03月09日 11:33:03   作者:marsjhao  
這篇文章主要介紹了TensorFlow實(shí)現(xiàn)Softmax回歸模型,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

一、概述及完整代碼

對MNIST(MixedNational Institute of Standard and Technology database)這個(gè)非常簡單的機(jī)器視覺數(shù)據(jù)集,Tensorflow為我們進(jìn)行了方便的封裝,可以直接加載MNIST數(shù)據(jù)成我們期望的格式.本程序使用Softmax Regression訓(xùn)練手寫數(shù)字識別的分類模型.

先看完整代碼:

import tensorflow as tf 
from tensorflow.examples.tutorials.mnist import input_data 
 
mnist = input_data.read_data_sets("MNIST_data", one_hot=True) 
print(mnist.train.images.shape, mnist.train.labels.shape) 
print(mnist.test.images.shape, mnist.test.labels.shape) 
print(mnist.validation.images.shape, mnist.validation.labels.shape) 
 
#構(gòu)建計(jì)算圖 
x = tf.placeholder(tf.float32, [None, 784]) 
W = tf.Variable(tf.zeros([784, 10])) 
b = tf.Variable(tf.zeros([10])) 
y = tf.nn.softmax(tf.matmul(x, W) + b) 
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.GradientDescentOptimizer(0.5).minimize(cross_entropy) 
 
#在會(huì)話sess中啟動(dòng)圖 
sess = tf.InteractiveSession() #創(chuàng)建InteractiveSession對象 
tf.global_variables_initializer().run() #全局參數(shù)初始化器 
for i in range(1000): 
 batch_xs, batch_ys = mnist.train.next_batch(100) 
 train_step.run({x: batch_xs, y_: batch_ys}) 
 
#測試驗(yàn)證階段 
#沿著第1條軸方向取y和y_的最大值的索引并判斷是否相等 
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1)) 
#轉(zhuǎn)換bool型tensor為float32型tensor并求平均即得到正確率 
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) 
print(accuracy.eval({x: mnist.test.images, y_: mnist.test.labels})) 

二、詳細(xì)解讀

首先看一下使用TensorFlow進(jìn)行算法設(shè)計(jì)訓(xùn)練的核心步驟

1.定義算法公式,也就是神經(jīng)網(wǎng)絡(luò)forward時(shí)的計(jì)算;

2.定義loss,選定優(yōu)化器,并制定優(yōu)化器優(yōu)化loss;

3.在訓(xùn)練集上迭代訓(xùn)練算法模型;

4.在測試集或驗(yàn)證集上對訓(xùn)練得到的模型進(jìn)行準(zhǔn)確率評測.

首先創(chuàng)建一個(gè)Placeholder,即輸入張量數(shù)據(jù)的地方,第一個(gè)參數(shù)是數(shù)據(jù)類型dtype,第二個(gè)參數(shù)是tensor的形狀shape.接下來創(chuàng)建SoftmaxRegression模型中的weights(W)和biases(b)的Variable對象,不同于存儲(chǔ)數(shù)據(jù)的tensor一旦使用掉就會(huì)消失,Variable在模型訓(xùn)練迭代中是持久存在的,并且在每輪迭代中被更新Variable初始化可以是常量或隨機(jī)值.接下來實(shí)現(xiàn)模型算法y = softmax(Wx + b),TensorFlow語言只需要一行代碼,tf.nn包含了大量神經(jīng)網(wǎng)絡(luò)的組件,頭tf.matmul是矩陣乘法函數(shù).TensorFlow將模型中的forward和backward的內(nèi)容都自動(dòng)實(shí)現(xiàn),只要定義好loss,訓(xùn)練的時(shí)候會(huì)自動(dòng)求導(dǎo)并進(jìn)行梯度下降,完成對模型參數(shù)的自動(dòng)學(xué)習(xí).定義損失函數(shù)lossfunction來描述分類精度,對于多分類問題通常使用cross-entropy交叉熵.先定義一個(gè)placeholder輸入真實(shí)的label,tf.reduce_sum和tf.reduce_mean的功能分別是求和和求平均.構(gòu)造完損失函數(shù)cross-entropy后,再定義一個(gè)優(yōu)化算法即可開始訓(xùn)練.我們采用隨機(jī)梯度下降SGD,定義好后TensorFlow會(huì)自動(dòng)添加許多運(yùn)算操作來實(shí)現(xiàn)反向傳播和梯度下降,而給我們提供的是一個(gè)封裝好的優(yōu)化器,只需要每輪迭代時(shí)feed數(shù)據(jù)給它就好.設(shè)置好學(xué)習(xí)率.

構(gòu)造階段完成后, 才能啟動(dòng)圖. 啟動(dòng)圖的第一步是創(chuàng)建一個(gè) Session 對象或InteractiveSession對象, 如果無任何創(chuàng)建參數(shù), 會(huì)話構(gòu)造器將啟動(dòng)默認(rèn)圖.創(chuàng)建InteractiveSession對象會(huì)這個(gè)Session注冊為默認(rèn)的Session,之后的運(yùn)算也默認(rèn)跑在這個(gè)Session里面,不同Session之間的數(shù)據(jù)和運(yùn)算應(yīng)該是相互獨(dú)立的.下一步使用TensorFlow的全局參數(shù)初始化器tf.global_variables_initializer病直接執(zhí)行它的run方法(這個(gè)全局參數(shù)初始化器應(yīng)該是1.0.0版本中的新特性,在之前0.10.0版本測試不通過).

至此,以上定義的所有公式其實(shí)只是Computation Graph,代碼執(zhí)行到這時(shí),計(jì)算還沒有實(shí)際發(fā)生,只有等調(diào)用run方法并feed數(shù)據(jù)時(shí)計(jì)算才真正執(zhí)行.

隨后一步,就可以開始迭代地執(zhí)行訓(xùn)練操作train_step.這里每次都從訓(xùn)練集中隨機(jī)抽取100條樣本構(gòu)成一個(gè)mini-batch,并feed給placeholder.

完成迭代訓(xùn)練后,就可以對模型的準(zhǔn)確率進(jìn)行驗(yàn)證.比較y和y_在各個(gè)測試樣本中最大值所在的索引,然后轉(zhuǎn)換為float32型tensor后求平均即可得到正確率.多次測試后得到在測試集上的正確率為92%左右.還是比較理想的結(jié)果.

三、其他補(bǔ)充

1.Sesssion類和InteractiveSession

對于product =tf.matmul(matrix1, matrix2),調(diào)用 sess 的 'run()' 方法來執(zhí)行矩陣乘法 op, 傳入 'product' 作為該方法的參數(shù).上面提到, 'product' 代表了矩陣乘法 op 的輸出, 傳入它是向方法表明, 我們希望取回矩陣乘法 op 的輸出.整個(gè)執(zhí)行過程是自動(dòng)化的, 會(huì)話負(fù)責(zé)傳遞op 所需的全部輸入. op 通常是并發(fā)執(zhí)行的.函數(shù)調(diào)用 'run(product)' 觸發(fā)了圖中三個(gè) op (兩個(gè)常量 op 和一個(gè)矩陣乘法 op)的執(zhí)行.返回值 'result' 是一個(gè) numpy的`ndarray`對象.

Session 對象在使用完后需要關(guān)閉以釋放資源sess.close(). 除了顯式調(diào)用 close 外, 也可以使用"with" 代碼塊 來自動(dòng)完成關(guān)閉動(dòng)作.

with tf.Session() as sess: 
 result = sess.run([product]) 
 print result 

為了便于使用諸如 IPython 之類的 Python 交互環(huán)境, 可以使用InteractiveSession代替 Session 類, 使用 Tensor.eval()和 Operation.run()方法代替 Session.run(). 這樣可以避免使用一個(gè)變量來持有會(huì)話.

# 進(jìn)入一個(gè)交互式 TensorFlow 會(huì)話. 
import tensorflow as tf 
sess = tf.InteractiveSession() 
x = tf.Variable([1.0, 2.0]) 
a = tf.constant([3.0, 3.0]) 
# 使用初始化器 initializer op 的 run() 方法初始化 'x' 
x.initializer.run() 
# 增加一個(gè)減法 sub op, 從 'x' 減去 'a'. 運(yùn)行減法 op, 輸出結(jié)果 
sub = tf.sub(x, a) 
print sub.eval() 
# ==> [-2. -1.] 

2.tf.reduce_sum

首先,tf.reduce_X一系列運(yùn)算操作(operation)是實(shí)現(xiàn)對一個(gè)tensor各種減少維度的數(shù)學(xué)計(jì)算.

tf.reduce_sum(input_tensor, reduction_indices=None,keep_dims=False, name=None)

運(yùn)算功能:沿著給定維度reduction_indices的方向降低input_tensor的維度,除非keep_dims=True,tensor的秩在reduction_indices上減1,被降低的維度的長度為1.如果reduction_indices沒有傳入?yún)?shù),所有維度都降低,返回只含有1個(gè)元素的tensor.運(yùn)算最終返回降維后的tensor.

演示代碼:

# 'x' is [[1, 1, 1] 
#   [1, 1, 1]] 
tf.reduce_sum(x) ==> 6 
tf.reduce_sum(x, 0) ==> [2, 2, 2] 
tf.reduce_sum(x, 1) ==> [3, 3] 
tf.reduce_sum(x, 1, keep_dims=True) ==> [[3], [3]] 
tf.reduce_sum(x, [0, 1]) ==> 6 

3.tf.reduce_mean

tf.reduce_mean(input_tensor, reduction_indices=None,keep_dims=False, name=None)

運(yùn)算功能:將input_tensor沿著給定維度reduction_indices減少維度,除非keep_dims=True,tensor的秩在reduction_indices上減1,被降低的維度的長度為1.如果reduction_indices沒有傳入?yún)?shù),所有維度都降低,返回只含有1個(gè)元素的tensor.運(yùn)算最終返回降維后的tensor.

演示代碼:

# 'x' is [[1., 1. ] 
#   [2., 2.]] 
tf.reduce_mean(x) ==> 1.5 
tf.reduce_mean(x, 0) ==> [1.5, 1.5] 
tf.reduce_mean(x, 1) ==> [1., 2.] 

4.tf.argmax

tf.argmax(input, dimension, name=None)

運(yùn)算功能:返回input在指定維度下的最大值的索引.返回類型為int64.

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

相關(guān)文章

  • Linux下使用python腳本執(zhí)行BCP導(dǎo)入導(dǎo)出方式

    Linux下使用python腳本執(zhí)行BCP導(dǎo)入導(dǎo)出方式

    這篇文章主要介紹了Linux下使用python腳本執(zhí)行BCP導(dǎo)入導(dǎo)出方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Python中使用支持向量機(jī)SVM實(shí)踐

    Python中使用支持向量機(jī)SVM實(shí)踐

    這篇文章主要為大家詳細(xì)介紹了Python中使用支持向量機(jī)SVM實(shí)踐,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • 基于Tensorflow搭建一個(gè)神經(jīng)網(wǎng)絡(luò)的實(shí)現(xiàn)

    基于Tensorflow搭建一個(gè)神經(jīng)網(wǎng)絡(luò)的實(shí)現(xiàn)

    神經(jīng)網(wǎng)絡(luò)可能會(huì)讓人感到恐懼,特別是對于新手機(jī)器學(xué)習(xí)的人來說。這篇文章主要介紹了基于Tensorflow搭建一個(gè)神經(jīng)網(wǎng)絡(luò)的實(shí)現(xiàn),從入門開始,感興趣的可以了解一下
    2021-05-05
  • Python爬蟲實(shí)戰(zhàn)項(xiàng)目掌握酷狗音樂的加密過程

    Python爬蟲實(shí)戰(zhàn)項(xiàng)目掌握酷狗音樂的加密過程

    在常見的幾個(gè)音樂網(wǎng)站里,酷狗可以說是最好爬取的啦,什么彎都沒有,所以最適合小白入門爬蟲,本篇針對爬蟲零基礎(chǔ)的小白,所以每一步驟我都截圖并詳細(xì)解釋了,其實(shí)我自己看著都啰嗦,歸根到底就是兩個(gè)步驟的請求,還請大佬繞路勿噴
    2021-09-09
  • python單向鏈表的基本實(shí)現(xiàn)與使用方法【定義、遍歷、添加、刪除、查找等】

    python單向鏈表的基本實(shí)現(xiàn)與使用方法【定義、遍歷、添加、刪除、查找等】

    這篇文章主要介紹了python單向鏈表的基本實(shí)現(xiàn)與使用方法,結(jié)合實(shí)例形式分析了Python單向鏈表的定義、遍歷、添加、刪除、查找等相關(guān)操作技巧,需要的朋友可以參考下
    2019-10-10
  • Python從入門到精通之類的使用詳解

    Python從入門到精通之類的使用詳解

    Python是一種功能強(qiáng)大且廣泛使用的編程語言,它支持面向?qū)ο缶幊蹋∣OP),本文將介紹Python中類的使用,包括類的創(chuàng)建、屬性和方法的定義、繼承和多態(tài)等關(guān)鍵技術(shù)點(diǎn),希望對大家有所幫助
    2023-07-07
  • 淺談Keras中fit()和fit_generator()的區(qū)別及其參數(shù)的坑

    淺談Keras中fit()和fit_generator()的區(qū)別及其參數(shù)的坑

    這篇文章主要介紹了Keras中fit()和fit_generator()的區(qū)別及其參數(shù)的坑,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • python xlsxwriter創(chuàng)建excel圖表的方法

    python xlsxwriter創(chuàng)建excel圖表的方法

    這篇文章主要為大家詳細(xì)介紹了python xlsxwriter創(chuàng)建excel圖表的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Python pkg_resources模塊動(dòng)態(tài)加載插件實(shí)例分析

    Python pkg_resources模塊動(dòng)態(tài)加載插件實(shí)例分析

    當(dāng)編寫應(yīng)用軟件時(shí),我們通常希望程序具有一定的擴(kuò)展性,額外的功能——甚至所有非核心的功能,都能通過插件實(shí)現(xiàn),具有可插拔性。特別是使用 Python 編寫的程序,由于語言本身的動(dòng)態(tài)特性,為我們的插件方案提供了很多種實(shí)現(xiàn)方式
    2022-08-08
  • 深入理解Python中變量賦值的問題

    深入理解Python中變量賦值的問題

    在 python 中賦值語句總是建立對象的引用值,而不是復(fù)制對象。因此,python 變量更像是指針,而不是數(shù)據(jù)存儲(chǔ)區(qū)域,這點(diǎn)和大多數(shù)語言類似吧,比如 C++、java 等。下面這篇文章主要介紹了Python中變量賦值的問題,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-01-01

最新評論

米脂县| 天水市| 甘孜县| 英超| 穆棱市| 万宁市| 静宁县| 抚松县| 灌云县| 松江区| 鄂托克旗| 横峰县| 社旗县| 茶陵县| 抚远县| 西宁市| 常宁市| 康保县| 志丹县| 新干县| 日照市| 怀安县| 仙桃市| 衡水市| 华容县| 娄烦县| 商城县| 朝阳区| 聂拉木县| 巧家县| 应城市| 湾仔区| 华宁县| 手游| 高唐县| 清水县| 乌兰浩特市| 清水河县| 惠东县| 达日县| 天津市|