zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    POJ 3253 Fence Repair
    POJ 2431 Expedition
    NYOJ 269 VF
    NYOJ 456 邮票分你一半
    划分数问题 DP
    HDU 1253 胜利大逃亡
    NYOJ 294 Bot Trust
    NYOJ 36 最长公共子序列
    HDU 1555 How many days?
    01背包 (大数据)
  • 原文地址:https://www.cnblogs.com/fonttian/p/7582484.html
Copyright © 2011-2022 走看看