在本次实验中咱们将使用PaddlePaddle来搭建一个简单的线性回归模型,并利用这一模型实现已知某地给定有机质含量对土壤的含氮量进行预测。而且在学习模型搭建的过程当中,了解到机器学习的若干重要概念,掌握一个机器学习预测的基本流程。html
** 线性回归的基本概念 **python
线性回归是机器学习中最简单也是最重要的模型之一,其模型创建遵循此流程:获取数据、数据预处理、训练模型、应用模型。算法
回归模型能够理解为:存在一个点集,用一条曲线去拟合它分布的过程。若是拟合曲线是一条直线,则称为线性回归。若是是一条二次曲线,则被称为二次回归。线性回归是回归模型中最简单的一种。编程
在线性回归中有几个基本的概念须要掌握:api
假设函数:数组
假设函数是指,用数学的方法描述自变量和因变量之间的关系,它们之间能够是一个线性函数或非线性函数。 在本次线性回顾模型中,咱们的假设函数为 $ \hat{Y}= aX_1+b $ ,其中,Y^\hat{Y}Y^表示模型的预测结果(预测房价),用来和真实的Y区分。模型要学习的参数即:a,b。网络
损失函数:框架
损失函数是指,用数学的方法衡量假设函数预测结果与真实值之间的偏差。这个差距越小预测越准确,而算法的任务就是使这个差距愈来愈小。less
创建模型后,咱们须要给模型一个优化目标,使得学到的参数可以让预测值Y^\hat{Y}Y^尽量地接近真实值Y。输入任意一个数据样本的目标值yiy_iyi和模型给出的预测值Yi^\hat{Y_i}Yi^,损失函数输出一个非负的实值。这个实值一般用来反映模型偏差的大小。dom
对于线性模型来说,最经常使用的损失函数就是均方偏差(Mean Squared Error, MSE)。
MSE=1n∑i=1n(Yi^−Yi)2MSE=\frac{1}{n}\sum_{i=1}^{n}(\hat{Y_i}-Y_i)^2MSE=n1i=1∑n(Yi^−Yi)2
即对于一个大小为n的测试集,MSE是n个数据预测结果偏差平方的均值。
优化算法:
在模型训练中优化算法也是相当重要的,它决定了一个模型的精度和运算速度。本章的线性回归实例中主要使用了梯度降低法进行优化。
如今,让咱们正式进入实验吧!
首先载入须要用到的库,它们分别是:
第一步,先运行!ls /home/aistudio/data/代码看本身的数据集在哪,如个人为data2054,在data2054里面有data_soil.txt
In[2]
!ls /home/aistudio/data/
data2054
In[3]
!ls /home/aistudio/data/data2054
data_soil.txt
安装pandas(通常状况已经存在)
In[4]
!pip install pandas
DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7. Looking in indexes: https://pypi.mirrors.ustc.edu.cn/simple/ Requirement already satisfied: pandas in /opt/conda/envs/python27-paddle120-env/lib/python2.7/site-packages (0.24.2) Requirement already satisfied: pytz>=2011k in /opt/conda/envs/python27-paddle120-env/lib/python2.7/site-packages (from pandas) (2018.9) Requirement already satisfied: numpy>=1.12.0 in /opt/conda/envs/python27-paddle120-env/lib/python2.7/site-packages (from pandas) (1.16.2) Requirement already satisfied: python-dateutil>=2.5.0 in /opt/conda/envs/python27-paddle120-env/lib/python2.7/site-packages (from pandas) (2.8.0) Requirement already satisfied: six>=1.5 in /opt/conda/envs/python27-paddle120-env/lib/python2.7/site-packages (from python-dateutil>=2.5.0->pandas) (1.12.0)
添加须要的库
In[5]
import sys import paddle import paddle.fluid as fluid import pandas as pd import matplotlib.pyplot as plt import numpy as np from paddle.utils.plot import Ploter from __future__ import print_function from paddle.fluid.contrib.trainer import * from paddle.fluid.contrib.inferencer import *
查看当前环境中的Python版本和Paddle版本
In[6]
print(sys.version) print(paddle.__version__)
2.7.15 | packaged by conda-forge | (default, Feb 28 2019, 04:00:11) [GCC 7.3.0] 1.5.0
2 - 数据预处理 本次数据集使用的是某地区的土壤有机质含量和氮含量的数据。氮含量和有机质含量近似成线性关系,数据集只有两列,以TXT的形式储存。本次预测要获得的他们之间的线性关系。 当真实数据被收集到后,它们每每不能直接使用,须要进行预处理。咱们首先以表格的形式输出数据的前五行看一下
In[7]
colnames = ['有机质含量']+['氮含量'] print_data = pd.read_csv('/home/aistudio/data/data2054/data_soil.txt',names = colnames) print_data.head()
有机质含量 | 氮含量 | |
---|---|---|
0 | 3.75 | 0.40 |
1 | 7.95 | 0.41 |
2 | 5.44 | 0.42 |
3 | 7.57 | 0.43 |
4 | 9.83 | 0.44 |
若是不肯定某个组件下有哪些方法或者属性, 能够尝试使用.以后按下tab键. 这个tab键也能够提示方法或函数须要的参数
归一化 观察一下数据的分布特征,通常而言,若是样本有多个属性,那么各维属性的取值范围差别会很大,这就要用到一个常见的操做-归一化(normalization)了。归一化的目标是把各维属性的取值范围放缩到差很少的区间,例如[-0.5, 0.5]。这里咱们使用一种很常见的操做方法:减掉均值,而后除以原取值范围。
In[8]
# coding = utf-8 # global x_raw,train_data,test_data #下载原始数据赋值给data,将data分为train_data与test_data data = np.loadtxt('/home/aistudio/data/data2054/data_soil.txt',delimiter = ',') x_raw = data.T[0].copy() maximums, minimums, avgs = data.max(axis=0), data.min(axis=0), data.sum(axis=0)/data.shape[0] print("the raw area :",data[:,0].max(axis = 0)) #进行归一化操做 feature_num = 2 for i in range(feature_num-1): #输入归一化的代码 #须要自行编程实现 data[:,i]=(data[:,i]-avgs[i])/(maximums[i] - minimums[i]) print('normalization:',data[:,0].max(axis = 0))
the raw area : 85.67 normalization: 0.5386874418397725
数据集分割 将原始数据处理为可用数据后,为了评估模型的好坏,咱们将数据分红两份:训练集和测试集。 训练集数据用于调整模型的参数,即进行模型的训练,模型在这份数据集上的偏差被称为训练偏差; 测试集数据被用来测试,模型在这份数据集上的偏差被称为测试偏差。 咱们训练模型的目的是为了经过从训练数据中找到规律来预测未知的新数据,因此测试偏差是更能反映模型表现的指标。分割数据的比例要考虑到两个因素:更多的训练数据会下降参数估计的方差,从而获得更可信的模型;而更多的测试数据会下降测试偏差的方差,从而获得更可信的测试偏差。咱们这个例子中设置的分割比例为8:2。 定义reader 构造read_data()函数,来读取训练数据集train_set或者测试数据集test_set。它的具体实现是在read_data()函数内部构造一个reader(),使用yield关键字来让reader()成为一个Generator(生成器),注意,yield关键字的做用和使用方法相似return关键字,不一样之处在于yield关键字能够构造生成器(Generator)。虽然咱们能够直接建立一个包含全部数据的列表,可是因为内存限制,咱们不可能建立一个无限大的或者巨大的列表,而且不少时候在建立了一个百万数量级别的列表以后,咱们却只须要用到开头的几个或几十个数据,这样形成了极大的浪费,而生成器的工做方式是在每次循环时计算下一个值,不断推算出后续的元素,不会建立完整的数据集列表,从而节约了内存使用。
In[9]
ratio = 0.8 offset = int(data.shape[0]*ratio) train_data = data[:offset].copy() test_data = data[offset:].copy() #能够把分割结果打印出来进行观察 print(len(data)) print(len(train_data)) def read_data(data_set): def reader(): for data in data_set: yield data[:-1],data[-1:] #这里是执行迭代,从后往前数的话,最后一个位置为-1 return reader """获取训练数据集和测试数据集 定义一个reader来获取训练数据集及其标签 Args: Return: read_data -- 用于获取训练数据集及其标签的reader""" def train(): global train_data return read_data(train_data) def test(): global test_data return read_data(test_data)
524 419
设置训练参数 同窗们能够试着调整一下参数值,看会有什么变化。 关于参数的解释以下: paddle.reader.shuffle(train(), buf_size=400)表示trainer从train()这个reader中读取了buf_size=400大小的数据并打乱顺序 paddle.batch(reader(), batch_size=BATCH_SIZE)表示从打乱的数据中再取出BATCH_SIZE=20大小的数据进行一次迭代训练
In[10]
BATCH_SIZE = 30 train_reader = paddle.batch( paddle.reader.shuffle( train(), buf_size=400), batch_size=BATCH_SIZE) test_reader = paddle.batch( paddle.reader.shuffle( test(), buf_size=400), batch_size=BATCH_SIZE)
将设计完成的网络参数写入 train_program() 函数,便于训练时调用 相关函数定义能够查找paddlepaddle的使用文档http://www.paddlepaddle.org/documentation/api/zh/0.14.0/layers.html#permalink-47-fc
In[11]
def train_program(): y = fluid.layers.data(name='y', shape=[1], dtype='float32') # feature vector of length 13 x = fluid.layers.data(name='x', shape=[1], dtype='float32') y_predict = fluid.layers.fc(input=x, size=1, act=None) loss = fluid.layers.square_error_cost(input=y_predict, label=y) avg_loss = fluid.layers.mean(loss) return avg_loss
损失函数定义肯定后,须要定义参数优化方法。
In[12]
def optimizer_program(): return fluid.optimizer.SGD(learning_rate=0.01)
定义运算场所 首先进行最基本的运算场所定义,在 fluid 中使用 place = fluid.CUDAPlace(0) if use_cuda else fluid.CPUPlace() 来进行初始化: place 表示fluid program的执行设备,常见的有 fluid.CUDAPlace(0) 和 fluid.CPUPlace() use_cuda = False 表示不使用 GPU 进行加速训练
In[13]
use_cuda = False place = fluid.CUDAPlace(0) if use_cuda else fluid.CPUPlace()
建立训练器 建立训练器时须要提供3个主要信息: 一个配置好的网络拓扑结构 训练的硬件场所 具体的优化方法
In[14]
trainer = Trainer( train_func=train_program, place=place, optimizer_func=optimizer_program)
其它配置 feed_order=['x', 'y'] 是数据层名称和数组索引的映射,用于定义数据的读取顺序。 params_dirname用于定义模型保存路径。 最后定义事件处理器 event_handler_plot(event) 用于打印训练过程
In[15]
feed_order=['x', 'y'] # Specify the directory to save the parameters import os params_dirname = "/home/aistudio/inference_model" # 若是保存路径不存在就建立 if not os.path.exists(params_dirname): os.makedirs(params_dirname) import shutil shutil.rmtree(params_dirname) #递归删除文件夹 train_title = "Train cost" test_title = "Test cost" plot_cost = Ploter(train_title, test_title) step = 0 # event_handler prints training and testing info def event_handler(event): global step if isinstance(event, EndStepEvent):#每步触发事件 if step % 10 == 0: # record a train cost every 10 batches print("%s, Step %d, Cost %f" %(train_title, step, event.metrics[0])) if step % 100 == 0: # record a test cost every 100 batches test_metrics = trainer.test( reader=test_reader, feed_order=feed_order) print("%s, Step %d, Cost %f" %(test_title, step, test_metrics[0])) if test_metrics[0] < 0.01: # If the accuracy is good enough, we can stop the training. print('loss is less than 0.001, stop') trainer.stop() step += 1 if isinstance(event, EndEpochEvent):#每次迭代触发事件 if event.epoch % 10 == 0: # We can save the trained parameters for the inferences later if params_dirname is not None: trainer.save_params(params_dirname)
开始训练 咱们如今能够经过调用trainer.train()来开始训练 关于参数的解释以下: 参数feed_order用到了以前定义的feed_order索引,将数据层x和y按顺序输入trainer,也就是数据的来源。 参数event_handler是事件管理机制,读者能够自定义event_handler,根据事件信息做相应的操做。 参数num_epochs=100表示迭代训练100次后中止训练。
In[16]
%matplotlib inline # The training could take up to a few minutes. trainer.train( reader=train_reader, num_epochs=300, event_handler=event_handler, feed_order=feed_order)
Train cost, Step 0, Cost 4.768987 Test cost, Step 0, Cost 8.029277 Train cost, Step 10, Cost 3.512895 Train cost, Step 20, Cost 4.517720 Train cost, Step 30, Cost 2.638228 Train cost, Step 40, Cost 2.876105 Train cost, Step 50, Cost 2.152664 Train cost, Step 60, Cost 1.750877 Train cost, Step 70, Cost 2.495707 Train cost, Step 80, Cost 1.044865 Train cost, Step 90, Cost 1.266695 Train cost, Step 100, Cost 1.617073 Test cost, Step 100, Cost 1.710509 Train cost, Step 110, Cost 0.870742 Train cost, Step 120, Cost 1.326341 Train cost, Step 130, Cost 1.310452 Train cost, Step 140, Cost 1.335390 Train cost, Step 150, Cost 1.182201 Train cost, Step 160, Cost 0.992906 Train cost, Step 170, Cost 0.919412 Train cost, Step 180, Cost 1.154889 Train cost, Step 190, Cost 0.921385 Train cost, Step 200, Cost 1.428739 Test cost, Step 200, Cost 1.025548 Train cost, Step 210, Cost 0.892617 Train cost, Step 220, Cost 0.624673 Train cost, Step 230, Cost 1.201186 Train cost, Step 240, Cost 0.744943 Train cost, Step 250, Cost 0.881837 Train cost, Step 260, Cost 0.671617 Train cost, Step 270, Cost 0.846477 Train cost, Step 280, Cost 1.087123 Train cost, Step 290, Cost 0.979044 Train cost, Step 300, Cost 0.848427 Test cost, Step 300, Cost 0.790917 Train cost, Step 310, Cost 0.929944 Train cost, Step 320, Cost 0.647987 Train cost, Step 330, Cost 0.558589 Train cost, Step 340, Cost 0.673265 Train cost, Step 350, Cost 0.748646 Train cost, Step 360, Cost 0.664201 Train cost, Step 370, Cost 0.738837 Train cost, Step 380, Cost 0.680803 Train cost, Step 390, Cost 0.592835 Train cost, Step 400, Cost 0.461612 Test cost, Step 400, Cost 0.606999 Train cost, Step 410, Cost 0.588587 Train cost, Step 420, Cost 0.708379 Train cost, Step 430, Cost 0.652785 Train cost, Step 440, Cost 0.739320 Train cost, Step 450, Cost 0.703653 Train cost, Step 460, Cost 0.772891 Train cost, Step 470, Cost 0.569921 Train cost, Step 480, Cost 0.605819 Train cost, Step 490, Cost 0.629869 Train cost, Step 500, Cost 0.564279 Test cost, Step 500, Cost 0.483584 Train cost, Step 510, Cost 0.529205 Train cost, Step 520, Cost 0.453852 Train cost, Step 530, Cost 0.500234 Train cost, Step 540, Cost 0.387460 Train cost, Step 550, Cost 0.469682 Train cost, Step 560, Cost 0.549738 Train cost, Step 570, Cost 0.449353 Train cost, Step 580, Cost 0.432828 Train cost, Step 590, Cost 0.504905 Train cost, Step 600, Cost 0.466302 Test cost, Step 600, Cost 0.378664 Train cost, Step 610, Cost 0.461219 Train cost, Step 620, Cost 0.319102 Train cost, Step 630, Cost 0.476844 Train cost, Step 640, Cost 0.337013 Train cost, Step 650, Cost 0.290477 Train cost, Step 660, Cost 0.396287 Train cost, Step 670, Cost 0.379541 Train cost, Step 680, Cost 0.396960 Train cost, Step 690, Cost 0.426767 Train cost, Step 700, Cost 0.321290 Test cost, Step 700, Cost 0.317931 Train cost, Step 710, Cost 0.467874 Train cost, Step 720, Cost 0.346082 Train cost, Step 730, Cost 0.307868 Train cost, Step 740, Cost 0.394967 Train cost, Step 750, Cost 0.305963 Train cost, Step 760, Cost 0.292577 Train cost, Step 770, Cost 0.321144 Train cost, Step 780, Cost 0.328115 Train cost, Step 790, Cost 0.336515 Train cost, Step 800, Cost 0.263018 Test cost, Step 800, Cost 0.242078 Train cost, Step 810, Cost 0.240048 Train cost, Step 820, Cost 0.246798 Train cost, Step 830, Cost 0.286270 Train cost, Step 840, Cost 0.339424 Train cost, Step 850, Cost 0.252880 Train cost, Step 860, Cost 0.295079 Train cost, Step 870, Cost 0.241332 Train cost, Step 880, Cost 0.212187 Train cost, Step 890, Cost 0.218729 Train cost, Step 900, Cost 0.242188 Test cost, Step 900, Cost 0.198788 Train cost, Step 910, Cost 0.241578 Train cost, Step 920, Cost 0.222606 Train cost, Step 930, Cost 0.189436 Train cost, Step 940, Cost 0.191209 Train cost, Step 950, Cost 0.224156 Train cost, Step 960, Cost 0.209254 Train cost, Step 970, Cost 0.197532 Train cost, Step 980, Cost 0.198264 Train cost, Step 990, Cost 0.206929 Train cost, Step 1000, Cost 0.198488 Test cost, Step 1000, Cost 0.153360 Train cost, Step 1010, Cost 0.135618 Train cost, Step 1020, Cost 0.137078 Train cost, Step 1030, Cost 0.159243 Train cost, Step 1040, Cost 0.175211 Train cost, Step 1050, Cost 0.144821 Train cost, Step 1060, Cost 0.162203 Train cost, Step 1070, Cost 0.197415 Train cost, Step 1080, Cost 0.143427 Train cost, Step 1090, Cost 0.147314 Train cost, Step 1100, Cost 0.142196 Test cost, Step 1100, Cost 0.123154 Train cost, Step 1110, Cost 0.174198 Train cost, Step 1120, Cost 0.201148 Train cost, Step 1130, Cost 0.100205 Train cost, Step 1140, Cost 0.111531 Train cost, Step 1150, Cost 0.096112 Train cost, Step 1160, Cost 0.121104 Train cost, Step 1170, Cost 0.111347 Train cost, Step 1180, Cost 0.148391 Train cost, Step 1190, Cost 0.131636 Train cost, Step 1200, Cost 0.152686 Test cost, Step 1200, Cost 0.098063 Train cost, Step 1210, Cost 0.097262 Train cost, Step 1220, Cost 0.111449 Train cost, Step 1230, Cost 0.154582 Train cost, Step 1240, Cost 0.111647 Train cost, Step 1250, Cost 0.122552 Train cost, Step 1260, Cost 0.113828 Train cost, Step 1270, Cost 0.094590 Train cost, Step 1280, Cost 0.085252 Train cost, Step 1290, Cost 0.095512 Train cost, Step 1300, Cost 0.100617 Test cost, Step 1300, Cost 0.072462 Train cost, Step 1310, Cost 0.106737 Train cost, Step 1320, Cost 0.102805 Train cost, Step 1330, Cost 0.098214 Train cost, Step 1340, Cost 0.078186 Train cost, Step 1350, Cost 0.096731 Train cost, Step 1360, Cost 0.092324 Train cost, Step 1370, Cost 0.096081 Train cost, Step 1380, Cost 0.080706 Train cost, Step 1390, Cost 0.085458 Train cost, Step 1400, Cost 0.066053 Test cost, Step 1400, Cost 0.062014 Train cost, Step 1410, Cost 0.158391 Train cost, Step 1420, Cost 0.096896 Train cost, Step 1430, Cost 0.076681 Train cost, Step 1440, Cost 0.095945 Train cost, Step 1450, Cost 0.061191 Train cost, Step 1460, Cost 0.089816 Train cost, Step 1470, Cost 0.060841 Train cost, Step 1480, Cost 0.075491 Train cost, Step 1490, Cost 0.093773 Train cost, Step 1500, Cost 0.082257 Test cost, Step 1500, Cost 0.054648 Train cost, Step 1510, Cost 0.062478 Train cost, Step 1520, Cost 0.088672 Train cost, Step 1530, Cost 0.098577 Train cost, Step 1540, Cost 0.068808 Train cost, Step 1550, Cost 0.063292 Train cost, Step 1560, Cost 0.046482 Train cost, Step 1570, Cost 0.072079 Train cost, Step 1580, Cost 0.066417 Train cost, Step 1590, Cost 0.056396 Train cost, Step 1600, Cost 0.066187 Test cost, Step 1600, Cost 0.043654 Train cost, Step 1610, Cost 0.064506 Train cost, Step 1620, Cost 0.057062 Train cost, Step 1630, Cost 0.058497 Train cost, Step 1640, Cost 0.049261 Train cost, Step 1650, Cost 0.045824 Train cost, Step 1660, Cost 0.070338 Train cost, Step 1670, Cost 0.068806 Train cost, Step 1680, Cost 0.053915 Train cost, Step 1690, Cost 0.051097 Train cost, Step 1700, Cost 0.068100 Test cost, Step 1700, Cost 0.039543 Train cost, Step 1710, Cost 0.049441 Train cost, Step 1720, Cost 0.051990 Train cost, Step 1730, Cost 0.050742 Train cost, Step 1740, Cost 0.069195 Train cost, Step 1750, Cost 0.058446 Train cost, Step 1760, Cost 0.057564 Train cost, Step 1770, Cost 0.071641 Train cost, Step 1780, Cost 0.052876 Train cost, Step 1790, Cost 0.052155 Train cost, Step 1800, Cost 0.082488 Test cost, Step 1800, Cost 0.034690 Train cost, Step 1810, Cost 0.043171 Train cost, Step 1820, Cost 0.051249 Train cost, Step 1830, Cost 0.042519 Train cost, Step 1840, Cost 0.054430 Train cost, Step 1850, Cost 0.060285 Train cost, Step 1860, Cost 0.054826 Train cost, Step 1870, Cost 0.057194 Train cost, Step 1880, Cost 0.055687 Train cost, Step 1890, Cost 0.071762 Train cost, Step 1900, Cost 0.058110 Test cost, Step 1900, Cost 0.031468 Train cost, Step 1910, Cost 0.044074 Train cost, Step 1920, Cost 0.040255 Train cost, Step 1930, Cost 0.046137 Train cost, Step 1940, Cost 0.050012 Train cost, Step 1950, Cost 0.033987 Train cost, Step 1960, Cost 0.045765 Train cost, Step 1970, Cost 0.048595 Train cost, Step 1980, Cost 0.038905 Train cost, Step 1990, Cost 0.047263 Train cost, Step 2000, Cost 0.033901 Test cost, Step 2000, Cost 0.029656 Train cost, Step 2010, Cost 0.030197 Train cost, Step 2020, Cost 0.036784 Train cost, Step 2030, Cost 0.041115 Train cost, Step 2040, Cost 0.053284 Train cost, Step 2050, Cost 0.040142 Train cost, Step 2060, Cost 0.037007 Train cost, Step 2070, Cost 0.045154 Train cost, Step 2080, Cost 0.027582 Train cost, Step 2090, Cost 0.035088 Train cost, Step 2100, Cost 0.034761 Test cost, Step 2100, Cost 0.027043 Train cost, Step 2110, Cost 0.030808 Train cost, Step 2120, Cost 0.027776 Train cost, Step 2130, Cost 0.037169 Train cost, Step 2140, Cost 0.066838 Train cost, Step 2150, Cost 0.032508 Train cost, Step 2160, Cost 0.033583 Train cost, Step 2170, Cost 0.042142 Train cost, Step 2180, Cost 0.038644 Train cost, Step 2190, Cost 0.037633 Train cost, Step 2200, Cost 0.033084 Test cost, Step 2200, Cost 0.025096 Train cost, Step 2210, Cost 0.039980 Train cost, Step 2220, Cost 0.029732 Train cost, Step 2230, Cost 0.050501 Train cost, Step 2240, Cost 0.041677 Train cost, Step 2250, Cost 0.023526 Train cost, Step 2260, Cost 0.024553 Train cost, Step 2270, Cost 0.036005 Train cost, Step 2280, Cost 0.032678 Train cost, Step 2290, Cost 0.032366 Train cost, Step 2300, Cost 0.023447 Test cost, Step 2300, Cost 0.023911 Train cost, Step 2310, Cost 0.030922 Train cost, Step 2320, Cost 0.028721 Train cost, Step 2330, Cost 0.034513 Train cost, Step 2340, Cost 0.026559 Train cost, Step 2350, Cost 0.043622 Train cost, Step 2360, Cost 0.040104 Train cost, Step 2370, Cost 0.050138 Train cost, Step 2380, Cost 0.029433 Train cost, Step 2390, Cost 0.023240 Train cost, Step 2400, Cost 0.038487 Test cost, Step 2400, Cost 0.025467 Train cost, Step 2410, Cost 0.015854 Train cost, Step 2420, Cost 0.039864 Train cost, Step 2430, Cost 0.033333 Train cost, Step 2440, Cost 0.039830 Train cost, Step 2450, Cost 0.025698 Train cost, Step 2460, Cost 0.023239 Train cost, Step 2470, Cost 0.017733 Train cost, Step 2480, Cost 0.029231 Train cost, Step 2490, Cost 0.036119 Train cost, Step 2500, Cost 0.024184 Test cost, Step 2500, Cost 0.023387 Train cost, Step 2510, Cost 0.033727 Train cost, Step 2520, Cost 0.036388 Train cost, Step 2530, Cost 0.025946 Train cost, Step 2540, Cost 0.039988 Train cost, Step 2550, Cost 0.039029 Train cost, Step 2560, Cost 0.034118 Train cost, Step 2570, Cost 0.037878 Train cost, Step 2580, Cost 0.019043 Train cost, Step 2590, Cost 0.014606 Train cost, Step 2600, Cost 0.017237 Test cost, Step 2600, Cost 0.024894 Train cost, Step 2610, Cost 0.032909 Train cost, Step 2620, Cost 0.046552 Train cost, Step 2630, Cost 0.019126 Train cost, Step 2640, Cost 0.027269 Train cost, Step 2650, Cost 0.023830 Train cost, Step 2660, Cost 0.038029 Train cost, Step 2670, Cost 0.029304 Train cost, Step 2680, Cost 0.023559 Train cost, Step 2690, Cost 0.037625 Train cost, Step 2700, Cost 0.028565 Test cost, Step 2700, Cost 0.024941 Train cost, Step 2710, Cost 0.031061 Train cost, Step 2720, Cost 0.025516 Train cost, Step 2730, Cost 0.034017 Train cost, Step 2740, Cost 0.045984 Train cost, Step 2750, Cost 0.034554 Train cost, Step 2760, Cost 0.023234 Train cost, Step 2770, Cost 0.021406 Train cost, Step 2780, Cost 0.064184 Train cost, Step 2790, Cost 0.043807 Train cost, Step 2800, Cost 0.037964 Test cost, Step 2800, Cost 0.024270 Train cost, Step 2810, Cost 0.025262 Train cost, Step 2820, Cost 0.020918 Train cost, Step 2830, Cost 0.025071 Train cost, Step 2840, Cost 0.032951 Train cost, Step 2850, Cost 0.034100 Train cost, Step 2860, Cost 0.035140 Train cost, Step 2870, Cost 0.026192 Train cost, Step 2880, Cost 0.014990 Train cost, Step 2890, Cost 0.049053 Train cost, Step 2900, Cost 0.026420 Test cost, Step 2900, Cost 0.026627 Train cost, Step 2910, Cost 0.034137 Train cost, Step 2920, Cost 0.032673 Train cost, Step 2930, Cost 0.024193 Train cost, Step 2940, Cost 0.031714 Train cost, Step 2950, Cost 0.024828 Train cost, Step 2960, Cost 0.025747 Train cost, Step 2970, Cost 0.021495 Train cost, Step 2980, Cost 0.017658 Train cost, Step 2990, Cost 0.025132 Train cost, Step 3000, Cost 0.017609 Test cost, Step 3000, Cost 0.024128 Train cost, Step 3010, Cost 0.028900 Train cost, Step 3020, Cost 0.016700 Train cost, Step 3030, Cost 0.026613 Train cost, Step 3040, Cost 0.019744 Train cost, Step 3050, Cost 0.045507 Train cost, Step 3060, Cost 0.026242 Train cost, Step 3070, Cost 0.022545 Train cost, Step 3080, Cost 0.035223 Train cost, Step 3090, Cost 0.022581 Train cost, Step 3100, Cost 0.024111 Test cost, Step 3100, Cost 0.025594 Train cost, Step 3110, Cost 0.034491 Train cost, Step 3120, Cost 0.014520 Train cost, Step 3130, Cost 0.015593 Train cost, Step 3140, Cost 0.023285 Train cost, Step 3150, Cost 0.012638 Train cost, Step 3160, Cost 0.022198 Train cost, Step 3170, Cost 0.019563 Train cost, Step 3180, Cost 0.041903 Train cost, Step 3190, Cost 0.023916 Train cost, Step 3200, Cost 0.021095 Test cost, Step 3200, Cost 0.028093 Train cost, Step 3210, Cost 0.040792 Train cost, Step 3220, Cost 0.029057 Train cost, Step 3230, Cost 0.020520 Train cost, Step 3240, Cost 0.022582 Train cost, Step 3250, Cost 0.017649 Train cost, Step 3260, Cost 0.061936 Train cost, Step 3270, Cost 0.020003 Train cost, Step 3280, Cost 0.020403 Train cost, Step 3290, Cost 0.024036 Train cost, Step 3300, Cost 0.037860 Test cost, Step 3300, Cost 0.026783 Train cost, Step 3310, Cost 0.029722 Train cost, Step 3320, Cost 0.022559 Train cost, Step 3330, Cost 0.032497 Train cost, Step 3340, Cost 0.027590 Train cost, Step 3350, Cost 0.030427 Train cost, Step 3360, Cost 0.037586 Train cost, Step 3370, Cost 0.027731 Train cost, Step 3380, Cost 0.018294 Train cost, Step 3390, Cost 0.032997 Train cost, Step 3400, Cost 0.025673 Test cost, Step 3400, Cost 0.026371 Train cost, Step 3410, Cost 0.020853 Train cost, Step 3420, Cost 0.015484 Train cost, Step 3430, Cost 0.025746 Train cost, Step 3440, Cost 0.030819 Train cost, Step 3450, Cost 0.027891 Train cost, Step 3460, Cost 0.031681 Train cost, Step 3470, Cost 0.023304 Train cost, Step 3480, Cost 0.021340 Train cost, Step 3490, Cost 0.015192 Train cost, Step 3500, Cost 0.030663 Test cost, Step 3500, Cost 0.025029 Train cost, Step 3510, Cost 0.032962 Train cost, Step 3520, Cost 0.020400 Train cost, Step 3530, Cost 0.029337 Train cost, Step 3540, Cost 0.014134 Train cost, Step 3550, Cost 0.040396 Train cost, Step 3560, Cost 0.021215 Train cost, Step 3570, Cost 0.017495 Train cost, Step 3580, Cost 0.024108 Train cost, Step 3590, Cost 0.010949 Train cost, Step 3600, Cost 0.012924 Test cost, Step 3600, Cost 0.028458 Train cost, Step 3610, Cost 0.026737 Train cost, Step 3620, Cost 0.019719 Train cost, Step 3630, Cost 0.015369 Train cost, Step 3640, Cost 0.028902 Train cost, Step 3650, Cost 0.039268 Train cost, Step 3660, Cost 0.017939 Train cost, Step 3670, Cost 0.036227 Train cost, Step 3680, Cost 0.012675 Train cost, Step 3690, Cost 0.018152 Train cost, Step 3700, Cost 0.024145 Test cost, Step 3700, Cost 0.026889 Train cost, Step 3710, Cost 0.025453 Train cost, Step 3720, Cost 0.032178 Train cost, Step 3730, Cost 0.023277 Train cost, Step 3740, Cost 0.038356 Train cost, Step 3750, Cost 0.018018 Train cost, Step 3760, Cost 0.011010 Train cost, Step 3770, Cost 0.023033 Train cost, Step 3780, Cost 0.045767 Train cost, Step 3790, Cost 0.012840 Train cost, Step 3800, Cost 0.019810 Test cost, Step 3800, Cost 0.025651 Train cost, Step 3810, Cost 0.034081 Train cost, Step 3820, Cost 0.041910 Train cost, Step 3830, Cost 0.037905 Train cost, Step 3840, Cost 0.025698 Train cost, Step 3850, Cost 0.039071 Train cost, Step 3860, Cost 0.019030 Train cost, Step 3870, Cost 0.034477 Train cost, Step 3880, Cost 0.024240 Train cost, Step 3890, Cost 0.015157 Train cost, Step 3900, Cost 0.040621 Test cost, Step 3900, Cost 0.025927 Train cost, Step 3910, Cost 0.021204 Train cost, Step 3920, Cost 0.015538 Train cost, Step 3930, Cost 0.023660 Train cost, Step 3940, Cost 0.014193 Train cost, Step 3950, Cost 0.013150 Train cost, Step 3960, Cost 0.017309 Train cost, Step 3970, Cost 0.016231 Train cost, Step 3980, Cost 0.037976 Train cost, Step 3990, Cost 0.035511 Train cost, Step 4000, Cost 0.043626 Test cost, Step 4000, Cost 0.027540 Train cost, Step 4010, Cost 0.028400 Train cost, Step 4020, Cost 0.031141 Train cost, Step 4030, Cost 0.044042 Train cost, Step 4040, Cost 0.045470 Train cost, Step 4050, Cost 0.035228 Train cost, Step 4060, Cost 0.015033 Train cost, Step 4070, Cost 0.014766 Train cost, Step 4080, Cost 0.042850 Train cost, Step 4090, Cost 0.034066 Train cost, Step 4100, Cost 0.016928 Test cost, Step 4100, Cost 0.026744 Train cost, Step 4110, Cost 0.023494 Train cost, Step 4120, Cost 0.045882 Train cost, Step 4130, Cost 0.026959 Train cost, Step 4140, Cost 0.015221 Train cost, Step 4150, Cost 0.030598 Train cost, Step 4160, Cost 0.028655 Train cost, Step 4170, Cost 0.016936 Train cost, Step 4180, Cost 0.026485 Train cost, Step 4190, Cost 0.017895
查看inference_model中的权值与偏执值、学习率
In[17]
!ls /home/aistudio/inference_model
fc_0.b_0 fc_0.w_0 learning_rate_0
设定预测程序 相似于 trainer.train,预测器须要一个预测程序来作预测。咱们能够稍加修改咱们的训练程序来把预测值包含进来。
In[18]
def inference_program(): x = fluid.layers.data(name='x', shape=[1], dtype='float32') y_predict = fluid.layers.fc(input=x, size=1, act=None) return y_predict
预测 预测器会从params_dirname中读取已经训练好的模型,来对从未碰见过的数据进行预测。 tensor_x:生成batch_size个[0,1]区间的随机数,以 tensor 的格式储存 results:预测对应 tensor_x 有机质含量的氮含量 raw_x:因为数据处理时咱们作了归一化操做,为了更直观的判断预测是否准确,将数据进行反归一化,获得随机数对应的原始数据。
In[19]
inferencer = Inferencer( infer_func=inference_program, param_path=params_dirname, place=place) batch_size = 2 tensor_x = np.random.uniform(0, 1, [batch_size, 1]).astype("float32") results = inferencer.infer({'x': tensor_x}) raw_x = tensor_x*(maximums[i]-minimums[i])+avgs[i] print("有机质含量:",raw_x) print("含氮量: ", results[0])
有机质含量: [[79.4205 ] [47.303215]] 含氮量: [[3.8053818] [2.2940538]]
根据线性模型的原理,计算a和b的值
In[20]
a = (results[0][0][0] - results[0][1][0]) / (raw_x[0][0]-raw_x[1][0]) b = (results[0][0][0] - a * raw_x[0][0]) print(a,b)
0.047056526 0.068128824
绘制拟合图像 经过训练,本次线性回归模型输出了一条拟合的直线,想要直观的判断模型好坏可将拟合直线与数据的图像绘制出来。
In[21]
import numpy as np import matplotlib.pyplot as plt import sys #python2 若是要运行在python3须要将这三句话注释 reload(sys) #python2 sys.setdefaultencoding('utf-8') #python2 from matplotlib import rc rc('font',**{'family':'sans-serif','sans-serif':['AR PL KaitiM GB']}) data = np.loadtxt('/home/aistudio/data/data2054/data_soil.txt',delimiter = ',') def plot_data(data): x = data[:,0] y = data[:,1] y_predict = x*a + b plt.scatter(x,y,marker='.',c='r',label='True') plt.title('Organic matter nitrogen content')#有机质氮含量 plt.xlabel('Organic matter content')#有机质含量 plt.ylabel('Nitrogen content')#氮含量 plt.xlim(0,90) plt.ylim(0,4) predict = plt.plot(x,y_predict,label='Predict') plt.legend(loc='upper left') plt.savefig('result1.png') plt.show() plot_data(data)
总结 经过这个练习咱们应该记住: 机器学习的典型过程: 获取数据 数据预处理 -训练模型 -应用模型 fluid训练模型的基本步骤: 配置网络结构: 定义成本函数avg_cost 定义优化器optimizer 获取训练数据 定义运算场所(place)和执行器(exe) 提供数据(feeder) 执行训练(exe.run) 预测infer()并输出拟合图像 练习中的许多参数能够做调整,例如修改学习率会对模型结果产生很大影响,你们能够在本练习或者后面的练习中多作些尝试。 至此线性回归模型的训练工做完成,但愿经过本次课程的学习,读者能够利用提供的代码完成一个简单的房价预测模型。经过这一过程,初步了解PaddlePaddle这一易学易用的分布式平台。 本节课做为PaddlePaddle的快速入门章节,但愿能够开启您的下一步深度学习之门。
>> 访问 PaddlePaddle 官网,了解更多相关内容。