TensorFlow实战1:实现单变量线性回归
2017-11-15 16:55
447 查看
最近在学习TensorFlow,这款由Google开源的深度学习框架在不到两年的时间里取得了巨大的发展,在GitHub上面的活跃度也远超其他深度学习框架。学习TensorFlow对于初学者而言是一个非常不错的选择。下面是我将用TensorFlow实现机器学习算法当中的线性回归的小例子,我所在的运行环境是在jupyter notebook上面进行的,也可以用其他的一些运行环境。
接下来是实现线性回归的步骤和代码:
1、数据准备
实际的数据大家可以通过pandas等package读入,也可以使用自带的Boston House Price数据集,这里为了简单,我们自己手造一点数据集。
上面的代码就通过自己手动的构建了基于正弦函数的100个散点随机数据。下面试运行代码所得的图形:
2、准备好placeholder,开好容器来装数据
3、初始化参数/权重和偏置
4、计算预测结果
5、计算损失函数
6、初始化optimizer
7.指定迭代次数,并在session里执行graph
下面是迭代运行结果:
打印参数值:
画出拟合图形:
下图为运行得出的图形:
由于此例子中用来拟合这些正弦散点图的是只有一个变量的线性直线,故无论将迭代次数增到到多少,都不能较好的拟合,此时反应的是欠拟合现象。
后面一篇文章我会来用多变量线性回归来拟合这些数据。
接下来是实现线性回归的步骤和代码:
1、数据准备
实际的数据大家可以通过pandas等package读入,也可以使用自带的Boston House Price数据集,这里为了简单,我们自己手造一点数据集。
%matplotlib inline #上面一行是将图形嵌入到jupyter notebook中 import numpy as np import tensorflow as tf import matplotlib.pyplot as plt plt.rcParams["figure.figsize"] = (14,8) #作出长14,宽8的图
n_observations = 100 #制作100个点 xs = np.linspace(-3,3,n_observations) #横轴在(-3,3)区间中 ys = np.sin(xs) + np.random.uniform(-0.5,0.5,n_observations) #纵轴在sin()函数中,取[-0.5,0.5)之间的随机值 plt.scatter(xs,ys) #绘制散点图 plt.show()
上面的代码就通过自己手动的构建了基于正弦函数的100个散点随机数据。下面试运行代码所得的图形:
2、准备好placeholder,开好容器来装数据
X = tf.placeholder(tf.float32,name = 'X') Y = tf.placeholder(tf.float32,name = 'Y')
3、初始化参数/权重和偏置
W = tf.Variable(tf.random_normal([1]),name = 'weight') #从正态分布中输出一个值 b = tf.Variable(tf.random_normal([1]),name = 'bias')
4、计算预测结果
y_pred = tf.add(tf.multiply(X,W),b) #X和W相点乘,再加上b
5、计算损失函数
loss = tf.square(Y - y_pred,name = 'loss') #两个向量相减之后求每个点的平方之和
6、初始化optimizer
learning_rate = 0.01 optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss) #最小化损失函数,对于此时的凸函数才能用GD,因为局部最优解就是全局最优解,但是如果不是凸函数,则不能用GD,否则可能会最终停留在局部最优解
7.指定迭代次数,并在session里执行graph
n_samples = xs.shape[0] #取xs的第一维长度,此处即为变量个数 init = tf.global_variables_initializer() #对所有变量进行初始化 with tf.Session() as sess: sess.run(init) writer = tf.summary.FileWriter('./graphs/linear_reg', sess.graph) #将收集的变量写入日志文件 #训练模型 for i in range(50): total_loss = 0 #设定初始的损失值为0 for x,y in zip(xs,ys): #zip:将两个列表中的对应元素分别取一个出来,形成一个元组 #通过feed_dict把数据灌进去 _,l = sess.run([optimizer,loss],feed_dict = {X:x,Y:y}) total_loss += l #将所有损失值相加 if i%5 ==0: print('Epoch {0}: {1}'.format(i, total_loss/n_samples)) #关闭writer writer.close() #取出W和b的值 W,b = sess.run([W,b])
下面是迭代运行结果:
打印参数值:
print(W,b) #获取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()
下图为运行得出的图形:
由于此例子中用来拟合这些正弦散点图的是只有一个变量的线性直线,故无论将迭代次数增到到多少,都不能较好的拟合,此时反应的是欠拟合现象。
后面一篇文章我会来用多变量线性回归来拟合这些数据。
相关文章推荐
- 机器学习实战:单变量线性回归的实现
- 机器学习实战:单变量线性回归的实现
- 机器学习实战:多变量线性回归的实现
- 机器学习实战:多变量线性回归的实现
- tensorflow实战一---基于线性回归简单实现mnist手写体识别
- 机器学习实战:单变量线性回归的实现
- TensorFlow实战13:实现策略网络(强化学习一)
- TensorFlow实战14:实现估值网络(强化学习二)
- 使用循环神经网络实现语言模型——源自《TensorFlow:实战Goole深度学习框架》
- 使用TensorFlow实现简单的线性回归(LinearRegression)
- Tensorflow实战学习(三十五)【实现基于LSTM语言模型】
- TensorFlow实战(二)Tensorflow实现自编码器及多层感知机
- TensorFlow实战之实现AlexNet经典卷积神经网络
- [action] deep learning 深度学习 tensorflow 实战(2) 实现简单神经网络以及随机梯度下降算法S.G.D
- (尤其是训练集验证集的生成)深度学习 tensorflow 实战(2) 实现简单神经网络以及随机梯度下降算法S.G.D
- TensorFlow实战:Chapter-8上(Mask R-CNN介绍与实现)
- Tensorflow实战学习(二十八)【实现简单卷积网络】
- Tensorflow实战学习(三十二)【实现Google Inception Net】
- python实现多变量线性回归(Linear Regression with Multiple Variables)
- 深度学习入门实战(二)-用TensorFlow训练线性回归