【深度學(xué)習(xí)】DNN房價預(yù)測

前言

我們使用深度學(xué)習(xí)網(wǎng)絡(luò)實現(xiàn)波士頓房價預(yù)測,深度學(xué)習(xí)的目的就是尋找一個合適的函數(shù)輸出我們想要的結(jié)果。深度學(xué)習(xí)實際上是機器學(xué)習(xí)領(lǐng)域中一個研究方向,深度學(xué)習(xí)的目標是讓機器能夠像人一樣具有分析學(xué)習(xí)的能力,能夠識別文字、圖像、聲音等數(shù)據(jù)。我認為深度學(xué)習(xí)與機器學(xué)習(xí)最主要的區(qū)別就是神經(jīng)元。

公司主營業(yè)務(wù):成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出坡頭免費做網(wǎng)站回饋大家。

深度學(xué)習(xí)中重要內(nèi)容

建立模型——神經(jīng)元

  • 基本構(gòu)造

    • 一個神經(jīng)元對應(yīng)一組權(quán)重w,a代表輸入,我們把輸入與權(quán)重相乘再相加,再加上偏置b,最后通過激活函得到對應(yīng)的輸出。
    • 我們不看激活函數(shù),只看前面的部分會發(fā)現(xiàn)其實就是一個線性函數(shù)f=kx+b(k表示斜率,b表示截距)
    • w和b就是我們需要在訓(xùn)練中需要尋找的,
    • 學(xué)習(xí)網(wǎng)絡(luò)就是通過很多個這樣的神經(jīng)元組合而成。

建立模型——激活函數(shù)

  • 為什么引入激活函數(shù)

    • 激活函數(shù)是為了增強網(wǎng)絡(luò)的表達能力,我們需要激活函數(shù)來將線性函數(shù)轉(zhuǎn)變?yōu)榉蔷€性函數(shù)。
    • 非線性的激活函數(shù)需要有連續(xù)性,因為連續(xù)非線性激活函數(shù)可導(dǎo)的,所以可以用最優(yōu)化的方法來求解
  • 激活函數(shù)的種類

建立模型——前饋神經(jīng)網(wǎng)絡(luò)

  • 我們輸入1和-1分別和每一組的權(quán)重相乘相加得到4和-2的結(jié)果,然后經(jīng)過激活函數(shù)(激活函數(shù)實際上也是一個簡單函數(shù),但是具有某些特性,可以用來解決問題的目的,例如激活函數(shù)是y=x-1,我們輸入4,輸出結(jié)果就是3。)得到0.98和0.12.依次往后計算就是前饋神經(jīng)網(wǎng)絡(luò)。

建立模型——深度神經(jīng)網(wǎng)絡(luò)

  • 神經(jīng)網(wǎng)絡(luò)解決的問題有很多,例如分類、預(yù)測、回歸等。這里我們給出兩個解決類型。

  • 分類

    • 輸出層就是輸入的數(shù)據(jù)維度,例如我們要分類圖形是正方型還是長方形,那我們可以是3維的輸入,一個內(nèi)角,兩條臨邊。就可以判斷。也可以是五維的,一個內(nèi)角,4條邊)
    • 輸出層y就是結(jié)果,就上面舉例的圖形分類,那結(jié)果可以有2個,長方形和正方形,例如y1代表長方形,y2代表正方形,輸出的結(jié)果那個數(shù)值大就是那種類型,也可以增加一個都不是的結(jié)果)
  • 預(yù)測

    • 今天的波士頓房價預(yù)測就是預(yù)測模型,我們通過地段,房屋面積等等,預(yù)測房價的多少。

損失函數(shù)

  • 常用損失函數(shù)
    平方損失函數(shù)、交叉熵損失函數(shù),不同的問題運用不同的損失函數(shù)
  • 用于衡量我們輸入結(jié)果和真實結(jié)果的差異
  • 目的通過損失去修正我們的參數(shù)是我們的模型更完美

實踐——波士頓房價預(yù)測

數(shù)據(jù)集

使用paddle飛槳波士頓數(shù)據(jù)集

https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/text/UCIHousing_cn.html

繪圖

## 繪圖

Batch = 0
Batchs = []
all_train_accs = []
def draw_train_acc(Batchs,train_accs):
    title = "training accs"
    plt.title(title)
    plt.xlabel("batch")
    plt.ylabel("acc")
    plt.plot(Batchs, train_accs, color = 'green', label = 'training accs')
    plt.legend()
    plt.grid()
    plt.show()


all_train_loss = []
def draw_train_loss(Batchs,train_loss):
    title = "training loss"
    plt.title(title)
    plt.xlabel("batch")
    plt.ylabel("loss")
    plt.plot(Batchs, train_loss, color = 'red', label = 'training loss')
    plt.legend()
    plt.grid()
    plt.show()

## 繪制真實值與預(yù)測值的對比圖
def draw_infer_result(groud_truths, infer_results):
    title = 'Boston'
    plt.title(title)
    x = np.arange(1,20)
    y = x
    plt.plot(x,y);
    plt.xlabel("ground truth")
    plt.ylabel("infer result")
    plt.scatter(groud_truths,infer_results,color='green',label='training cost')
    plt.grid()
    plt.show()

網(wǎng)絡(luò)搭建


'''
核心

網(wǎng)絡(luò)搭建
'''

class MyDNN(paddle.nn.Layer):
    def __init__(self):
        super(MyDNN, self).__init__()

        #self.linear1 = paddle.nn.Linear(13,1,None) #全連接層,paddle.nn.Linear(in_features,out_features,weight)

        self.linear1 = paddle.nn.Linear(13, 32, None)

        self.linear2 = paddle.nn.Linear(32, 64, None)

        self.linear3 = paddle.nn.Linear(64, 32, None)

        self.linear4 = paddle.nn.Linear(32, 1, None)
    def forward(self, inputs): ## 傳播函數(shù)
        x = self.linear1(inputs)
        x = self.linear2(x)
        x = self.linear3(x)
        x = self.linear4(x)
        return x

模型訓(xùn)練與測試


'''
網(wǎng)絡(luò)訓(xùn)練與測試
'''


## 實例化
model = MyDNN()
model.train()
mse_loss = paddle.nn.MSELoss()
opt = paddle.optimizer.SGD(learning_rate=0.001, parameters=model.parameters())
epochs_num = 100


for epochs in range(epochs_num):
    for batch_id,data in enumerate(train_loader()):
        feature = data[0]
        label = data[1]
        predict = model(feature)
        loss = mse_loss(predict, label)
        loss.backward()
        opt.step()
        opt.clear_grad()
        if batch_id!=0 and batch_id%10 == 0:
            Batch = Batch+10
            Batchs.append(Batch)
            all_train_loss.append(loss.numpy()[0])
            print("epoch{},step:{},train_loss:{}".format(epochs,batch_id,loss.numpy()[0]))

paddle.save(model.state_dict(),"UCIHousingDNN")
draw_train_loss(Batchs,all_train_loss)



para_state = paddle.load("UCIHousingDNN")
model = MyDNN()
model.eval()
model.set_state_dict(para_state)
losses = []


for batch_id,data in enumerate(eval_loader()):
    feature = data[0]
    label = data[1]
    predict = model(feature)
    loss = mse_loss(predict,label)
    losses.append(loss.numpy()[0])
avg_loss = np.mean(losses)

print(avg_loss)


draw_infer_result(label,predict)

代碼

## 深度學(xué)習(xí)框架
import paddle

import numpy as np
import os
import matplotlib.pyplot as plt



## 繪圖

Batch = 0
Batchs = []
all_train_accs = []
def draw_train_acc(Batchs,train_accs):
    title = "training accs"
    plt.title(title)
    plt.xlabel("batch")
    plt.ylabel("acc")
    plt.plot(Batchs, train_accs, color = 'green', label = 'training accs')
    plt.legend()
    plt.grid()
    plt.show()


all_train_loss = []
def draw_train_loss(Batchs,train_loss):
    title = "training loss"
    plt.title(title)
    plt.xlabel("batch")
    plt.ylabel("loss")
    plt.plot(Batchs, train_loss, color = 'red', label = 'training loss')
    plt.legend()
    plt.grid()
    plt.show()

## 繪制真實值與預(yù)測值的對比圖
def draw_infer_result(groud_truths, infer_results):
    title = 'Boston'
    plt.title(title)
    x = np.arange(1,20)
    y = x
    plt.plot(x,y);
    plt.xlabel("ground truth")
    plt.ylabel("infer result")
    plt.scatter(groud_truths,infer_results,color='green',label='training cost')
    plt.grid()
    plt.show()


'''
數(shù)據(jù)集加載
'''

train_dataset = paddle.text.datasets.UCIHousing(mode="train")
eval_dataset = paddle.text.datasets.UCIHousing(mode="test")

train_loader = paddle.io.DataLoader(train_dataset,batch_size=32, shuffle=True)
eval_loader = paddle.io.DataLoader(eval_dataset,batch_size=8,shuffle=False)

print(train_dataset[1])


'''
核心

網(wǎng)絡(luò)搭建
'''

class MyDNN(paddle.nn.Layer):
    def __init__(self):
        super(MyDNN, self).__init__()

        #self.linear1 = paddle.nn.Linear(13,1,None) #全連接層,paddle.nn.Linear(in_features,out_features,weight)

        self.linear1 = paddle.nn.Linear(13, 32, None)

        self.linear2 = paddle.nn.Linear(32, 64, None)

        self.linear3 = paddle.nn.Linear(64, 32, None)

        self.linear4 = paddle.nn.Linear(32, 1, None)
    def forward(self, inputs): ## 傳播函數(shù)
        x = self.linear1(inputs)
        x = self.linear2(x)
        x = self.linear3(x)
        x = self.linear4(x)
        return x


'''
網(wǎng)絡(luò)訓(xùn)練與測試
'''


## 實例化
model = MyDNN()
model.train()
mse_loss = paddle.nn.MSELoss()
opt = paddle.optimizer.SGD(learning_rate=0.001, parameters=model.parameters())
epochs_num = 100


for epochs in range(epochs_num):
    for batch_id,data in enumerate(train_loader()):
        feature = data[0]
        label = data[1]
        predict = model(feature)
        loss = mse_loss(predict, label)
        loss.backward()
        opt.step()
        opt.clear_grad()
        if batch_id!=0 and batch_id%10 == 0:
            Batch = Batch+10
            Batchs.append(Batch)
            all_train_loss.append(loss.numpy()[0])
            print("epoch{},step:{},train_loss:{}".format(epochs,batch_id,loss.numpy()[0]))

paddle.save(model.state_dict(),"UCIHousingDNN")
draw_train_loss(Batchs,all_train_loss)



para_state = paddle.load("UCIHousingDNN")
model = MyDNN()
model.eval()
model.set_state_dict(para_state)
losses = []


for batch_id,data in enumerate(eval_loader()):
    feature = data[0]
    label = data[1]
    predict = model(feature)
    loss = mse_loss(predict,label)
    losses.append(loss.numpy()[0])
avg_loss = np.mean(losses)

print(avg_loss)


draw_infer_result(label,predict)

結(jié)果展示

文章題目:【深度學(xué)習(xí)】DNN房價預(yù)測
文章位置:http://m.kartarina.com/article2/dsogioc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航網(wǎng)站營銷軟件開發(fā)網(wǎng)站內(nèi)鏈營銷型網(wǎng)站建設(shè)移動網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司
主站蜘蛛池模板: 无码天堂va亚洲va在线va| 色AV永久无码影院AV| 亚洲第一极品精品无码久久| 少妇人妻无码专区视频| 免费无码毛片一区二区APP| 亚洲桃色AV无码| JLZZJLZZ亚洲乱熟无码| 在线无码视频观看草草视频| 亚洲中文久久精品无码1 | 亚洲人成国产精品无码| 亚洲国产精品无码观看久久| 久热中文字幕无码视频| 国产成人无码精品一区不卡| 人妻精品久久无码专区精东影业| 国模无码视频一区二区三区| 日韩精品久久无码人妻中文字幕| 国产精品无码一区二区三区在| 午夜无码国产理论在线| 国产精品午夜无码体验区| 啊灬啊别停灬用力啊无码视频| 久久久久成人精品无码中文字幕| 夜夜精品无码一区二区三区 | 国产成人无码免费看片软件| 亚洲AV无码一区二区三区人| 国产日韩AV免费无码一区二区| a级毛片免费全部播放无码| 中文字幕丰满乱子伦无码专区| 国产精品成人一区无码| 国产精品爆乳奶水无码视频| 亚无码乱人伦一区二区| 亚洲精品无码久久久久AV麻豆| 亚洲aⅴ无码专区在线观看| 亚洲最大av资源站无码av网址 | 无码人妻精品一区二区三区蜜桃| 国精品无码一区二区三区在线 | 激情无码亚洲一区二区三区| 无码av天天av天天爽| 久久国产精品成人无码网站| 精品久久久无码人妻中文字幕豆芽| 亚洲精品无码不卡| AV大片在线无码永久免费|