摘要:首先需要添加一個新的占位符用于輸入正確值計算交叉熵的表達式可以實現為現在我們知道我們需要我們的模型做什么啦,用來訓練它是非常容易的。
學習softmax回歸模型 一. 下載mnist數據集
新建一個download.py 代碼如下:
"""Functions for downloading and reading MNIST data.""" from __future__ import absolute_import from __future__ import division from __future__ import print_function import gzip import os import tempfile import numpy from six.moves import urllib from six.moves import xrange # pylint: disable=redefined-builtin import tensorflow as tf from tensorflow.contrib.learn.python.learn.datasets.mnist import read_data_sets
運行則會自動下載mnist數據集
二. softmax模型參數mnist.train.images(像素點):下載的mnist中的mnist.train包含60000萬張簡單的驗證碼圖片, 我們將每張圖片看作 28 * 28 = 784個像素點。如此我們可以用兩個維度量表示整個數據集,維度一:圖片序號, 維度二:像素點序號。 那么整個數據集最大像素點為[60000, 784]
mnist.train.labels(標簽):接下來我們的任務是識別每張圖片中的數字, 所以我們給每張圖片設立一個標簽, 標簽值介于0~9之間(共十個值), 所以那個數據集的標簽就可以做成兩個維度, 維度一: 圖片序號(60000), 維度二:標簽值序號(10), 那么最大的標簽可以表示為[60000, 10]
對于這里的數學推導,我就不過多說了。只能贊嘆人類的智慧是偉大的, 然后簡單分析下,不會數學推導的,我們可以這樣來理解,分析一張圖片的標簽到底是數字幾, 我們需要看圖片中的每個像素點像數字幾, 我們將每個像素點像某個標簽的概率進行加權計算 w表示784個像素點中每個像素點更像數字幾的加權, 然后再加上最終計算出的數字的干擾偏置量b即可。 大致理解和最終推導式
導入tensorflow
import tensorflow as tf
定義像素:
x = tf.placeholder(tf.float32, [None, 784])
x不是一個特定的值,而是一個占位符placeholder,我們在TensorFlow運行計算時輸入這個值。
如此我們希望能輸入任意數量的圖片,所以在像素點參數中,第一個維度是無法確定的,所以我們用[None,784 ]來表示
定義w:
W = tf.Variable(tf.zeros([784,10]))
定義b:
b = tf.Variable(tf.zeros([10]))
實現softmax等式:
y = tf.nn.softmax(tf.matmul(x,W) + b)
評估模型我們使用交叉熵作為成本函數。
首先需要添加一個新的占位符用于輸入正確值:
y_ = tf.placeholder("float", [None,10])
計算交叉熵的表達式可以實現為:
cross_entropy = -tf.reduce_sum(y_*tf.log(y))
現在我們知道我們需要我們的模型做什么啦,用TensorFlow來訓練它是非常容易的。因為TensorFlow擁有一張描述你各個計算單元的圖,它可以自動地使用反向傳播算法(backpropagation algorithm)來有效地確定你的變量是如何影響你想要最小化的那個成本值的。然后,TensorFlow會用你選擇的優化算法來不斷地修改變量以降低成本。
這里我們使用梯度下降算法來計算梯度下降算法:
qtrain_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
我們已經設置好了我們的模型。在運行計算之前,我們需要添加一個操作來初始化我們創建的變量:
init = tf.initialize_all_variables()
啟動我們的模型,并且初始化變量:
sess = tf.Session()
sess.run(init)
然后開始訓練模型,這里我們讓模型循環訓練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})評估模型
tf.argmax 是一個非常有用的函數,它能給出某個tensor對象在某一維上的其數據最大值所在的索引值。由于標簽向量是由0,1組成,因此最大值1所在的索引位置就是類別標簽,比如tf.argmax(y,1)返回的是模型對于任一輸入x預測到的標簽值,而 tf.argmax(y_,1) 代表正確的標簽,我們可以用 tf.equal 來檢測我們的預測是否真實標簽匹配。
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
該函數返回單個實例等正確性,返回結果為bool值。所以我們需要把結果轉化為浮點數然后再求取平均值。
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
最后我們獲得正確率為:
print sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels})
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/40794.html
TensorFlow是一種流行的機器學習庫,它提供了許多工具和技術,使得機器學習和深度學習變得更加容易。在這篇文章中,我們將介紹TensorFlow的入門和實戰技術,幫助您開始使用這個強大的工具。 首先,讓我們來了解一下TensorFlow的基礎知識。TensorFlow是一個用于數值計算的開源軟件庫,它使用數據流圖來表示數學運算。數據流圖是一種圖形表示法,它將數學運算表示為節點,將數據表示為邊...
閱讀 1849·2021-11-25 09:43
閱讀 1491·2021-09-02 15:21
閱讀 3453·2019-08-30 15:52
閱讀 1501·2019-08-30 12:48
閱讀 1295·2019-08-30 10:57
閱讀 2929·2019-08-26 17:41
閱讀 681·2019-08-26 11:59
閱讀 1366·2019-08-26 10:41