编译器环境:win10-Anaconda3-python3.6-tensorflow2.3.0
预测数据下载地址:https://download.csdn.net/download/weixin_41788456/12902246
Tensorflow进行算法设计与训练的核心步骤:
目录
1.准备数据
多变量线性方程可以表达为
总共:506行*13列,其中506为样本数,前12列为样本特征,最后1列为样本标签
%matplotlib inline
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.utils import shuffle
//读取数据
df=pd.read_csv("E:/data/boston.csv",header=0)
print(df)
#获取df的值
df=df.values
#把df转换为np的数组格式
df=np.array(df)
#数据归一化
for i in range(12):
df[:,i]=df[:,i]/(df[:,i].max()-df[:,i].min())
x_data=df[:,0:12]
y_data=df[:,12]
2.构建模型
#定义特征数据和标签数据的占位符
tf.compat.v1.disable_eager_execution()
x=tf.compat.v1.placeholder(tf.float32,[None,12],name="X")#12个特征数据
y=tf.compat.v1.placeholder(tf.float32,[None,1],name="Y")#1个标签数据
print(x)
#定义一个命名空间
with tf.name_scope("model"):
#初始化值为shape=(12,1)的随机数
w=tf.Variable(tf.compat.v1.random_normal([12,1],stddev=0.01),name="W")
#初始化值为1.0
b=tf.Variable(1.0,name="b")
#w和x矩阵相乘,用matmul,mutiply为数乘
def model(x,w,b):
return tf.matmul(x,w)+b
#预测计算操作,前向计算节点
pred=model(x,w,b)
3.模型训练
#迭代次数
train_epochs=50
#学习率
learning_rate=0.01
#定义损失函数
with tf.name_scope("loss_Function"):
loss_function=tf.reduce_mean(tf.pow(y-pred,2))#均方差
#创建优化器
optimizer=tf.compat.v1.train.GradientDescentOptimizer(learning_rate).minimize(loss_function)
#声明会话
sess=tf.compat.v1.Session()
#定义初始化变量的操作
init=tf.compat.v1.global_variables_initializer()
#启动会话
sess.run(init)
loss_list=[]
#迭代训练
for epoch in range(train_epochs):
loss_sum=0.0
for xs,ys in zip(x_data,y_data):
xs=xs.reshape(1,12)
ys=ys.reshape(1,1)
_,loss=sess.run([optimizer,loss_function],feed_dict={x:xs,y:ys})
loss_sum=loss_sum+loss
#打乱数据顺序
xvalues,yvalues=shuffle(x_data,y_data)
b0temp=b.eval(session=sess)
w0temp=w.eval(session=sess)
loss_average=loss_sum/len(y_data)
loss_list.append(loss_average)
print("epoch=",epoch+1,"loss=",loss_average,"b=",b0temp,"w",w0temp)
输出结果:
损失函数收敛图:
4.模型预测
n=np.random.randint(506)
print(n)
x_test=x_data[n]
x_test=x_test.reshape(1,12)
predict=sess.run(pred,feed_dict={x:x_test})
print("预测值:%f"%predict)
target=y_data[n]
print("目标值:%f"%target)
预测结果:
301
预测值:23.178604
目标值:22.000000