Tensorflow神经网络的搭建

    关于神经网络NN结构,在最近的课程中推进了重新认识了下NN结构。

    

    多层向前神经网络由3部分组成,输入层(input layer),隐藏层(hidden layers),输出层(output layers),如下图:

    

    张量:张量就是多维数组(列表),用“阶”表示张量的维度。
    0 阶张量称作标量,表示一个单独的数;
    举例 S=123
    1 阶张量称作向量,表示一个一维数组;    
    举例 V=[1,2,3]
    2 阶张量称作矩阵,表示一个二维数组,它可以有 i 行 j 列个元素,每个元素可
    以用行号和列号共同索引到;
    举例 m=[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    判断张量是几阶的,就通过张量右边的方括号数,0 个是 0 阶,n 个是 n 阶,张
    量可以表示 0 阶到 n 阶数组(列表);
    举例 t=[ [ [... ] ] ]为 3 阶。

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

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

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

    也就是说:用计算图搭建神经网络,用会话执行计算图,优化线上的权重(参数),得到模型。

    看一个例子: 神经网络的基本模型是神经元,神经元的基本模型其实就是数学中的乘、加运算。我们搭建如下的计算图:

            

    x1、x2 表示输入,w1、w2 分别是 x1 到 y 和 x2 到 y 的权重,y=x1*w1+x2*w2。

    我们在jupyter上来实现上述计算图:
    

    可以打印出这样一句话:Tensor(“matmul:0”, shape(1,1), dtype=float32)。

    结果的意思为 y  是一个名称为 MatMul:0 的张量, shape=(1,1)表示一个一行一列的矩阵,dtype=float32 表示数据类型为浮点型。从这里我们可以看出,print 的结果显示 y 是一个张量,只搭建承载计算过程的计算图,并没有运算,如果我们想得到运算结果就要用到“会话 Session()”了。

    执行计算图中的节点运算。

    

   #执行会话并打印出执行后的结果
    可以打印出这样的结果:[[11.]]

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

   反观计算图:

    输入层和输出层都只有1层,隐藏层可以有N层,每一层由若干个节点单元组成。上图的神经网络是一个两层的神经网络,输入层不算在内。  

    将实例特征向量传入输入层,经过隐藏层,一系列的计算,最终可以得到输出层的结果。输入层后面的每一层可以通过上一层的加权求和再进行非线性方程转化得到。

    这个加权求和是怎么做的呢?我们可以看到前一层与后一层单元之间有一些连线,每一条连线就对应一个权重,将前一层的单元与对应 的权重相乘再相加,最后进行非线性方程转化就能得到后一层每个单元的值。每一层的输出是下一层的输入。因为加权求和之后以后计算的方程是非线性的,所以理论上讲有一个很强大的功能,只要训练集足够大,隐藏层足够多,可以用神经网络模拟出任何方程。今天随着计算能力的大大增强以及数据集增大,神经网络为前身延伸出了的强大的深度学习,深度学习的强大就在于数据集和计算能力大大增强的情况下可以用更多的隐藏层模拟出更多的方程。

    简而言之:给定一个模型,经过多次的训练,模型会建立其对问题的相对准确的解决方案,

    神经网络的实现过程:
    1、准备数据集,提取特征,作为输入喂给神经网络(Neural Network,NN)

    2、搭建 NN 结构,从输入到输出(先搭建计算图,再用会话执行)

    ( NN 前向传播算法 -> 计算输出)
    3、大量特征数据喂给 NN,迭代优化 NN 参数
    ( NN 反向传播算法 -> 优化参数训练模型)
    4、使用训练好的模型预测和分类

    运用这些网络模型可实现函数逼近、数据聚类、模式分类、优化计算等功能。因此,神经网络广泛应用于人工智能、自动控制、机器人、统计学等领域的信息处理中。虽然神经网络的应用很广,但是在具体的使用过程中到底应当选择哪种网络结构比较合适是值得考虑的。这就需要我们对各种神经网络结构有一个较全面的认识。

    最后在测试案例的时候,出现了关于python语法的问题,不得不说,python语法真的很严格。


  这个错误的解释是:IndentationError: unexpected indent  python编译器是在告诉你 你的文件格式不对了,需要检查下空格和tab缩进有没有处理好了。

    Python严格地要求代码缩进,缩进的代码块相对于上一级是从属关系。

    用if语句举个例子:

    if a==2: print 'hello world'if语句的条件为真时会执行print语句,print语句是if语句的从属代码块,代表从属关系,print语句之前有4个空格。

    如果if语句没有任何从属的代码块就会报错expected an indented block。与if语句类似的,必须包含从属代码块的还有while、for、try-except等。

    无规矩不成方圆,尽管python语法简单,但基本的格式需要多家注意啊!

猜你喜欢

转载自blog.csdn.net/nerver_77/article/details/79866486