前向传播算法:
一个神经元有多个输入和一个输出
神经网络:不同神经元的连接结构
一个简单的神经元的输出就是所有输入的加权和,而不同输入的权重就是神经元的参数,神经网络的优化过程,就是神经元中参数的取值过程
fig:三层全连接神经网络
全连接神经网络,两层直接的所有节点都有连接
输入层-> 隐藏层->输出层 边=参数=权重 神经元=节点 神经元:多个输入一个输出
优化=优化参数=优化权重
输出大于阈值,合格!
将神经网络 看成一个一个的矩阵相乘->全连接神经网络,tensorflow轻易的实现矩阵的乘法。
tf.matmul()实现了运算
变量的作用就是保存和更新神经网络的参数
使用随机数给参数设置初始值
weights=tf.Variable(tf.random_normal([2,3], stddev=2)) /////给一个2*3的矩阵设置初始值,使用随机变
其中,矩阵中的元素是 标准差是2,均值是0.
可以通过mean来指定 平均值,默认为0
几种随机数生成器,满足不同的条件,平均分布、GAmma分布、正态分布、等
常数生成函数,全零等
偏置项,BAIS=tf.Variable(tf.zeros([3]))--------------->生成了一个长度为3的,初始值为0的偏置项
同时变量的初始值也可以由其他变量的值来初始化!
下面的代码实现神经网络的向前传播!
代码:
变量的声明是tf.Variable(tf.random_normal([2,3]//两行三列的随机数组,stddev=1//方差为1,seed=1随机种子))
变量是特殊的张量,变量运算输出的结果就是张量
变量的类型一旦声明将不会改变
w1=tf.Variable(tf.random_normal([])),------>random_normal的结果是tf.float32
变量的维度可以改变。通过validate_shape=False-------------------->tf.assign(w1,w2,validate_shape=False)
1、通过监督学习的方式设置神经网络的参数需要一个标注好的训练参数集
2、监督学习最重要的思想就是:在已经标注好的数据集上,模型给出的预测要尽可能的接近真实值
通过调整神经网络的参数对数据集进行拟合,使模型具有预测的能力
3、神经网络的优化算法,最常用的就是反向传播法
4、反向传播实现了一个迭代过程
5、TensorFlow,提供了一个placeholder机制用于输入数据,placeholder相当于提供了一个位置,这个位置中的数据在程序运行时才指定,这样在程序中就不需要大量常量来输入数据,而只需要经数据通过placeholder传入计算图。
6、placeholder的数据类型需要指定,维度也让需要指定。
在最后一行,通过feed_dict指定x的值,feed_dict是一个字典。
1、如果将输入的1x2矩阵,改为nx2矩阵就可以得到n个样例的前向传播
在得到结果的基础上,同时需要定义一个损失函数,来刻画当前预测值与真实值之间的差距,然后通过反向传播算法来调整神经网络参数的取值,可以使得差距减小。
cross_entropy定义了真实值与预测值之间的交叉熵,
这是分类问题常用的损失函数
train_step定义了反向传播的优化算法
通过运行sess.run(train_step)就可以对GraphKeys.集合中的变量进行优化。
使用神经网路模型解决二分问题完整程序代码