mnist手寫體識別 卷積神經網路

2021-09-10 17:24:37 字數 2701 閱讀 7981

# -*- coding: utf-8 -*-

"""通過卷積神經網路進行**

@author: elijah

"""#引入資料集

from tensorflow.examples.tutorials.mnist import input_data

import tensorflow as tf

mnist = input_data.read_data_sets("mnist_data/",one_hot=true)

#x為訓練影象的佔位符,y為訓練影象標籤的佔位符

x = tf.placeholder(tf.float32, [none, 784])

y_ = tf.placeholder(tf.float32, [none, 10])

#將單張還原為28*28的矩陣

x_image = tf.reshape(x, [-1, 28, 28, 1])

def weight_variable(shape):

initial = tf.truncated_normal(shape, stddev=0.1)

return tf.variable(initial)

def bias_variable(shape):

initial = tf.constant(0.1, shape=shape)

return tf.variable(initial)

def conv2d(x, w):

return tf.nn.conv2d(x, w, strides=[1, 1, 1, 1],padding='same')

def max_pool_2x2(x):

return tf.nn.max_pool(x, ksize=[1, 2, 2, 1],

strides=[1, 2, 2, 1],padding='same')

#第一層卷積

w_conv1 = weight_variable([5, 5, 1, 32])

b_conv1 = bias_variable([32])

h_conv1 = tf.nn.relu(conv2d(x_image, w_conv1) + b_conv1)

h_pool1 = max_pool_2x2(h_conv1)

#第二層卷積

w_conv2 = weight_variable([5, 5, 32, 64])

b_conv2 = bias_variable([64])

h_conv2 = tf.nn.relu(conv2d(h_pool1, w_conv2) + b_conv2)

h_pool2 = max_pool_2x2(h_conv2)

#兩層卷積層之間的全連線層

w_fc1 = weight_variable([7 * 7 * 64, 1024])

b_fc1 = bias_variable([1024])

h_pool2_flat = tf.reshape(h_pool2, [-1, 7 * 7 * 64])

h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, w_fc1) + b_fc1)

keep_prob = tf.placeholder(tf.float32)

h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)

#將h_fc1_drop轉換為10個類別的打分

w_fc2 = weight_variable([1024, 10])

b_fc2 = bias_variable([10])

y_conv = tf.matmul(h_fc1_drop, w_fc2) + b_fc2

#計算交叉熵

cross_entropy = tf.reduce_mean(

tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y_conv))

train_step = tf.train.adamoptimizer(1e-4).minimize(cross_entropy)

#定義測試的準確率

correct_prediction = tf.equal(tf.argmax(y_conv, 1), tf.argmax(y_, 1))

accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

#建立session,對物件進行初始化

sess = tf.interactivesession()

sess.run(tf.global_variables_initializer())

#訓練20000步

for i in range(20000):

batch = mnist.train.next_batch(50)

# 每100步驗證一次準確率

if i % 100 == 0:

train_accuracy = accuracy.eval(feed_dict=)

print("step %d, training accuracy %g" % (i, train_accuracy))

train_step.run(feed_dict=)

#在測試集上的準確率

print("test accuracy &g" % accuracy.eval(feed_dict=))

卷積神經網路分類mnist手寫體數字

import tensorflow as tf from tensorflow.examples.tutorials.mnist import input data mnist input data.read data sets mnist data one hot true import matp...

MNIST資料集手寫體識別 RNN實現

github部落格傳送門 csdn部落格傳送門 tensorflow python基礎 深度學習基礎網路模型 mnist手寫體識別資料集 import tensorflow as tf mnist input data.read data sets mnist data one hot true c...

Keras入門級實戰 MNIST手寫體識別

手寫體識別 這裡要解決的問題是,將手寫數字的灰度影象 28 畫素 28 畫素 劃分到 10 個類別 中 0 9 這個資料集包含 60 000 張訓練影象和 10 000 張測試圖 像,由美國國家標準與技術研究院 national institute of standards and technolo...