zoukankan      html  css  js  c++  java
  • tensorflow例子-【老鱼学tensorflow】

    本节主要用一个例子来讲述一下基本的tensorflow用法。

    在这个例子中,我们首先伪造一些线性数据点,其实这些数据中本身就隐藏了一些规律,但我们假装不知道是什么规律,然后想通过神经网络来揭示这个规律。

    伪造数据

    import numpy as np
    # 创建100个随机数
    x_data = np.random.rand(100).astype(np.float32)
    # 创建最终要模拟的线性公式
    y_data = x_data * 0.1 + 0.3
    

    创建模型

    在伪造数据之后,我们当作不知道这些数据中蕴含的规律,我们只看到有一堆(x, y)的数据,但其中是什么规律我们不知道,但想通过神经网络的方式来揭示其中的规律。
    我们觉得这个规律是线性规律,因此需要有权重值和偏置值,并且先随便设置一下其初始值:

    import tensorflow as tf
    
    # tensorflow中的变量系数,1维的初始化为从-1到1之间的一个随机数
    Weights = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
    # 偏置,其实就是线性方程中的截距值,1维数据,初始化为0
    biases = tf.Variable(tf.zeros([1]))
    
    # 在tensorflow中就是根据看到的数值,通过逼近的方式来寻找出数值的规律,最终会把这里的Weights值和biases值设置成接近原始数据中的参数值。
    y = Weights * x_data + biases
    
    # 计算损失值为预测值和实际值之差平方和的平均值,损失值越小就表示越接近实际值
    loss = tf.reduce_mean(tf.square(y - y_data))
    
    # 神经网络要做的就是通过不停地迭代使这个损失值越来越小,而计算越来越小的方法是通过梯度下降算法来实现的
    optimizer = tf.train.GradientDescentOptimizer(0.5)
    
    train = optimizer.minimize(loss)
    

    上面创建了基本的模型,然后需要开始要启动这个模型了,在启动之前,由于我们创建了几个变量,但只是通知TensorFlow说我们拥有这些变量值,但还未进行实际的赋值,要进行实际的赋值,需要通过:

    # 初始化所有变量
    init = tf.global_variables_initializer()
    sess = tf.Session()
    # 激活初始化值
    sess.run(init)
    

    不停拟合数据

    我们可以通过不停给模型数据,让这个模型逐步降低损失值来达到最能拟合输入值的系数:

    for step in range(200):
        sess.run(train)
        # 每隔20步打印一下模拟出来的权重值和偏置值
        if (step % 20 == 0):
            print(step, sess.run(Weights), sess.run(biases))
    
    

    输出为:

    0 [ 0.3676317] [ 0.21848023]
    20 [ 0.16707394] [ 0.26867095]
    40 [ 0.11792699] [ 0.29162663]
    60 [ 0.10479139] [ 0.29776204]
    80 [ 0.1012806] [ 0.29940188]
    100 [ 0.10034226] [ 0.29984015]
    120 [ 0.10009148] [ 0.29995728]
    140 [ 0.10002445] [ 0.2999886]
    160 [ 0.10000654] [ 0.29999697]
    180 [ 0.10000175] [ 0.29999918]
    
    

    从输出结果上来看权重值比较接近于我们原先进行伪造的系数值0.1,而偏置值也比较接近我们伪造的截距值0.3,看来神经网络很好地从一堆数据中揭示了我们预先设置好的规律值。

    完整的代码为:

    import tensorflow as tf
    import numpy as np
    # 创建100个随机数
    x_data = np.random.rand(100).astype(np.float32)
    # 创建最终要模拟的线性公式
    y_data = x_data * 0.1 + 0.3
    
    # tensorflow中的变量系数,1维的初始化为从-1到1之间的一个随机数
    Weights = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
    # 偏置,其实就是线性方程中的截距值,1维数据,初始化为0
    biases = tf.Variable(tf.zeros([1]))
    
    # 在tensorflow中就是根据看到的数值,通过逼近的方式来寻找出数值的规律,最终会把这里的Weights值和biases值设置成接近原始数据中的参数值。
    y = Weights * x_data + biases
    
    # 计算损失值为预测值和实际值之差平方和的平均值,损失值越小就表示越接近实际值
    loss = tf.reduce_mean(tf.square(y - y_data))
    
    # 神经网络要做的就是通过不停地迭代使这个损失值越来越小,而计算越来越小的方法是通过梯度下降算法来实现的
    optimizer = tf.train.GradientDescentOptimizer(0.5)
    
    train = optimizer.minimize(loss)
    
    # 初始化所有变量
    init = tf.global_variables_initializer()
    sess = tf.Session()
    # 激活初始化值
    sess.run(init)
    
    for step in range(200):
        sess.run(train)
        # 每隔20步打印一下模拟出来的权重值和偏置值
        if (step % 20 == 0):
            print(step, sess.run(Weights), sess.run(biases))
    
    
    
  • 相关阅读:
    程序员应该看的书
    linux下grep命令详解
    apache基本配置
    shell脚本从windows下发送到linux下运行失败的问题
    nginx服务器的安装和配置基础
    linux下ps命令用法
    apache的python部署
    《我刀刻我心——关羽往事》新书发布会在京举行
    C++图书中的王者
    C++应用程序性能优化
  • 原文地址:https://www.cnblogs.com/dreampursuer/p/8000322.html
Copyright © 2011-2022 走看看