zoukankan      html  css  js  c++  java
  • 使用Tensoflow实现梯度下降算法的一次线性拟合

    # Author Qian Chenglong
    import tensorflow as tf
    import  numpy as np
    
    #生成100个随机数据点
    x_date=np.random.rand(100)
    y_date=x_date*0.1+0.2
    
    #构造一个线性模型
    k=tf.Variable(0.)
    b=tf.Variable(0.)
    y=k*x_date+b
    
    # 二次代价函数
    loss=tf.reduce_mean(tf.square(y-y_date))#最小二乘
    
    my_optimizer=tf.train.GradientDescentOptimizer(0.2)#定义一个使用梯度下降算法的训练器
    train=my_optimizer.minimize(loss)#训练目标loss最小
    
    init=tf.global_variables_initializer()#初始化变量
    
    with tf.Session() as sess:
      sess.run(init)
      for step in range(201):
        sess.run(train)
        if step%20==0:
            print(step, '[k,b]:', sess.run([k, b]))

     API说明:

    np.random.rand(100)生成100个0~1之间的随机数

    tf.square():计算元素的平方

    tf.reduce_mean(input_tensor, axis=None, keep_dims=False, name=None, reduction_indices=None)

    计算张量的各个维度上的元素的平均值。

    axis是tf.reduce_mean函数中的参数,按照函数中axis给定的维度减少input_tensor。除非keep_dims是true,否则张量的秩将在axis的每个条目中减少1。如果keep_dims为true,则缩小的维度将保留为1。 如果axis没有条目,则减少所有维度,并返回具有单个元素的张量。

    参数:

    • input_tensor:要减少的张量。应该有数字类型。
    • axis:要减小的尺寸。如果为None(默认),则减少所有维度。必须在[-rank(input_tensor), rank(input_tensor))范围内。
    • keep_dims:如果为true,则保留长度为1的缩小尺寸。
    • name:操作的名称(可选)。
    • reduction_indices:axis的不支持使用的名称。
    tf.Variable(initializer, name):initializer是初始化参数,可以有tf.random_normal,tf.constant,tf.constant等,name就是变量的名字,用法如下:
    a1 = tf.Variable(tf.random_normal(shape=[2,3], mean=0, stddev=1), name='a1')
    a2 = tf.Variable(tf.constant(1), name='a2')
    a3 = tf.Variable(tf.ones(shape=[2,3]), name='a3')
    !

    运行session.run()可以:

    1. 获得你要得到的运算结果;
    2. 你所要运算的部分;
     
    #qiancl 666
    import tensorflow as tf
    import numpy as np
    #学习率
    learning_rate=0.01
    #最大训练步数
    max_train_step=1000
    #np.array()矩阵
    train_X_date=np.array([[3.3],[4.4],[5.5],[6.71],[6.93],[4.168],[9.779],[6.182],[7.59],[2.167],
                           [7.042],[10.791],[5.313],[7.997],[5.654],[9.27],[3.1]],dtype=np.float32)
    train_Y_date=np.array([[1.7],[2.76],[2.09],[3.19],[1.694],[1.573],[3.366],[2.596],[2.53],[1.221],
                           [2.827],[3.465],[1.65],[2.904],[2.42],[2.94],[1.3]],dtype=np.float32)
    #样本个数
    tolal_samples=train_X_date.shape[0]
    #输入数据占位
    x=tf.placeholder(tf.float32,[None,1])
    y_=tf.placeholder(tf.float32,[None,1])
    #tf.random_normal([1,1])生成【1,1】的符合正态分布的随机数
    w=tf.Variable(tf.random_normal([1,1]),name="weight")
    b=tf.Variable(tf.zeros([1]),name="bias")
    y=tf.matmul(x,w)+b
    loss=tf.reduce_sum(tf.pow(y-y_,2))/tolal_samples
    
    #创建优化器
    optimizer=tf.train.GradientDescentOptimizer(learning_rate)
    
    #训练目标
    train_op=optimizer.minimize(loss)
    
    #训练
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        print("开始训练")
        for step in range(max_train_step):
            sess.run(train_op, feed_dict={x: train_X_date, y_: train_Y_date})
            if step % 100 == 0:
                c = sess.run(loss, feed_dict={x: train_Y_date, y_: train_Y_date})
                print("Step:%d, loss==%0.4f, w==%0.4f, b==%0.4f" % (step, c, sess.run(w), sess.run(b)))
  • 相关阅读:
    Android 事件
    Android Menu
    Android ActionBar
    Android 布局
    so打包进APK
    android如何与服务器交互?
    如何检测单个APP的耗电量
    求大神给解决下,向已有的xml文件写入数据,但不覆盖文件存在的内容
    关于findViewById返回空指针的错误
    android客户端向服务器发送图片和文字,类似于发微博。能用json格式发送吗?
  • 原文地址:https://www.cnblogs.com/long5683/p/10045957.html
Copyright © 2011-2022 走看看