tensorflow 实现多元线性回归(tensorflow1.4.0)

线性回归的原理,可以参考其他博客,这里主要贴一下代码,记录一下遇到的问题。


import tensorflow as tf
import numpy as np
#生成一千个点
x_data=np.random.random([1000,3])

#系数矩阵的shape必须是(3,1)。如果是(3,)会导致收敛效果差,猜测可能是y-y_label处形状不匹配
y_data=np.matmul(x_data,[[2],[3],[2]])+[1.]


x=tf.placeholder(tf.float32,[None,3])
y=tf.placeholder(tf.float32,[None,1])


weight=tf.Variable(tf.random_normal([3,1]),dtype=tf.float32)

#tf.ones[1,1],也可以写成tf.ones[1],这样相当于标量,标量可以直接与矩阵相加
bias=tf.Variable(tf.ones([1]),dtype=tf.float32)


y_label=tf.add(tf.matmul(x,weight),bias)
loss=tf.reduce_mean(tf.square(y-y_label))
train=tf.train.GradientDescentOptimizer(0.2).minimize(loss)


with tf.Session() as sess:
    #变量初始化,目的是给Graph上的图中的变量初始化。
    sess.run(tf.global_variables_initializer())
    for i in range(1000):
        
        sess.run(train,feed_dict={x:x_data,y:y_data})
        if(i%100==0):
            print(sess.run(loss,feed_dict={x:x_data,y:y_data}))
            #print(sess.run(y_label,feed_dict={x:x_data,y:y_data}))
    print(sess.run(weight),sess.run(bias))

主要犯的错误:

1:sess.run(tf.global_variables_initializer())写在了for循环里面,每次训练更新的变量,又被初始化,导致训练无效。

2:其次遇到的问题是在对y_data初始化的时候,

_data=np.matmul(x_data,[2,3,2])+1.

会导致y_data的形状为(1000,),这样与y_label的shape不一致,训练无法收敛。所以需要将权值改成向量的形式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值