#线性回归
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()
loss matplotlib.pyplotas可视化 tensorboard可视化
网友评论