zoukankan      html  css  js  c++  java
  • 机器学习概念_3

    基于tensorflow搭建的神经网络(Netural Network, NN)模型

    一、实现过程

    • 准备数据集,提取特征,输入NN
    • 搭建NN结构,从输入到输出(前向传播:先搭建计算图,再用会话执行)
    • 大量特征输入NN,迭代优化NN参数(反向传播:优化参数)
    • 使用训练好的模型预测和分类

    二、张量(tensor)

    • tf.constant:常量Tensor
    • tf.Variable:变量Tensor
    • tf.matmul 矩阵乘矩阵
    • tf.multiply 矩阵中的对应元素各自相乘
    • tf.truncated_normal(list, stddev, mean, seed) 去掉过大偏离点正态分布,stddev标准差,mean均值,seed随机种子
    • tf.random_normal(list, stddev, mean, seed) 正态分布
    • tf.random_uniform(list, stddev, mean, seed) 平均分布
    • tf.zeros 全0数组
    • tf.ones 全1数组
    • tf.fill 全定值数组
    名称 exp
    0 0 标量scalar s = 123
    1 1 向量vector v = [1,2,3]
    2 2 矩阵matrix m = [[1,2,3],[4,5,6]]
    n n 张量tensor t = [[[[....
    import tensorflow as tf
    
    # tensor 常量
    a = tf.constant([1.0, 2.0])
    b = tf.constant([3.0, 4.0])
    
    result = a + b
    # Tensor("add:0", shape=(2,), dtype=float32)
    # add:节点名称
    # 0:第0个输出
    # shape=(2, ) 1维数组,长度2(list元素个数)
    # dtype:数据类型
    print(result)

    会话tf.Session():变量初始化、计算图节点运算都要使用会话

    with tf.Session() as sess:
        sess.run(X)  # X表示变量初始化或者节点运算

    初始化所有变量

    init_op = tf.global_variables_initializer()
    with tf.Session() as sess:
        sess.run(init_op)  

    用tf.placeholder占位,在sess.run()函数中使用feed_dict={}喂给数据

    # 1组数据
    x = tf.placeholder(tf.float32, shape=(1,2)) # 1代表数据的数量:1list,2代表list的元素个数
    with tf.Session() as sess:
        sess.run(y, feed_dict={[[0.5, 0.6]]})
    
    # 多组数据
    x = tf.placeholder(tf.float32, shape=(None,2))
    with tf.Session() as sess:
        sess.run(y, feed_dict={[[0.1,0.2],[0.3,0.4][0.5, 0.6]]})
    # 两层简单的神经网络(全连接)
    import tensorflow as tf
    
    # 定义输入和参数(权重)
    
    x = tf.constant([[0.7, 0.5]])
    w1 = tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))
    w2 = tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1))
    
    # 定义前向传播过程
    
    a = tf.matmul(x, w1)
    y = tf.matmul(a, w2)
    
    # 会话计算节点
    with tf.Session() as sess:
        init_op = tf.global_variables_initializer()
        sess.run(init_op)
        print(sess.run(y))
    # 两层简单的神经网络(全连接)
    import tensorflow as tf
    
    # 定义输入和参数(权重)
    # 用placeholder实现输入定义:1组数据
    
    x = tf.placeholder(tf.float32, shape=(1, 2))
    w1 = tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))
    w2 = tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1))
    
    # 定义前向传播过程
    
    a = tf.matmul(x, w1)
    y = tf.matmul(a, w2)
    
    # 会话计算节点
    with tf.Session() as sess:
        init_op = tf.global_variables_initializer()
        sess.run(init_op)
        print(sess.run(y, feed_dict={x: [[0.7, 0.5]]}))
    # 两层简单的神经网络(全连接)
    import tensorflow as tf
    
    # 定义输入和参数(权重)
    # 用placeholder实现输入定义:多组数据
    
    x = tf.placeholder(tf.float32, shape=(None, 2))
    w1 = tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))
    w2 = tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1))
    
    # 定义前向传播过程
    
    a = tf.matmul(x, w1)
    y = tf.matmul(a, w2)
    
    # 会话计算节点
    with tf.Session() as sess:
        init_op = tf.global_variables_initializer()
        sess.run(init_op)
        print(sess.run(y, feed_dict={x: [[0.7, 0.5], [0.2, 0.3], [0.3, 0.4], [0.4, 0.5]]}))

    反向传播

    训练模型参数,在梯度下降使NN模型在训练数据上的损失函数最小

    损失函数(loss):预测值y和已知值y_的差距

    均方误差MSE:   MSE(y_, y) = 

            loss = tf.reduce_mean(tf.squre(y_-y))

    反向传播训练方法,以减小loss值位位优化目标

    反向传播优化器Optimizer:

    train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss) 梯度下降优化器

    train_step = tf.train.MomentumOptimizer(learning_rate).minimize(loss) 

    train_step = tf.train.AdamOptimizer(learning_rate).minimize(loss)

    learning_rate(学习率):决定参数每次更新的幅度

  • 相关阅读:
    浅谈样式表QSS的应用
    从一个笑话看软件开发管理(转帖)
    项目的大小衡量标准,项目架构的方法(填空架子,持续集成,边开发边测试效果)(装贴)
    做项目过程一点心得
    什么时候该写函数,什么时候该写类。
    QWidget属性,函数的学习
    Qt 中一些常用类中文说明
    swing应用中如何保存一个全局变量
    Implicit Linking与Explicit Linking
    qt中设置菜单高度
  • 原文地址:https://www.cnblogs.com/jp-mao/p/10147088.html
Copyright © 2011-2022 走看看