mnist数据集LR实战

机器学习简要介绍,NLP基础+实战 让机器“写小说”教程-慕课网 (imooc.com)

目录

配置

代码

数据集导入及处理

创建神经网络

计算损失函数

采用adam自适应学习率优化器

计算准确率

session封装模型

运行结果


配置

anaconda+pycharm+virtualenv环境

mnist数据集LR实战_第1张图片

代码

数据集导入及处理

mnist数据集LR实战_第2张图片 

mnist 6w训练数据,1w测试数据,按批次batch size存入内存,共有n batch个批次

placeholder存放外部输入的数据,并且不可改变

列为784=28*28,行不确定为none,之后再对none进行赋值

数据集有0-9共10个标签分类

keep prob用来设置遮盖函数dropout,从比较少的数据集中拿出更多更好的特征,比如共100个数据,遮盖一半,第一次拿50,第二次拿50

lr定义为需要动态调整的数据

创建神经网络

mnist数据集LR实战_第3张图片

两层神经网络y=w1*x+b1:激活层+dropout遮盖函数+全连接层softmax用来多分类的概率识别

  • 第一层:

w1矩阵前面的系数,定义正态分布的随机变量,行为784,列为500,标准差为0.1,产生一个784*500的随机数矩阵

b1矩阵中可能产生的偏差,是一个向量,向量为500,偏置初始化一般设置为0,+0.1代表可以调为0.1

l1第一层神经网络设置为双曲线tanh,比传统的sigmoid激活函数要好一点,matmul(x,w1)是矩阵乘

l1 drop引入dropout函数

  • 第二层:

w2行为500,列为300,维度比一层少,为了取更有效的特征,第一层进行过滤,过滤后取到了相应的特征,下一层希望得到更多特征,也就是,将第一层的列维度变为第二层的行维度,用于降维处理,难解释

b2偏执函数设置为0,再加一个0.1

l2用tanh做激活函数,但是输入设置为l1 drop,也就是第一层中l1处理过的函数,作为第二层神经网络的输入,建立模型关系式,tanh(tf.matmul(l1_drop, w2)+b2)

l2 drop设置遮盖函数dropout

  • 第三层(全连接层):

w3行为300,列为10,输出标签对输入的图片进行分类预测,共有0-9共10个类别,标准差为0.1

b3矩阵中可能产生的偏差为10列数,偏置为0,可以+0.1

prediction预测,作为整个神经网络的输出,用softmax激活函数,可以预测分类的概率,以l2 drop作为输入x,建立函数关系式y=x*w3+b3,输出的分类标签=输入(即上一层的输出)*矩阵系数+矩阵偏差

计算损失函数

 

  • loss:

交叉熵损失,对模型的损失函数进行判断,损失函数越小代表模型的准确率越高,但不代表泛化能力,所以要用dropout函数

采用adam自适应学习率优化器

mnist数据集LR实战_第4张图片 

optimizer:前面lr定义为需要动态调整的数据,初始化的学习率为0.001,需要调整,在梯度下降时,也就是接近局部最优值的时候,用adam学习率优化器来避免跳过

train step:使用优化器来最小化损失函数,得到最优解

init:对代码中所有tf的变量进行初始化,tf2.0之后自动初始化,无需此步

计算准确率

 

mnist数据集LR实战_第5张图片 

correct prediction:y是标签个数,每一个标签有一个坐标,如图,当放入一个预测图片时,也会拿到一个坐标,选出最大的坐标值,argmax(y,1)1按行取最大值,0按列,如果两者的坐标轴是一致的,结果为true(布尔型)

accuracy:把布尔值转换为float32类型,便于后续计算,(召回率)

session封装模型

mnist数据集LR实战_第6张图片

.Session:启动tf训练模型,将所有模型都放入session执行体中,把所有之前做好的集合的模型放入内存中进行图运算

.assign:每训练一次就要改变一次学习率

for batch:每次提取数据时都要进行一次循环处理

batch xs取出的图片的信息,batch ys取出图片对应的标签信息

放入session图计算的内存中

feed dict:把前面用placeholder占位符进行占位的数据进行替换,batch xs替换x,batch ys替换y

keep prob:设置为1,为了加速运算,可以改成零点几

泛化能力:对训练集的准确率高,但是对测试集的准确率低,即过拟合

learning rate:调整学习率,因为前面置信了一个学习率

acc:求该学习率的准确率,并放入测试集的数据

运行结果

每次epoch迭代,学习率更小,准确率更高

你可能感兴趣的:(NLP自然语言处理,自然语言处理,人工智能,nlp)