对于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的值。它们是定义的占位符。必须传入值。