机器学习简要介绍,NLP基础+实战 让机器“写小说”教程-慕课网 (imooc.com)
目录
配置
代码
数据集导入及处理
创建神经网络
计算损失函数
采用adam自适应学习率优化器
计算准确率
session封装模型
运行结果
anaconda+pycharm+virtualenv环境
mnist 6w训练数据,1w测试数据,按批次batch size存入内存,共有n batch个批次
placeholder存放外部输入的数据,并且不可改变
列为784=28*28,行不确定为none,之后再对none进行赋值
数据集有0-9共10个标签分类
keep prob用来设置遮盖函数dropout,从比较少的数据集中拿出更多更好的特征,比如共100个数据,遮盖一半,第一次拿50,第二次拿50
lr定义为需要动态调整的数据
两层神经网络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,输出的分类标签=输入(即上一层的输出)*矩阵系数+矩阵偏差
交叉熵损失,对模型的损失函数进行判断,损失函数越小代表模型的准确率越高,但不代表泛化能力,所以要用dropout函数
optimizer:前面lr定义为需要动态调整的数据,初始化的学习率为0.001,需要调整,在梯度下降时,也就是接近局部最优值的时候,用adam学习率优化器来避免跳过
train step:使用优化器来最小化损失函数,得到最优解
init:对代码中所有tf的变量进行初始化,tf2.0之后自动初始化,无需此步
correct prediction:y是标签个数,每一个标签有一个坐标,如图,当放入一个预测图片时,也会拿到一个坐标,选出最大的坐标值,argmax(y,1)1按行取最大值,0按列,如果两者的坐标轴是一致的,结果为true(布尔型)
accuracy:把布尔值转换为float32类型,便于后续计算,(召回率)
.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迭代,学习率更小,准确率更高