神经网络的结构,就是不同神经元间的连接结构


全连接神经网络的 时间复杂度 全连接神经网络结构_全连接神经网络的 时间复杂度


–图示了一个三层全连接神经网络。


神经元结构的输出,是所有输入的加权、加上偏置项,再经过一个激活(传递)函数得到。






全连接神经网络




全连接神经网络,就是相邻两层之间,任意两个节点之间都有连接。


–这也是其与后面介绍的卷积层、LSTM结构的区分。


–除了输入层,所有节点都代表了一个神经元的结构。


计算神经网络的前向传播结果,要三部分信息。


–第一个部分是神经网络的输入,这个输入就是从实体中提取的特征向量。


–第二个部分为神经网络的连接结构。神经网络是由神经元构成的,神经网络的结构,给出不同神经元之间输入、输出的连接关系。


–第三部分是每个神经元中的参数。






示例分析




图中,a11节点有两个输入,分别是x1和x2的输出,而a11的输出是节点Y的输入。


全连接神经网络的 时间复杂度 全连接神经网络结构_神经网络_02


–用w来表示神经元中的权重,b表示偏置项。


–w的上标表明了神经网络的层数,如w(1)表示第一层节点的参数,而w(2)表示第二层节点的参数。


–w的下标表明了连接节点编号,比如w 1,2 (1)表示连接x1和a12节点的边上的权重。






给定神经网络的输入、神经网络的结构,以及边上权重,就可以通过前向传播算法,来计算出神经网络的输出


•下面公式给出了在ReLU激活函数下,前图神经网络前向传播的过程。此处假设x1=0.7, x2=0.9

–a11=f(W1,1(1)x1+W2,1(1)x2+b1(1)) 

 –=f(0.7×0.2+0.9×0.3+(-0.5)) =f(-0.09)=0 

 –a12=f(W1,2(1)x1+W2,2(1)x2+b2(1)) 

 –=f(0.7×0.1+0.9×(-0.5)+0.1)=f(-0.28)=0 

 –a13=f(W1,3(1)x1+W2,3(1)x2+b3(1)) 

 –=f(0.7×0.4+0.9×0.2+(-0.1))=f(0.36)=0.36 

 –Y=f(W1,1(2)a11+W1,2(2)a12+W1,3(2)a13+b1(2)) 

 –=f(0.054+0.028+(-0.072)+0.1)=f(0.11)=0.11



•在虚拟机中运行相应的chap3中的前向神经网络例子,查看相关的图计算。






在TensorFlow中,可以通过矩阵乘法的方法,实现神经网络的前向传播过程。


–a = tf.nn.relu(tf.matmul(x, w1)+b1)


–y = tf.nn.relu(tf.matmul(a, w2)+b2)


在上面的代码中并没有定义w1、w2、b1、b2,


–TensorFlow可以通过变量(tf.Variable),来保存和更新神经网络中的参数。


比如通过下面语句可以定义w1:


–weights = tf.Variable(tf.random_normal([2, 3], stddev=2))


–这段代码调用了TensorFlow变量的声明函数tf.Variable。在变量声明函数中,给出了初始化这个变量的方法。






TensorFlow中变量的初始值,可以设置成随机数、常数或者是通过其他变量的初始值,计算得到


样例中,tf.random_normal([2, 3], stddev=2)会产生一个2×3的矩阵,矩阵中的元素是均值为0,标准差为2的随机数。


–注:标准差,也称为标准偏差


全连接神经网络的 时间复杂度 全连接神经网络结构_大数据_03


tf.random_normal函数,可以通过参数mean,来指定平均值,在没有指定时默认为0。


–通过满足正态分布的随机数,来初始化神经网络中的参数,是一个常用的方法。






下面的样例,介绍了如何通过变量,实现神经网络的参数,并实现前向传播的过程。 

 import tensorflowas tf 

 # 声明变量。 

 w1 = tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1)) 

 b1 = tf.Variable(tf.constant(0.0, shape=[3])) 

 w2 = tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1)) 

 b2 = tf.Variable(tf.constant(0.0, shape=[1])) 

 # 暂时将输入的特征向量定义为一个常量。这里x是一个1*2的矩阵。 

 x = tf.constant([[0.7, 0.9]]) 





 # 实现神经网络的前向传播过程,并计算神经网络的输出。 

 a = tf.nn.relu(tf.matmul(x, w1)+b1) 

 y = tf.nn.relu(tf.matmul(a, w2)+b2) 

 sess= tf.Session() 

 # 运行变量初始化过程。 

 init_op= tf.global_variables_initializer() 

 sess.run(init_op) 

 # 输出[[3.95757794]] 

 print(sess.run(y)) 
sess.close()