2018-03-17 (线性回归)

#线性回归

import numpyas np

import  tensorflowas tf

import matplotlib.pyplotas plt#绘图库

plt.rcParams["figure.figsize"] = (14,8)#设置画布的长宽为14,8

#加载数据  实际的数据可以通过pandas读入

n_observations =100 #产生的点的个数为100个

xs = np.linspace(-3, 3, n_observations)#随机产生x值,取值区间为【-3,3】

ys = np.sin(xs) + np.random.uniform(-0.5, 0.5, n_observations)#y值为sin(x)加上正负0.5的随机扰动

plt.scatter(xs, ys)#绘制图

plt.show()#显示图

#准备好placeholder(占位符),容器

X=tf.placeholder(tf.float32,name='X')

Y=tf.placeholder(tf.float32,name='Y')

#初始化权重和偏置

W=tf.Variable(tf.random_normal([1]),name='Weight')

b=tf.Variable(tf.random_normal([1]),name='bias')

#计算预测结果

Y_pred=tf.add(tf.multiply(X,W),b)

#计算损失函数的值

loss=tf.square(Y-Y_pred,name='loss')

#初始化optimizer(优化器)

learning_rate=0.01

optimizer=tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)

#指定迭代的次数,并在session中执行graph

n_samples = xs.shape[0]#样本的数量

with tf.Session()as sess:

sess.run(tf.global_variables_initializer())#初始化所有变量

    writer = tf.summary.FileWriter('./graphs/linear_reg', sess.graph)#将graph(图)写入到本地日志

#训练模型

    for iin range(50):#训练50次

        total_loss =0

        for x,yin zip(xs,ys):

_,l=sess.run([optimizer,loss],feed_dict={X:x,Y:y})

total_loss+=l #所有的损失

        if i%5==0:#每隔5轮输出一下平均的loss

            print('Epoch {0}: {1}'.format(i,total_loss/n_samples))

writer.close()#关闭writer

    W,b=sess.run([W,b])

print(W,b)

print('W:'+str(W[0]))

print("b:"+str(b[0]))

#可视化

plt.plot(xs,ys,'bo',label='Real_data')

plt.plot(xs,xs*W+b,'r',label='Predicted data')

plt.legend()

plt.show()



2018-03-17 (线性回归)_第1张图片
loss


2018-03-17 (线性回归)_第2张图片
matplotlib.pyplotas可视化


2018-03-17 (线性回归)_第3张图片
tensorboard可视化

你可能感兴趣的:(2018-03-17 (线性回归))