import tensorflow as tf
import matplotlib.pylab as plt
import numpy as np
# 调用数据
boston_house = tf.keras.datasets.boston_housing
(train_x, train_y), (test_x, test_y) = boston_house.load_data(test_split=0.1)
room_num = train_x[:, 5] # 房间数
price = train_y # 标记值
w = tf.Variable(np.random.randn()) # 系数W
b = tf.Variable(np.random.randn()) # 偏置b
iter = 1000 # 迭代次数
learn_rate = 0.0001 # 学习率
loss_list = [] # 存放loss值
for i in range(iter):
with tf.GradientTape() as tape:
price_pre = w * room_num + b
loss = pow(tf.reduce_mean(price - price_pre), 2) / 2
dloss_dw, dloss_db = tape.gradient(loss, [w, b]) # 求偏导
w.assign_sub(learn_rate * dloss_dw) # 更新参数w
w.assign_sub(learn_rate * dloss_db)
if i % 100 == 0:
print('i:', i)
print('loss:{},w:{}'.format(loss, w))
loss_list.append(loss)
plt.rcParams["font.family"] = 'SimHei' # 将字体改为中文
plt.rcParams['axes.unicode_minus'] = False # 设置了中文字体默认后,坐标的"-"号无法显示,设置这个参数就可以避免
plt.subplot(221)
plt.plot(loss_list, label='训练集损失值')
plt.legend()
plt.subplot(223)
test_room = test_x[:,5]
pre_y = w * test_room+ b
plt.plot(test_room, pre_y, label='预测线')
plt.scatter(test_room ,test_y,s = 2)
plt.legend()
plt.show()
![]()