文章目录:
-
一.什么是分类学习
1.Classification
2.MNIST
-
二.tensorflow实现MNIST分类
-
三.总结
学Python近八年,认识了很多大佬和朋友,感恩。由于在外求学且需要养娃,故在CSDN设置成了最低价收费专栏,觉得不错的可以购买抬爱;但作者的本意是帮助更多初学者入门,因此在github开源了所有代码,也在公众号同步更新。深知自己很菜,得拼命努力前行,编程也没有什么捷径,干就对了。希望未来能更透彻学习和撰写文章,也能在读博几年里学会真正的独立科研。同时非常感谢参考文献中的大佬们的文章和分享。
- https://blog.csdn.net/eastmount
一.什么是分类学习
-
训练。给定一个数据集,每个样本都包含一组特征和一个类别信息,然后调用分类算法训练模型。
-
预测。利用生成的模型对新的数据集(测试集)进行分类预测,并判断其分类结果。
2.MNIST
-
训练数据集:55,000个样本,mnist.train
-
测试数据集:10,000个样本,mnist.test
-
验证数据集:5,000个样本,mnist.validation
二.tensorflow实现MNIST分类
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
# 下载数据集 数字1到10
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)
#---------------------------------定义神经层---------------------------------
# 函数:输入变量 输入大小 输出大小 激励函数默认None
def add_layer(inputs, in_size, out_size, activation_function=None):
# 权重为随机变量矩阵
Weights = tf.Variable(tf.random_normal([in_size, out_size])) #行*列
# 定义偏置 初始值增加0.1 每次训练中有变化
biases = tf.Variable(tf.zeros([1, out_size]) + 0.1) #1行多列
# 定义计算矩阵乘法 预测值
Wx_plus_b = tf.matmul(inputs, Weights) + biases
# 激活操作
if activation_function is None:
outputs = Wx_plus_b
else:
outputs = activation_function(Wx_plus_b)
return outputs
# 设置传入的值xs和ys
xs = tf.placeholder(tf.float32, [None, 784]) #每张图片28*28=784个点
ys = tf.placeholder(tf.float32,[None, 10]) #每个样本有10个输出
# 输入是xs 784个像素点 10个输出值 激励函数softmax常用于分类
prediction = add_layer(xs, 784, 10, activation_function=tf.nn.softmax)
#------------------------------定义loss和训练-------------------------------
# 预测值与真实值误差 平均值->求和->ys*log(prediction)
cross_entropyloss = tf.reduce_mean(-tf.reduce_sum(ys * tf.log(prediction),
reduction_indices=[1])) #loss
# 训练学习 学习效率通常小于1 这里设置为0.5可以进行对比
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropyloss) #减小误差
# 定义Session
sess = tf.Session()
# 初始化
init = tf.initialize_all_variables()
sess.run(init)
#---------------------------------神经网络学习---------------------------------
for i in range(1000):
# 提取一部分的xs和ys
batch_xs, batch_ys = mnist.train.next_batch(100) #从下载好的数据集提取100个样本
# 训练
sess.run(train_step, feed_dict={xs:batch_xs, ys:batch_ys})
# 每隔50步输出一次结果
if i % 50 == 0:
# 计算准确度
print(compute_accuracy(
mnist.test.images, mnist.test.labels))
-
batch_xs, batch_ys = mnist.train.next_batch(100)
#-------------------------------定义计算准确度函数------------------------------
# 参数:预测xs和预测ys
def compute_accuracy(v_xs, v_ys):
# 定义全局变量
global prediction
# v_xs数据填充到prediction变量中 生成预测值0到1之间的概率
y_pre = sess.run(prediction, feed_dict={xs:v_xs})
# 比较预测最大值(y_pre)和真实最大值(v_ys)的差别 如果等于就是预测正确,否则错误
correct_prediction = tf.equal(tf.argmax(y_pre,1), tf.argmax(v_ys,1))
# 计算正确的数量
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
# 输出结果为百分比 百分比越高越准确
result = sess.run(accuracy, feed_dict={xs:v_xs, ys:v_ys})
return result
# -*- coding: utf-8 -*-
"""
Created on Tue Dec 17 20:28:55 2019
@author: xiuzhang Eastmount CSDN
"""
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
# 下载数据集 数字1到10
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)
#---------------------------------定义神经层---------------------------------
# 函数:输入变量 输入大小 输出大小 激励函数默认None
def add_layer(inputs, in_size, out_size, activation_function=None):
# 权重为随机变量矩阵
Weights = tf.Variable(tf.random_normal([in_size, out_size])) #行*列
# 定义偏置 初始值增加0.1 每次训练中有变化
biases = tf.Variable(tf.zeros([1, out_size]) + 0.1) #1行多列
# 定义计算矩阵乘法 预测值
Wx_plus_b = tf.matmul(inputs, Weights) + biases
# 激活操作
if activation_function is None:
outputs = Wx_plus_b
else:
outputs = activation_function(Wx_plus_b)
return outputs
#-------------------------------定义计算准确度函数------------------------------
# 参数:预测xs和预测ys
def compute_accuracy(v_xs, v_ys):
# 定义全局变量
global prediction
# v_xs数据填充到prediction变量中 生成预测值0到1之间的概率
y_pre = sess.run(prediction, feed_dict={xs:v_xs})
# 比较预测最大值(y_pre)和真实最大值(v_ys)的差别 如果等于就是预测正确,否则错误
correct_prediction = tf.equal(tf.argmax(y_pre,1), tf.argmax(v_ys,1))
# 计算正确的数量
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
# 输出结果为百分比 百分比越高越准确
result = sess.run(accuracy, feed_dict={xs:v_xs, ys:v_ys})
return result
#-------------------定义placeholder输入至神经网络---------------------------
# 设置传入的值xs和ys
xs = tf.placeholder(tf.float32, [None, 784]) #每张图片28*28=784个点
ys = tf.placeholder(tf.float32,[None, 10]) #每个样本有10个输出
#---------------------------------增加输出层---------------------------------
# 输入是xs 784个像素点 10个输出值 激励函数softmax常用于分类
prediction = add_layer(xs, 784, 10, activation_function=tf.nn.softmax)
#------------------------------定义loss和训练-------------------------------
# 预测值与真实值误差 平均值->求和->平方(真实值-预测值)
cross_entropyloss = tf.reduce_mean(-tf.reduce_sum(ys * tf.log(prediction),
reduction_indices=[1])) #loss
# 训练学习 学习效率通常小于1 这里设置为0.5可以进行对比
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropyloss) #减小误差
#-----------------------------------初始化-----------------------------------
# 定义Session
sess = tf.Session()
# 初始化
init = tf.initialize_all_variables()
sess.run(init)
#---------------------------------神经网络学习---------------------------------
for i in range(1000):
# 提取一部分的xs和ys
batch_xs, batch_ys = mnist.train.next_batch(100) #从下载好的数据集提取100个样本
# 训练
sess.run(train_step, feed_dict={xs:batch_xs, ys:batch_ys})
# 每隔50步输出一次结果
if i % 50 == 0:
# 计算准确度
print(compute_accuracy(
mnist.test.images, mnist.test.labels))
wdir='C:/Users/xiuzhang/Desktop/TensorFlow')
Extracting MNIST_datatrain-images-idx3-ubyte.gz
Extracting MNIST_datatrain-labels-idx1-ubyte.gz
Extracting MNIST_datat10k-images-idx3-ubyte.gz
Extracting MNIST_datat10k-labels-idx1-ubyte.gz
0.0745
0.6235
0.7345
0.7753
0.8070
0.8239
0.8351
0.8406
0.8454
0.8554
0.8569
0.8605
0.8636
0.8651
0.8673
0.8698
0.8713
0.8744
0.8770
0.8779
三.总结
天行健,君子以自强不息。
地势坤,君子以厚德载物。
-
[1] 神经网络和机器学习基础入门分享 - 作者的文章
-
[2] 斯坦福机器学习视频NG教授: https://class.coursera.org/ml/class/index
-
[3] 书籍《游戏开发中的人工智能》、《游戏编程中的人工智能技术》
-
[4] 网易云莫烦老师视频(强推老师)
https://study.163.com/course/courseLearn.htm?courseId=1003209007
-
[5] 神经网络激励函数 - deeplearning
-
[6] tensorflow架构 - NoMorningstar
-
[7] 深度学习之 TensorFlow(二):TensorFlow 基础知识 - 希希里之海
-
[8] Tensorflow实现CNN用于MNIST识别 - siucaan
-
[9] MNIST手写体识别任务 - chen645096127
-
[10] 机器学习实战—MNIST手写体数字识别 - RunningSucks
-
[11] https://github.com/siucaan/CNN_MNIST
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论