利用python和TensorFlow解决线性回归问题

系统 1504 0

本文主要借鉴并综合了以下两个博客的内容(样本生成和流图构建训练),并在其基础上绘制了拟合后的直线和“训练次数-代价函数值”曲线,可更直观的观察训练效果:

https://www.cnblogs.com/xianhan/p/9090426.html

https://www.cnblogs.com/selenaf/p/9102398.html

具体步骤如下:

步骤1.在很多情况下,初学者都没有样本库,一般可自建样本库。使用random函数随机初始化样本库:

num_points=1000  # 生成的样本数

vectors_set=[] # 初始化样本集,为空

for i in range(num_points):

    x1=np.random.normal(0.0,0.55)   #横坐标,进行随机高斯处理化,以0为均值,以0.55为标准差

    y1=x1*0.1+0.3+np.random.normal(-0.03,0.03)   #纵坐标,数据点在y1=x1*0.1+0.3上小范围浮动

vectors_set.append([x1,y1])

 

# 将样本集分为输入集x_data和输出集y_data

x_data=[v[0] for v in vectors_set]

y_data=[v[1] for v in vectors_set]

 

# 绘制散点图,查看生成样本的分布情况

plt.scatter(x_data,y_data,c='r')

plt.show()

 

步骤2.建立计算流图,包含“假设函数”“代价函数”和“训练函数”。如下,训练函数为梯度下降:

x = tf.placeholder(tf.float32)

W = tf.Variable(tf.zeros([1]))

b = tf.Variable(tf.zeros([1]))

y_ = tf.placeholder(tf.float32)

 

y = W * x + b

 

lost = tf.reduce_mean(tf.square(y_-y)) # 设置代价函数

optimizer = tf.train.GradientDescentOptimizer(0.01)  # 设置梯度下降及其步长0.01

train_step = optimizer.minimize(lost)

 

步骤3.初始化流图,主要是初始化运行环境。如:

sess = tf.Session()

init = tf.global_variables_initializer()

sess.run(init)

 

步骤4.开始训练:向占位符中输入数据,使用sess.run()方法进行训练。如下:

x_plot=[]

y_plot=[]

steps = 2000  # 训练的步数

for i in range(steps):

    xs = x_data

    ys = y_data

    feed = { x: xs, y_: ys }  # 向占位符中输入数据

    sess.run(train_step, feed_dict=feed)

    if i % 50 == 0 :

        print("After %d iteration:" % i)

        # print(xs,ys)

        print("W: %f" % sess.run(W))  # 查看当前训练的W值

        print("b: %f" % sess.run(b))

        print("lost: %f" % sess.run(lost, feed_dict=feed))

        if i>200:

            x_plot.append(i)

            y_plot.append(sess.run(lost, feed_dict=feed))

 

步骤5.绘制“训练次数-代价函数值”曲线,观察训练的收敛趋势。如下:

x_result=[-2,2]

W_result=sess.run(W)

b_result=sess.run(b)

y_result=[]

for x_temp in x_result:  # 如果直接赋值y_result=x_result*W+b,则y_result类型为Tensor,不能直接打印

    y_result.append(x_temp*W_result+b_result)

plt.subplot(1,2,1)

plt.scatter(x_data,y_data,c='r')

plt.plot(x_result,y_result,'-y')

plt.subplot(1,2,2)

plt.plot(x_plot,y_plot,'-')

plt.show()

 

输出结果大致如下:

打印结果(最后一次):

After 1950 iteration:

W: 0.102901

b: 0.270892

lost: 0.000836

利用python和TensorFlow解决线性回归问题_第1张图片


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论