MNIST机器学习入门

MNIST机器学习入门

下载数据文件

import  tensorflow.compat.v1 as tf
tf.disable_v2_behavior
from tensorflow.examples.tutorials.mnist import input_data
mnist=input_data.read_data_sets("MNIST_data/", one_hot=True)

将数据文件从向量形式转化成图片形式

from tensorflow.examples.tutorials.mnist import input_data
from PIL import  Image
import tensorflow.compat.v1 as tf
import os
import scipy.misc
tf.disable_v2_behavior

mnist=input_data.read_data_sets("MNIST_data/", one_hot=True)

save_dir="MNIST_data/raw/"
if os.path.exists(save_dir) is False:
    os.mkdir(save_dir)

for i in range(20):
    image_array = mnist.train.images[i, :]
    image_array = image_array.reshape(28,28)
    filename = save_dir+'mnist_train_%d.jpg'%i
    scipy.misc.toimage(image_array, cmin=0.0, cmax=1.0).save(filename)
print('please checck %s' % save_dir)

标签的独热表示

from tensorflow.examples.tutorials.mnist import input_data
from PIL import  Image
import tensorflow.compat.v1 as tf
import  numpy as np
tf.disable_v2_behavior

mnist=input_data.read_data_sets("MNIST_data/", one_hot=True)

for i in range(20):
    one_hot_label = mnist.train.labels[i, :]
    label = np.argmax(one_hot_label)
    print('mnist train_%d.jpg:%d' % (i, label))

Softmax回归

Softmax多类分类回归模型,本实例中用来计算每个数字的概率,选择其概率最大的类别当作其数值。
其作用是将其分数值转化成概率值,如:
一类别打分为a,二类别打分为b,三类别打分为c,调用Softmaxn函数则响应的值变成
在这里插入图片描述
也就是其概率值。
假设x是样本的特征,W,b是Softmax模型的参数,在MNIST数据集中则x是一个784维向量,而W是一个(784,10)矩阵,b是一个10维向量,代表其类别数。
计算其逻辑回归模型:在这里插入图片描述
得出的Logit是一个10维向量,进而用Softmax模型将其转换成各个类别的概率。

Softmax在Tensorflow中的实现:

from tensorflow.examples.tutorials.mnist import input_data
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
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)))
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
sess = tf.InteractiveSession()
tf.global_variables_initializer().run()
print('start running ... ')
for _ in range(1000):
    batch_xs, batch_ys = mnist.train.next_batch(100)
    sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})

correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))

其中tf.placeholde和tf.Variable分别为占位符和变量,属于tensor(张量)。
其中,占位符通常用来存储数据和标签,需要用户自行传递给它。如x = tf.placeholder(tf.float32, [None, 784]),用来表示图片数据,None表示可以传递任意张图片给这个占位符。
而变量是指在计算过程中可变的量,每次计算后变量的值会被保存起来,通常用于存储模型参数。
接着,用交叉熵来评测其与实际标签的距离。
交叉熵的损失函数以及在Tensorflow中的实现
构造完交叉熵之后,需要用递归下降分析法进行优化。
在优化前,必须建立一个会话,并且在会话中进行变量的初始化。

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

tf.argmaxn返回N维向量中最大值的下标,tf.euqal则是比较两个数是否相同。
该语句的意思是比较预测标签与实际标签是否相一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值