使用tf简单的线性预测

对于y=k*x+b,通过输入x,y的数据训练,从而获得k,b预估值。

一.安装tf

pip install tensorflow

二 写代码

代码如下

import tensorflow as tf
import numpy as np

class ml():
    
    def __init__(self):
        self.step=100
        self.times=100000
        #定义x序列值,x不能用矩阵值,矩阵相乘,越乘越大
        self.x_data=np.arange(1,19)
        
        #定义y序列值
        self.y_data=self.x_data*10+5
        self.sess=tf.Session()
    
    
    def train(self):
        
        x=tf.placeholder(tf.float32,name='x')
        y=tf.placeholder(tf.float32,name='y')
        
        weight=tf.Variable([1.0],tf.float32)
        biases=tf.Variable([1.],tf.float32)
#         print(x)
#         print(weight)
        train_step=tf.multiply(x,weight)+biases
        
        loss=tf.reduce_mean(tf.square(train_step-y))
#         loss=tf.reduce_sum(tf.abs(train_step-y))
        
        train=tf.train.GradientDescentOptimizer(0.001).minimize(loss)
        
        init=tf.global_variables_initializer()
        
        self.sess.run(init)
        
        for _ in range(self.times):
            self.sess.run(train,feed_dict={x:self.x_data,y:self.y_data})
             
            if _%self.step==0:
                print('本次训练结果')
                print(self.sess.run(weight,feed_dict={x:self.x_data,y:self.y_data}))
                print(self.sess.run(biases,feed_dict={x:self.x_data,y:self.y_data}))
#                 print(self.sess.run(train_step,feed_dict={x:self.x_data,y:self.y_data}))

        
        
        
if __name__=='__main__':
    obj=ml()
    obj.train()

self.step代表每个多少次打印出训练值, self.times总训练次数,self.x_data传入的x的值,self.y_data传入的y值, self.sess为tf的识图,tf的值必须使用session打印出,如果直接用print(tf定义值)只能打印出形状,不能获得值。 x=tf.placeholder(tf.float32,name=‘x’),y=tf.placeholder(tf.float32,name=‘y’),定义两个占位符,一个是x,另一个是y,
weight=tf.Variable([1.0],tf.float32),biases=tf.Variable([1.],tf.float32),定义两个变量,用于存储k,b。train_step=tf.multiply(x,weight)+biases选取相应的函数。这里选用的是tf.multiply即为相乘。 loss=tf.reduce_mean(tf.square(train_step-y)), loss=tf.reduce_sum(tf.abs(train_step-y))真实值和训练值相差,tf.square和tf.abs,都可以,只要保证reduce_sum里面的值是大于零都行,但真实值准确度两者,有差距,train=tf.train.GradientDescentOptimizer(0.001).minimize(loss)优化器,每次优化0.001,太大也不行。 init=tf.global_variables_initializer(),self.sess.run(init)初始化所有变量,否则是会报错错误如下FailedPreconditionError (see above for traceback): Attempting to use uninitialized value Variable试图使用一个未初始化值变量。self.sess.run(train,feed_dict={x:self.x_data,y:self.y_data}),执行训练,feed_dict是传入的x,y的值。它们是定义的占位符。必须传入值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值