最近在慕课上学习tensorflow。
写这么个博客记录一下自己的学习过程,啦啦啦~
小葵花妈妈课堂开课啦
搭建神经网络
- 概念:
基于tensorflow的神经网络:用张量表示数据,用计算图搭建神经网络,用会话执行计算图,优化线上的权重,得到模型
张量:即python数据类型中的列表,用阶来表示张量的维度。
0阶张量称为标量,表示一个单独的数;如S=123
1阶张量称作向量,表示一个二维数组;如V=[1,2,3]
2阶张量称作矩阵,表示一个二维数组;以此类推
数据类型: tf.float32,tf.int32等
计算图: 搭建神经网络的计算过程,是承载一个或多个计算节点的一张图,只搭建网络,不运算。
会话: 执行计算图中的节点运算。使用session.run()执行运算
with tf.Session() as sess:
sess.run(y)
- 神经网络的参数
tf.random_normal() #生成正态分布随机数
tf.truncated_normal() #生成去掉过大偏离点的正态分布随机数
tf.random_uniform() #生成均匀分布随机数
tf.zeros() #表示生成全0数组
tf.ones() #表示生成全1数组
tf.fill() #表示生成全定值数组
tf.constant() #表示生成直接给定值的数组
举例,w=tf.Variable(tf.random_normal([2,3],stddev=2,mean=0,seed=1)),表示生成正态分布随机数,形状两行三列,标准差2,均值0,随机种子1.
随机种子决定了每次生成的数据,随机种子去掉则每次生成的随机数不一致
如无特殊要求标准差,均值,随机种子可以不写
神经网络的搭建
- 神经网络的实现过程:
1、准备数据集,提取特征,作为输入喂给神经网络
2、搭建NN结构,从输入到输出(先搭建计算图,再用会话执行)
3、大量特征数据喂给NN,迭代优化NN参数
4、使用训练好的模型预测和分类
前向传播
- 前向传播搭建模型的计算过程,让模型具有推理能力,可以针对一组输入给出相应的输出
反向传播
- 反向传播:训练模型参数,在所有参数上用梯度下降,使NN模型在训练数据上的损失函数最小
- 损失函数:计算得到的预测值y与已知答案y_的差距
损失函数的计算方法有很多种,MSE是比较常用的方法之一 - 均方误差MSE:求前向传播结果与已知答案之差的平方再求平均
loss_mse=tf.reduce_mean(tf.square(y_-y))
反向传播训练方法:以减小loss值为优化目标,有梯度下降、momentum优化器、adam优化器等优化方法
train_step=tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)
train_step=tf.train.MomentumOptimizer(learning_rate,momentum).minimize(loss)
train_step=tf.train.AdamOptimizer(learning_rate).minimize(loss)
三种优化方法区别如下:
1、梯度下降:是参数沿着梯度的反方向,即损失减小的方向移动,实现更新参数
参数更新公式是:更改后的参数=更改前的参数-学习率*损失函数关于参数的导数
2、Momentum:在更新参数时利用了超参数
参数更新公式:d(i)=c*d(i-1)+g(a(i-1))
a(i)=a(i-1)-b*d(i)
b:学习率,c:超参数 ,a:参数,g:损失函数的梯度
3、Adam:利用自适应学习率的优化算法,Adam算法通过计算梯度的一阶矩估计和二阶矩估计为不同的参数设计独立的自适应学习率
学习率:决定每次参数更新的幅度