波士顿房价问题的编码实践。
要求:通过梯度下降优化器进行优化,尝试采用不同的学习率和训练轮数等超参数,记录训练后的损失值和W、b变量值。
1.认为最优的一次带运行结果的源代码截图;
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn.utils import shuffle
df=pd.read_csv("boston.csv",header=0)
df=df.values
df=np.array(df)
for i in range(13):
df[:,i]=(df[:,i]-df[:,i]-df[:,i].min())/(df[:,i].max()-df[:,i].min())
x_data=df[:,:12]
y_data=df[:,12]
x=tf.placeholder(tf.float32,[None,12],name="X")
y=tf.placeholder(tf.float32,[None,1],name="Y")
with tf.name_scope("Model"):
w=tf.Variable(tf.random_normal([12,1],stddev=0.01),name="W")
b=tf.Variable(1.0,name="b")
def model(x,w,b):
return tf.matmul(x,w)+b
pre_value=model(x,w,b)
train_epoch=100
learning_rate=0.0001
with tf.name_scope("LossFunction"):
loss_function=tf.reduce_mean(tf.pow(y-pre_value,2))
optimizer=tf.train.GradientDescentOptimizer(learning_rate).minimize(loss_function)
sess=tf.Session()
init=tf.global_variables_initializer()
sess.run(init)
for epoch in range(train_epoch):
loss_sum=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
x_data,y_data=shuffle(x_data,y_data)
b0temp=b.eval(session=sess)
w0temp=w.eval(session=sess)
loss_average=loss_sum/len(y_data)
print("epoch=",epoch+1,"loss=",loss_average,"b=",b0temp,"w=",w0temp)
n=np.random.randint(506)#随机选一个数据做测试
print(n)
x_text=x_data[n]
x_text=x_text.reshape(1,12)
predict=sess.run(pre_value,feed_dict={x:x_text})
print("预测值:%f"%predict)
print("标签值:%f"%y_data[n])



