搭建神经网络1

瘦欲@ 提交于 2020-02-29 17:08:45

基本概念 

1、基于Tensorflow的NN(neural network)用张量表示数据,用计算图搭建神经网络,用会话执行运算图,优化线上的权重,得到模型。

0阶张量称作标量,表示一个单独的数,如s=12;

1阶张量称作向量,表示一个一维数组(列表),如V=[1,2,3];

2阶张量称作矩阵,表示一个二维数组(列表),它可以有i行j列个元素,每个元素可以用行号和列号共同索引到,

如m=[[1,2,3],[4,5,6],[7,8,9]];

t=[[[...]]]为三阶张量。

2,数据类型:Tensorflow的数据类型有tf.float32、tf.int32等。

例如我们实现tensorflow的加法:

import tensorflow as tf#引入模块
a = tf.constant([1.0,2.0])#定义一个张量等于[1.0,2.0],constant表示是一个常量
b = tf.constant([3.0,4.0])#定义一个张量等于[3.0,4.0]
result = a+b#实现a和b的加法
print(result)#打印出结果

 结果:

意思是result是一个名称为add_2:0的张量,shape=(2,)表示一维数组长度为2,dtype=float32表示数据类型为浮点型。

3,计算图(Graph):搭建神经网络的计算过程,是承载一个或多个计算节点的一张图,只搭建网络,不计算。

举例:

我们知道神经网络的基本模型是神经元,神经元的基本模型其实就是数学中的乘法、加法运算,我们搭建如下的计算图:

下面实现上述计算图:

import tensorflow as tf#引入模块
#矩阵相乘运算matmul()函数
x = tf.constant([[1.0,2.0]])#定义一个二阶张量
y = tf.constant([[3.0],[4.0]])#定义一个二阶张量
r = tf.matmul(x,y)#实现xy矩阵相乘
print(r)#打印出结果

结果:

结果中显示y是一个1行1列的二维数组(张量),只搭建了计算过程的计算图,并没有运算,如果我们想得到结果就需要用到"会话Session()"了。

4,会话(Session):执行计算图中的节点运算。

我们使用with结构实现,语法如下:

with tf.Session() as sess:
    print(sess.run(y))

举例:

对于之前我们所描述的计算图,我们执行Session()会话可以得到矩阵相乘结果:

import tensorflow as tf#引入模块
x = tf.constant([[1.0,2.0]])#一行两列二阶张量
y = tf.constant([[3.0],[4.0]])#两行一列二阶张量
r = tf.matmul(x,y)#实现矩阵乘法
print(r)#打印出结果
with tf.Session() as sess:
    print(sess.run(r))#执行会话并打印出执行后的结果

运行结果:

我们可以看出,运行Session()会话前只打印出y是个张量的提示,运行Session()会话后打印出了y的结果1.0*3.0+2.0*4.0=11.0。

5、神经网络参数

神经网络的参数:是指神经元线上的权重w,用变量表示,一般会随机生成这些参数。生成参数的方法是让w等于tf.Variable,把生成的方式写在括号里。

神经网络中常用的生成随机数/数组的函数有:

举例

w=tf.Variable(tf.random_normal([2,3],stddev=2,mean=0,seed=1))
#表示生成正态分布随机数,形状两行三列,标准差是2,均值是0,随机种子是1
w=tf.Variable(tf.Truncated_normal([2,3],stddev=2,mean=0,seed=1))
#表示去掉偏离过大的正态分布,也就是如果随机出来的数据偏离平均值超过两个标准差,将重新生成随机数

tf.zeros([3,2],int32) 表示生成[[0,0],[0,0],[0,0]]

tf.constant([3,2,1])生成[3,2,1]

注意:随机种子如果去掉每次生成的随机数将不一致;如果没有特殊要求,标准差、均值、随机种子是可以不写的。

6、神经网络的搭建

当我们知道张量、计算图、会话和参数后,我们就可以讨论神经网络的实现过程了。

神经网络的实现过程:

基于神经网络的机器学习主要分为两个过程:训练过程和使用过程。训练过程是第一步、第二步、第三步的循环迭代,使用过程是第四步,一旦参数优化完成就可以固定这些参数,实现特定应用了。

很多情况下,我们会使用现有的成熟网络结构,喂入新的数据,训练相应模型,判断是否都能够对喂入的从未见过的新数据做出正确响应,再适当更改网络结构,反复迭代,让机器自动训练参数找出优化结构和参数,一固定专用模型。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!