TensorFlow-多项式回归模型

# -*- coding: utf-8 -*-
"""
Created on Tue Mar  6 11:49:52 2018

@author: 李慧泽
"""
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"]=(14,8)#可视化的时候设置的长和宽
n_observations=100#样本点的个数
xs=np.linspace(-3,3, n_observations)#在-3与3之间取得100个数。
ys=np.sin(xs)+np.random.uniform(-0.5,0.5, n_observations)#sin函数并加一些噪声。
plt.scatter(xs,ys)#绘图
plt.show()
X=tf.placeholder(tf.float32,name="X")
Y=tf.placeholder(tf.float32,name="Y")
#初始化参数和权重
W=tf.Variable(tf.random_normal([1]),name="weight")
b=tf.Variable(tf.random_normal([1]),name="bias")
#计算预测结果
Y_pred=tf.add(tf.multiply(X,W),b)
W_2=tf.Variable(tf.random_normal([1]),name="weight_2")
Y_pred=tf.add(tf.multiply(tf.pow(X,2),W_2),Y_pred)
W_3=tf.Variable(tf.random_normal([1]),name='weight_3')
Y_pred=tf.add(tf.multiply(tf.pow(X,3),W_3),Y_pred)
#计算损失函数值
sample_num=xs.shape[0]
loss=tf.reduce_sum(tf.pow(Y_pred-Y,2))/sample_num
#初始化optimizer
learning_rate=0.01
optimizer=tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)
#指定迭代次数,在session里执行graph
n_samples=xs.shape[0]
with  tf.Session()  as  sess:
     #初始化所有变量
     sess.run(tf.global_variables_initializer()) 
     writer=tf.summary.FileWriter('.graphs/polynomial_reg',sess.graph)
     #训练模型
     for  i  in range(1000):
         total_loss=0
         for  x,y  in zip(xs,ys):
            #通过feed_dict把数据装进去, optimizer和loss为两个节点,但是我只要loss的输出结果.
             o,l=sess.run([optimizer,loss],feed_dict={X:x,Y:y})  
            #计算所有样本的损失
             total_loss+=l
       #每隔五次打印一次
         if (i%20==0):
             print("Epoch{0}:{1}".format(i , total_loss/ n_samples))
     writer.close()
     W,W_2,W_3,b=sess.run([W,W_2,W_3,b])
print('W:'+str(W[0]))
print('W_2'+str(W_2[0]))
print('W_3'+str(W_3[0]))
print('b:'+str(b[0]))
plt.plot(xs,ys,'bo',label='Real data')
plt.plot(xs,xs*W+np.power(xs,2)*W_2+np.power(xs,3)*W_3+b,'r',label='Predicted data')
plt.legend()
plt.show()

猜你喜欢

转载自blog.csdn.net/qq_41424519/article/details/81741001