TensorFlow - 线性回归-云服务器玩法在线实验

[复制链接]
查看: 532|回复: 0

9

主题

9

帖子

39

积分

新手上路

Rank: 1

积分
39
发表于 2020-12-28 10:05:09 | 显示全部楼层 |阅读模式
实验内容

TensorFlow是由Google开发的用于数值计算的开源软件库,本实验使用 TensorFlow 实现简单的的线性回归模型。

免费在线实验地址:点击进入

实验资源:云服务器,没有云服务器的朋友推荐1折抢购:69元/年的阿里云服务器或者88元/年的腾讯云服务器

软件环境Ubuntu 14.04 64 位




1、
TensorFlow 实现线性回归模型代码

前期准备
TensorFlow 相关 API 可以到在实验TensorFlow - 相关 API中学习。
模型构建
示例代码:
现在您可以在 /home/ubuntu 目录下创建源文件 linear_regression_model.py,内容可参考:
示例代码:/home/ubuntu/linear_regression_model.py
  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*
  3. import tensorflow as tf
  4. import numpy as np

  5. class linearRegressionModel:

  6.   def __init__(self,x_dimen):
  7.     self.x_dimen = x_dimen
  8.     self._index_in_epoch = 0
  9.     self.constructModel()
  10.     self.sess = tf.Session()
  11.     self.sess.run(tf.global_variables_initializer())

  12.   #权重初始化
  13.   def weight_variable(self,shape):
  14.     initial = tf.truncated_normal(shape,stddev = 0.1)
  15.     return tf.Variable(initial)

  16.   #偏置项初始化
  17.   def bias_variable(self,shape):
  18.     initial = tf.constant(0.1,shape = shape)
  19.     return tf.Variable(initial)

  20.   #每次选取100个样本,如果选完,重新打乱
  21.   def next_batch(self,batch_size):
  22.     start = self._index_in_epoch
  23.     self._index_in_epoch += batch_size
  24.     if self._index_in_epoch > self._num_datas:
  25.         perm = np.arange(self._num_datas)
  26.         np.random.shuffle(perm)
  27.         self._datas = self._datas[perm]
  28.         self._labels = self._labels[perm]
  29.         start = 0
  30.         self._index_in_epoch = batch_size
  31.         assert batch_size <= self._num_datas
  32.     end = self._index_in_epoch
  33.     return self._datas[start:end],self._labels[start:end]

  34.   def constructModel(self):
  35.     self.x = tf.placeholder(tf.float32, [None,self.x_dimen])
  36.     self.y = tf.placeholder(tf.float32,[None,1])
  37.     self.w = self.weight_variable([self.x_dimen,1])
  38.     self.b = self.bias_variable([1])
  39.     self.y_prec = tf.nn.bias_add(tf.matmul(self.x, self.w), self.b)

  40.     mse = tf.reduce_mean(tf.squared_difference(self.y_prec, self.y))
  41.     l2 = tf.reduce_mean(tf.square(self.w))
  42.     self.loss = mse + 0.15*l2
  43.     self.train_step = tf.train.AdamOptimizer(0.1).minimize(self.loss)

  44.   def train(self,x_train,y_train,x_test,y_test):
  45.     self._datas = x_train
  46.     self._labels = y_train
  47.     self._num_datas = x_train.shape[0]
  48.     for i in range(5000):
  49.         batch = self.next_batch(100)
  50.         self.sess.run(self.train_step,feed_dict={self.x:batch[0],self.y:batch[1]})
  51.         if i%10 == 0:
  52.             train_loss = self.sess.run(self.loss,feed_dict={self.x:batch[0],self.y:batch[1]})
  53.             print('step %d,test_loss %f' % (i,train_loss))

  54.   def predict_batch(self,arr,batch_size):
  55.     for i in range(0,len(arr),batch_size):
  56.         yield arr[i:i + batch_size]

  57.   def predict(self, x_predict):
  58.     pred_list = []
  59.     for x_test_batch in self.predict_batch(x_predict,100):
  60.       pred = self.sess.run(self.y_prec, {self.x:x_test_batch})
  61.       pred_list.append(pred)
  62.     return np.vstack(pred_list)
复制代码
训练模型并和 sklearn 库线性回归模型对比示例代码:
现在您可以在 /home/ubuntu 目录下创建源文件 run.py,内容可参考:
示例代码:/home/ubuntu/run.py
  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*

  3. from sklearn.model_selection import train_test_split
  4. from sklearn.metrics import r2_score
  5. from sklearn.datasets import make_regression
  6. from sklearn.linear_model import LinearRegression
  7. from linear_regression_model import linearRegressionModel as lrm

  8. if __name__ == '__main__':
  9.     x, y = make_regression(7000)
  10.     x_train,x_test,y_train, y_test = train_test_split(x, y, test_size=0.5)
  11.     y_lrm_train = y_train.reshape(-1, 1)
  12.     y_lrm_test = y_test.reshape(-1, 1)

  13.     linear = lrm(x.shape[1])
  14.     linear.train(x_train, y_lrm_train,x_test,y_lrm_test)
  15.     y_predict = linear.predict(x_test)
  16.     print("Tensorflow R2: ", r2_score(y_predict.ravel(), y_lrm_test.ravel()))

  17.     lr = LinearRegression()
  18.     y_predict = lr.fit(x_train, y_train).predict(x_test)
  19.     print("Sklearn R2: ", r2_score(y_predict, y_test)) #采用r2_score评分函数
复制代码
然后执行:

  1. cd /home/ubuntu;
  2. python run.py
复制代码
执行结果:
  1. step 2410,test_loss 26.531937
  2. step 2420,test_loss 26.542793
  3. step 2430,test_loss 26.533974
  4. step 2440,test_loss 26.530540
  5. step 2450,test_loss 26.551474
  6. step 2460,test_loss 26.541542
  7. step 2470,test_loss 26.560783
  8. step 2480,test_loss 26.538080
  9. step 2490,test_loss 26.535666
  10. ('Tensorflow R2: ', 0.99999612588302389)
  11. ('Sklearn R2: ', 1.0)
复制代码
完成
腾讯云
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

精彩图文



在线客服(工作时间:9:00-22:00)
400-600-6565

内容导航

微信客服

Copyright   ©2015-2019  云服务器社区  Powered by©Discuz!  技术支持:尊托网络     ( 湘ICP备15009499号-1 )