人工智能:基于TensorFlow实现线性回归

通过生成人工数据集合,基于TensorFlow实现y=3.1234*x+2.98线性回归。通过上传附件方式提交 notebook文件(.ipynb)
评分标准:

1、生成 x_data,值为 [0, 100]之间500个等差数列数据集合作为样本特征,根据目标线性方程 y=3.1234*x+2.98,生成相应的标签集合 y_data,1分;(思路:通过线性变换将[0,100]之间的数转换为区间[-1,1],类似于归一化和机器学习中的sigmod函数,这样就不用调整振幅和学习率了)

2、画出随机生成数据的散点图和想要通过学习得到的目标线性函数 y=3.1234*x+2.98,1分;(散点图函数scatter与matlab中的相似)

3、构建回归模型,3分;

4、训练模型,10轮,每训练20个样本显示损失值,2分;(训练迭代,相似于遗传算法)

5、通过训练出的模型预测 x=5.79 时 y 的值,并显示根据目标方程显示的 y 值,1分;(预测估计值)

6、通过Tensorboard显示构建的计算图。(输入localhost的IP显示)
上传的源代码中有相应的源代码结果计算图截图可以嵌入上交的notebook文件(.ipynb)。2分。

%matplotlib inline
import matplotlib.pyplot as plt   #载入matplotlib库
import numpy as np    #载入numpy
import tensorflow.compat.v1 as tf
from IPython.display import Image

tf.disable_v2_behavior()

#清除default_graph和不断增加的节点
tf.reset_default_graph()

#路径
logdir = "D:/log"



#import tensorflow as tf     #载入tensorflow,tensorflow2.0不支持placeholder
np.random.seed(5)   #设置伪随机种子,种子相同每次生成的随机序列也相同

# 区间变换,[0,100]化为[-1,1]
def Convert(data,Min,Max,size):
    # data:需要变换的数据或矩阵
    # Min:最小值        
    # Max:最大值
    #size:样本个数
    data = np.array(data)
    Size = size
    w = -2/(Min - Max)
    b = (Min + Max)/(Min - Max)
    for i in range(Size):
            data[i] = data[i]*w + b
    return data



#生成 x_data,值为 [0, 100]之间500个等差数列数据集合作为样本特征
x_data = np.linspace(0,100,500)
x_data = Convert(x_data,0,100,500)


#根据目标线性方程 y=3.1234*x+2.98,生成相应的标签集合 y_data,噪声最大振幅0.4
y_data = 3.1234 * x_data + 2.98 + np.random.randn(*x_data.shape) *0.4

#画出随机生成数据的散点图
plt.scatter(x_data,y_data)

#画出通过学习得到的目标线性函数 y=3.1234*x+2.98
plt.plot(x_data,3.1234 * x_data + 2.98,color = "red", linewidth = 2)

#定义数据的占位符,x为特征值,y为标签值
x = tf.placeholder("float", name = "x")
y = tf.placeholder("float",name ="y")

#定义模型函数
def model(x,w,b):
    return tf.multiply(x,w) + b

#定义模型结构:

#构建线性函数的斜率,变量w
w = tf.Variable(1.0,name="w0")
#构建线性函数的截距,变量b
b = tf.Variable(0.0,name="b0")

#pred是预测值,前向计算
pred = model(x,w,b)

#设置训练参数10轮,每训练20个样本显示损失值
train_epochs = 10
step = 0
display_step = 20   #显示的步数
loss_list = []   #初始化空列表,用于保存损失值

learning_rate = 0.05   #学习率

#采用均方差作为损失函数
loss_function = tf.reduce_mean(tf.square(y-pred))

#梯度下降优化器
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_epochs):
    for xs,ys in zip(x_data,y_data):
        _,loss = sess.run([optimizer,loss_function],feed_dict = {x:xs , y:ys})
        loss_list.append(loss)     #将损失函数值增加到列表末端
        step += 1     #步长加1
        
        
        
        if step % display_step == 0:
            print("Train Epoch:{0:d}  Step:{1:d}  loss:{2:.9f}".format(epoch+1,step,loss))
            
    b0temp = b.eval(session = sess)
    w0temp = w.eval(session = sess)
    plt.plot(x_data,w0temp*x_data +b0temp)    #画预测图
    
print("w:",sess.run(w))
print("b:",sess.run(b))


#通过训练出的模型预测 x=5.79 时 y 的值
x_test = 5.79

predict = sess.run(pred,feed_dict={x:x_test})
print("预测值:{:.9f}".format(predict))

target = 3.1234 * x_test + 2.98 
print("目标值:{:.9f}".format(target))


#生成一个写日志的writer,并将当前的tensorflow计算图写入日志
writer = tf.summary.FileWriter(logdir,tf.get_default_graph())
writer.close()
Image(filename = 'D:\\Photo\\结果图.png', width=320, height=240)   #插入图片

在这里插入图片描述

参考:中国大学MOOC官方课程《深度学习应用开发-TensorFlow实践》吴明晖、李卓蓉、金苍宏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值