最近也是考试多,没来得及更新文章。废话不多说,理论讲太多没啥感觉,不清楚的可以翻到前面的文章仔细看看。
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
最后一层不用激活,直接返回,是为了归一化,放到交叉熵损失函数里。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有