在本次實驗中咱們將使用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 官網,瞭解更多相關內容。