• 8.1 mnist_soft,TensorFlow构建回归模型


    背景

    之前已经写了很多TensorFlow的基本知识,现在利用TensorFlow实现一些简单的功能,对原来的知识进行串联,并初步入门,该部分共包括三篇,分别实现的是回归模型,浅层神经网络,KNN。

    TensorFlow构建回归模型

    本代码的构建步骤

    1. 建立公式的计算图
    2. 损失函数与优化器
    3. 加载数据
    4. 启动会话,训练与测试

    建立计算图

    在TensorFlow中构建模型,我们首先需要实现的一个计算图,然后再在Session中运行图,并加载数据,那么首先计算图。

    公式到计算图的转化

    首先假如,我们有公式 e = (a+b) * (b +1)那么我们就可以将其拆解成五个节点

    1. a节点,输入节点
    2. b节点,输入节点
    3. a+b 节点,计算节点,命名为c
    4. b+1 节点,计算节点,命名为d
    5. e = c * d 计算节点,输出节点,节点e

    如图表示就是
    计算图

    回归模型

    同理logits :y = wx+b可以转化为

    
    1.x 输入节点
    2.w 权重
    3.b 偏执
    4. y0 = xw 计算节点
    5. y = y0 + b 计算节点,输出节点

    回归模型的计算图

    如图,这就是我们要实现的计算图,但是在实际的使用过程中却还有两点不同,
    1. 第一我们实现模型实际上已经向量化好了的,这是机器学习的基础,这里不再重复,你可以去网易云课堂学习吴恩达教授的深度学习课程,里面有不错的介绍。
    2. 在TensorFlow中实现该计算图时,是直接一行代码实现的,并没有再构建y0,实际无影响。详细情况请看代码:

    # 定义变量
    x = tf.placeholder(tf.float32, [None, 784])
    W = tf.Variable(tf.zeros([784, 10]))
    b = tf.Variable(tf.zeros([10]))
    # 公式
    y = tf.matmul(x, W) + b

    注意:后面我们使用的时交叉熵回归分类器

    损失函数与优化算法

    损失函数,我们这里使用的是平均值(平均的是交叉熵分类器的损失)
    学习率,设定的为0.5
    优化算法,使用的随机梯度下降

    # Define loss and optimizer
    y_ = tf.placeholder(tf.float32, [None, 10])
    
    cross_entropy = tf.reduce_mean(
      tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y))
    train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)

    因为TensorFlow已经实现了自动求导,所以我们就不需要想之前用其他Python类库写机器学习代码那样在自己编写反向求导了(老铁,这波稳如狗)

    数据的加载

    我们这次使用的时mnist的手写数字数据,你也可以使用其他数据来测试这个回归模型,但是注意修改之前的Tensor 的shape

    mnist = input_data.read_data_sets("/home/fonttian/CODE/TensoFlow/Data/MNIST_data", one_hot=True)
    # 训练数据
    batch_xs, batch_ys = mnist.train.next_batch(100)

    最后初始化定义session,初始化所有节点,开始训练和测试吧

    sess = tf.InteractiveSession()
    tf.global_variables_initializer().run()
    sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
    
    # Test trained model
        correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
        accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
        if (i+1) % 100 == 0:
            print(i+1,":",sess.run(accuracy, feed_dict={x: mnist.test.images,y_: mnist.test.labels}))

    全部代码

    import tensorflow as tf
    import os
    
    from tensorflow.examples.tutorials.mnist import input_data
    
    os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
    
    # Import data
    mnist = input_data.read_data_sets("/home/fonttian/CODE/TensoFlow/Data/MNIST_data", one_hot=True)
    
    # Create the model
    x = tf.placeholder(tf.float32, [None, 784])
    W = tf.Variable(tf.zeros([784, 10]))
    b = tf.Variable(tf.zeros([10]))
    y = tf.matmul(x, W) + b
    
    # Define loss and optimizer
    y_ = tf.placeholder(tf.float32, [None, 10])
    
    cross_entropy = tf.reduce_mean(
      tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y))
    train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
    
    sess = tf.InteractiveSession()
    tf.global_variables_initializer().run()
    # Train
    for i in range(10000):
        batch_xs, batch_ys = mnist.train.next_batch(100)
        sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
    
        # Test trained model
        correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
        accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
        if (i+1) % 100 == 0:
            print(i+1,":",sess.run(accuracy, feed_dict={x: mnist.test.images,y_: mnist.test.labels}))

    参考

    【1】https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/tutorials/mnist/mnist_softmax.py

  • 相关阅读:
    使用 webapi+Aspose.Cells 导出execl 功能
    自定义html滚动条样式
    vue+webapi 实现WebSocket 推送
    vue 跨层级 调用solt 传递
    关于对 asp.net mvc 异步方法的理解
    c# 反射机制
    千里之行,始于足下
    [转]浅析大数据量高并发的数据库优化
    关闭rdlc报表打印预览后,关闭客户端,抛出异常“发生了应用程序级的异常 将退出”
    深拷贝
  • 原文地址:https://www.cnblogs.com/fonttian/p/9162784.html
Copyright © 2020-2023  润新知