首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MNIST数据集介绍及计算

MNIST数据集介绍及计算

作者头像
木野归郎
发布2020-11-10 10:53:06
2.4K0
发布2020-11-10 10:53:06
举报
文章被收录于专栏:share ai happinessshare ai happiness

最近也是考试多,没来得及更新文章。废话不多说,理论讲太多没啥感觉,不清楚的可以翻到前面的文章仔细看看。

MNIST数据集

MNIST数据集是机器学习领域中非常经典的一个数据集,由60000个训练样本和10000个测试样本组成,每个样本都是一张28 * 28像素的灰度手写数字图片,

其中每一张图片都代表0~9中的一个数字。

怎么通过输入数据经过神经网络参数传到最后的过程?

下载:

官方网站 http://yann.lecun.com/exdb/mnist/

一共4个文件,训练集、训练集标签、测试集、测试集标签

文件名称

大小

内容

train-images-idx3-ubyte.gz

9,681 kb

55000张训练集,5000张验证集

train-labels-idx1-ubyte.gz

29 kb

训练集图片对应的标签

t10k-images-idx3-ubyte.gz

1,611 kb

10000张测试集

t10k-labels-idx1-ubyte.gz

5 kb

测试集图片对应的标签

导入Mnist数据集

MNIST数据集在机器学习领域非常常用的,一般拿出一个模型都会在这里进行验证,所以说TensorFlow想让用户方便实验,本身就集成了这个数据集,不用额外的去下载。

创建一个mnist_cs.py文件。

怎么导入mnist数据集

# 从tensorflow里面加载MNIST数据集
from tensorflow.examples.tutorials.mnist import input_data

# 载入MNIST数据集,如果之前没有下载过,则会自动下载到相应路径
mnist = input_data.read_data_sets(‘/path/MNIST_data/’,
         one_hot=True)
# 打印 Training data size: 55000,将60000数据分成训练集和验证集
print (‘training_data_size:’, mnist.train.num_examples)

# 打印 Example training data: [0. 0. 0. … 0.380 0.376 … 0.]
print (‘Example training data:’, mnist.train.images[0])

打印出来是784维的向量。784是一个28*28矩阵,把它向量化了,一行一行拼在一起。

设置神经网络结构相关的参数

#输入层的节点数。对于MNIST数据集,这个等于图片的总像素=28*28
INPUT_NODE = 784
#输出层的节点数。在MNIST数据集中有0~9这10个数字类别
OUTPUT_NODE = 10 
#神经网络隐藏节点数,这个是自己定的
LAYER1_NODE = 500

定义获取变量函数

可以对参数进行约束,regularizer把这个参数也作为最后的损失函数losses是所有约束项的集合,最后跟目标函数一起优化。

def get_weight_variable(shape, regularizer):
    # shape是变量的大小,regularizer是正则化函数。
    # tf.truncated_normal_initializer是正态分布初始化函数
   weights = tf.get_variable(“weights”, shape, initializer=          
             tf.truncated_normal_initializer(stddev=0.1))
#tf.add_to_collections 将当前变量的正则化损失加入名字为losses的集合
if regularizer != None:
  tf.add_to_collections(‘losses’,regularizer(weights))
return weights

定义神经网络向前传播过程

第一层前馈计算

def inference(input_tensor, regularizer):
   #声明第一层神经网络的命名空间’layer1’及相关变量,并完成前向传播过程 
    with tf.variable_scope(‘layer1’): 
     weights = get_weight_variable(
      [INPUT_NODE,LAYER1_NODE],regularizer)
     biases = tf.get_variable(“biases”,[LAYER1_NODE],
              initializer=tf.constant_initializer(0.0))
     output1 = tf.matmul(input_tensor, weights)+biases
     layer1 = tf.nn.relu(ouput1) #使用relu激活函数  
   #声明第二层神经网络的名命空间’layer2’及相关变量,并完成前向传播过程

input_tensor输入图片

def inference(input_tensor, regularizer):
   #声明第一层神经网络的名命空间’layer1’及相关变量,并完成前向传播过程
     +
   #声明第二层神经网络的名命空间’layer2’及相关变量,并完成前向传播过程
   with tf.variable_scope(‘layer2’): 
     weights = get_weight_variable(
        [LAYER1_NODE, OUTPUT_NODE], regularizer)
     biases = tf.get_variable(“biases”,[OUTPUT_NODE],
              initializer=tf.constant_initializer(0.0))
     layer2 = tf.matmul(layer1, weights) + biases
     #返回前向传播的结果
   return layer2  

最后一层不用激活,直接返回,是为了归一化,放到交叉熵损失函数里。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-11-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OnlyCoding 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档