人工智能初学者MNIST的一些理解

本文介绍了人工智能初学者在理解MNIST数据集时的一些关键概念,包括TensorFlow的使用,如数据加载、神经网络模型构建、损失函数与优化器的选择。文章详细讲解了代码中的各个部分,如张量操作、卷积层、池化层、全连接层以及dropout技术,旨在帮助读者深入理解卷积神经网络的工作原理。
摘要由CSDN通过智能技术生成

人工智能初学者MNIST的一些理解

初学不易,如有错误,承蒙指出,感激不尽。
下面是一些我自己对mnist的理解。

#!/usr/bin/env python

!/usr/bin/env python这种用法是为了防止操作系统用户没有将python装在默认的/usr/bin路径里。当系统看到这一行的时候,首先会到env设置里查找python的安装路径,再调用对应路径下的解释器程序完成操作。相比较#!/usr/bin/python,可以在环境目录里面寻找python环境。

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

Python中需输入此行代码才能在注释中写中文。

import tensorflow as tf

导入tensorflow程序包

from tensorflow.examples.tutorials.mnist import input_data

导入tensorflow程序包中的input_data,如果没有这一句,需在以后每次用到input_data的时候都加上类名的限定,详情见:https://blog.csdn.net/lcczzu/article/details/91413240

定义神经网络模型的评估部分

def compute_accuracy(test_xs, test_ys):

定义函数,def为定义函数,紧接着是函数名,括号内为函数的参数,内部为函数的具体功能实现代码,如果想要函数有返回值,在expressions中的代码中用return返回。

        global prediction

使用全局变量prediction,方便在不同的函数中调取变量prediction

y_pre = sess.run(prediction, feed_dict={
   xs: test_xs, keep_prob: 1})

获得预测值y_pre
sess.run()函数原型为tf.session.run(fetches,feed_dict=None),函数功能为执行操作并计算获取中的张量。Fetches指获取:单个图形元素或图形元素列表。feed_dict指将图形元素映射到值的字典。返回值:如果fetches是单个图形元素,则为单个值;如果fetches是列表,则为值列表。
keep_prob: 1,意思是每个元素被保留的概率,那么keep_prob:1就是所有元素全部保留的意思。一般在大量数据训练时,为了防止过拟合,添加Dropout层,设置一个0~1之间的小数。Dropout类似于性别在生物进化中的角色,物种为了使适应不断变化的环境,性别的出现有效的阻止了过拟合,即避免环境改变时物种可能面临的灭亡。更直观个人理解就是: droput 取50%的时候,每次训练都随机的discard 50%的隐含层的节点来进行训练,这样可以防止每次都是所有的特征选择器共同作用,一直放大或者缩小某些特征,在样本数据少的情况下很容易过拟合,并且泛化能力也很弱,所以才用dropout这种方法来实现能很好的避免训练过程中出现的这些问题。注意,在测试过程中采用的是全连接。

correct_prediction =tf.equal(tf.argmax(y_pre, 1), tf.argmax(test_ys, 1))

判断预测值y和真实值y_中最大数的索引是否一致,y_pre的值为1-10概率, 返回值为bool序列bool序列是只有元素0,1的一个序列,1代表true,0代表false。
#首先,tf.equal用于判断参数是否相等,不是整体判断,而是逐个判断,如果相等就是True也就是1,不相等,就是False也就是0。由于是逐个元素判断,所以x,y 的维度要一致。例:
在这里插入图片描述

其次,tf.equal中要对比的是(tf.argmax(y_pre, 1)和 tf.argmax(test_ys, 1),tf.argmax是
在这里插入图片描述

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

tf.reduce_mean()函数用于计算张量tensor沿着指定的数轴(tensor的某一维度)上的平均值,主要用作降维或者计算tensor(图像)的平均值。
tf.reduce_mean(
input_tensor,
axis=None,
keep_dims=False,
name=None,
reduction_indices=None)
input_tensor: 输入的待降维的tensor
axis: 指定的轴,如果不指定,则计算所有元素的均值
keep_dims:是否降维度,默认False。设置为True,输出的结果保持输入tensor的形状,设置为False,输出结果会降低维度
Name:操作的名称
reduction_indices:在以前版本中用来指定轴,已弃用
例子:

import tensorflow as tf
x = [[1,2,3],
[4,5,6]]
y = tf.cast(x, tf.float32)
mean_all = tf.reduce_mean(y)
mean_0 = tf.reduce_mean(y, axis=0)
mean_1 = tf.reduce_mean(y, axis=1)
with tf.Session() as sess:
m_a,m_0,m_1 = sess.run([mean_all, mean_0, mean_1])
print(m_a)
print(m_0)
print(m_1)

运行结果:

3.5
[2.5 3.5 4.5]
[2 5]

tf.cast()函数用于执行 tensorflow 中张量数据类型转换,比如读入的图片如果是int8类型的,一般在要在训练前把图像的数据格式转换为float32。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
cast定义:cast(x, dtype, name=None)
其中,x为待转换的数据,dtype为目标数据类型,name为可选参数,定义操作的名称。
定义准确率的计算

result = sess.run(accuracy)
    return result

计算准确率,原理是当在上面计算平均值计算的是bool值的平均值,对于所对比的任意两个张量,得到的bool值为一个含有0(false)和1(true)的张量,计算该张量元素的平均值,可以得到1在整个张量所有元素中所占的比例,这个比例就是准确率。

mnist = input_data.read_data_sets('C:/Users/Administrator/MNIST_data/', one_hot=True)

下载mnist数据,本程序对应的mnist数据集已经手动下载完成,上面位置为数据集在本计算机的存储位置。

权重参数初始化

def weight_variable(shape):
initial = tf.truncated_normal(shape, stddev=0.1)

截断的正态分布,标准差stddev为0.1
truncated_normal(
shape,
mean=0.0,
stddev=1.0,
dtype=tf.float32,
seed=None,
name=None
)
产生截断正态分布随机数,取值范围为 [ mean - 2 * stddev, mean + 2 * stddev ]。
在这里插入图片描述
例:
在这里插入图片描述

return tf.Variable(initial)
 tf.Variable()

Variable是tensorflow的变量节点,通过Variable方法创建,并且需要传递初始值。在使用前需要通过tensorflow的初始化方法进行初始化W =tf.Variable(initial_value=tf.zeros([9, 5]),
初始值,必填,张量或可以转换为张量的Python对象。初始值必须有指定一个形状,除非validate_shape设置为False。trainable=True, 如果True,则默认值也将变量添加到图形中集合GraphKeys.TRAINABLE_VARIABLES。这个集合用作“Optimizer”类使用的默认变量列表collections=None, 图表集合键的列表。新的变量被添加到这些集合。默认为[GraphKeys.GLOBAL_VARIABLES]
validate_shape=True,
#如果False,允许变量用初始化未知形状的值。如果“True”,默认的形状initial_value必须是已知的。
caching_device=None
可选设备字符串,描述变量的位置应该被缓存以供阅读。默认为变量的设备。如果不是“None”,则缓存在另一个设备上。
典型的用途是缓存在使用变量 的Ops所在的设备上进行重复数据删除复制Switch和其他条件语句。
name=‘W’,
变量的可选名称。默认为“Variable”并获取自动去重(Variable_1,Variable_2…)。
variable_def=None,
VariableDef协议缓冲区。如果不是“无”,则重新创建变量对象及其内容,引用变量的节点在图中,必须已经存在。
图形没有改变。variable_def和其他参数是互斥的。
dtype=tf.float32,
如果设置,initial_value将被转换为给定的类型。如果None',数据类型将被保存 (如果initial_value是一个张量),或者“convert_to_tensor”来决定。 expected_shape=None, 张量的Shape。如果设置,initial_value需要符合这个形状。 import_scope=None 可选的字符串。名称范围添加到Variable.`仅在从协议缓冲区初始化时使用。)

偏置参数初始化

def bias_variable(shape):
initial = tf.constant(0.1, shape=shape)

在TensorFlow API中创建常量的函数原型如下所示:
tf.constant(
value,
dtype=None,
shape=None,
name=‘Const’,
verify_shape=False
)
第一个value值是必须的,可以是值,也可以是列表。Shape=shape表示与上面的权重张量形状相

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值