1. 程式人生 > 程式設計 >使用TensorFlow搭建一個全連線神經網路教程

使用TensorFlow搭建一個全連線神經網路教程

說明

本例子利用TensorFlow搭建一個全連線神經網路,實現對MNIST手寫數字的識別。

先上程式碼

from tensorflow.examples.tutorials.mnist import input_data
import tensorflow as tf

# prepare data
mnist = input_data.read_data_sets('MNIST_data',one_hot=True)

xs = tf.placeholder(tf.float32,[None,784])
ys = tf.placeholder(tf.float32,10])

# the model of the fully-connected network
weights = tf.Variable(tf.random_normal([784,10]))
biases = tf.Variable(tf.zeros([1,10]) + 0.1)
outputs = tf.matmul(xs,weights) + biases
predictions = tf.nn.softmax(outputs)
cross_entropy = tf.reduce_mean(-tf.reduce_sum(ys * tf.log(predictions),reduction_indices=[1]))
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)

# compute the accuracy
correct_predictions = tf.equal(tf.argmax(predictions,1),tf.argmax(ys,1))
accuracy = tf.reduce_mean(tf.cast(correct_predictions,tf.float32))

with tf.Session() as sess:
 init = tf.global_variables_initializer()
 sess.run(init)
 for i in range(1000):
  batch_xs,batch_ys = mnist.train.next_batch(100)
  sess.run(train_step,feed_dict={
   xs: batch_xs,ys: batch_ys
  })
  if i % 50 == 0:
   print(sess.run(accuracy,feed_dict={
    xs: mnist.test.images,ys: mnist.test.labels
   }))

程式碼解析

1. 讀取MNIST資料

mnist = input_data.read_data_sets('MNIST_data',one_hot=True)

2. 建立佔位符

xs = tf.placeholder(tf.float32,10])

xs 代表圖片畫素資料,每張圖片(28×28)被展開成(1×784),有多少圖片還未定,所以shape為None×784.

ys 代表圖片標籤資料,0-9十個數字被表示成One-hot形式,即只有對應bit為1,其餘為0.

3. 建立模型

weights = tf.Variable(tf.random_normal([784,10]))


biases = tf.Variable(tf.zeros([1,reduction_indices=[1]))
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)

使用Softmax函式作為啟用函式:

使用TensorFlow搭建一個全連線神經網路教程

4. 計算正確率

correct_predictions = tf.equal(tf.argmax(predictions,tf.float32))

5. 使用模型

with tf.Session() as sess:
 init = tf.global_variables_initializer()
 sess.run(init)
 for i in range(1000):
  batch_xs,ys: mnist.test.labels
   }))

執行結果

訓練1000個迴圈,準確率在87%左右.

Extracting MNIST_data/train-images-idx3-ubyte.gz
Extracting MNIST_data/train-labels-idx1-ubyte.gz
Extracting MNIST_data/t10k-images-idx3-ubyte.gz
Extracting MNIST_data/t10k-labels-idx1-ubyte.gz
0.1041
0.632
0.7357
0.7837
0.7971
0.8147
0.8283
0.8376
0.8423
0.8501
0.8501
0.8533
0.8567
0.8597
0.8552
0.8647
0.8654
0.8701
0.8712
0.8712

以上這篇使用TensorFlow搭建一個全連線神經網路教程就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。