国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

人工智能學(xué)習(xí)與實(shí)訓(xùn)筆記(一):零基礎(chǔ)理解神經(jīng)網(wǎng)絡(luò)

這篇具有很好參考價值的文章主要介紹了人工智能學(xué)習(xí)與實(shí)訓(xùn)筆記(一):零基礎(chǔ)理解神經(jīng)網(wǎng)絡(luò)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

人工智能專欄文章匯總:人工智能學(xué)習(xí)專欄文章匯總-CSDN博客

本篇目錄

一、什么是神經(jīng)網(wǎng)絡(luò)模型

二、機(jī)器學(xué)習(xí)的類型

2.1 監(jiān)督學(xué)習(xí)

2.2 無監(jiān)督學(xué)習(xí)

2.3 半監(jiān)督學(xué)習(xí)

2.4 強(qiáng)化學(xué)習(xí)

三、網(wǎng)絡(luò)模型結(jié)構(gòu)基礎(chǔ)

3.1 單層網(wǎng)絡(luò)

?編輯

3.2 多層網(wǎng)絡(luò)

3.3?非線性多層網(wǎng)絡(luò)

?四、 神經(jīng)網(wǎng)絡(luò)解決回歸問題實(shí)操:使用Python和NumPy實(shí)現(xiàn)波士頓房價預(yù)測任務(wù)


一、什么是神經(jīng)網(wǎng)絡(luò)模型

簡而言之:神經(jīng)網(wǎng)絡(luò)模型是擬合現(xiàn)實(shí)問題的函數(shù)方程,通過輸入得到輸出。

只不過這個函數(shù)是用神經(jīng)網(wǎng)絡(luò)的參數(shù)來擬合的,神經(jīng)網(wǎng)絡(luò)的參數(shù)是通過大量數(shù)據(jù)的訓(xùn)練獲得,訓(xùn)練效果越好,則函數(shù)越逼近現(xiàn)實(shí)情況,就可以用來解決各種實(shí)際任務(wù)。

一個簡單的網(wǎng)絡(luò)模型函數(shù)如下:

y=w1*x1 + w2*x2 + w3*x3...?

其中,y是函數(shù)值(模型輸出的預(yù)測值),x1,x2, x3...是輸入值(又叫特征值),w1, w2, w3...是網(wǎng)絡(luò)參數(shù)。

機(jī)器學(xué)習(xí)最根本的目的在于訓(xùn)練出在某個問題上泛化能力強(qiáng)的模型。泛化能力強(qiáng)是指在某問題的所有數(shù)據(jù)上都能很好地反應(yīng)輸入和輸出之間的關(guān)系,無論是訓(xùn)練數(shù)據(jù),還是測試數(shù)據(jù),還是任何屬于該問題的未知數(shù)據(jù)

神經(jīng)網(wǎng)絡(luò)經(jīng)常處理的問題包括:回歸問題,圖像分類問題,目標(biāo)檢測問題,自然語言處理,喜好推薦等等。

二、機(jī)器學(xué)習(xí)的類型

根據(jù)訓(xùn)練期間接受的監(jiān)督數(shù)量和監(jiān)督類型,可以將機(jī)器學(xué)習(xí)分為以下四種類型:監(jiān)督學(xué)習(xí)、非監(jiān)督學(xué)習(xí)、半監(jiān)督學(xué)習(xí)和強(qiáng)化學(xué)習(xí)。

2.1 監(jiān)督學(xué)習(xí)

在監(jiān)督學(xué)習(xí)中,提供給算法的包含所需解決方案的訓(xùn)練數(shù)據(jù),成為標(biāo)簽或標(biāo)記。

人工智能學(xué)習(xí)與實(shí)訓(xùn)筆記(一):零基礎(chǔ)理解神經(jīng)網(wǎng)絡(luò),人工智能技術(shù)學(xué)習(xí),人工智能,學(xué)習(xí),筆記?


簡單地說,就是監(jiān)督學(xué)習(xí)是包含自變量和因變量(有Y),同時可以用于分類和回歸。下來常見的算法都是監(jiān)督學(xué)習(xí)算法。

  • K近鄰算法
  • 線性回歸
  • logistic回歸
  • 支持向量機(jī)(SVM)
  • 決策樹和隨機(jī)森林
  • 神經(jīng)網(wǎng)絡(luò)

2.2 無監(jiān)督學(xué)習(xí)

無監(jiān)督學(xué)習(xí)的訓(xùn)練數(shù)據(jù)都是未經(jīng)標(biāo)記的,算法會在沒有指導(dǎo)的情況下自動學(xué)習(xí)。

人工智能學(xué)習(xí)與實(shí)訓(xùn)筆記(一):零基礎(chǔ)理解神經(jīng)網(wǎng)絡(luò),人工智能技術(shù)學(xué)習(xí),人工智能,學(xué)習(xí),筆記?


簡單地說,就是訓(xùn)練數(shù)據(jù)只有自變量沒有因變量(就是沒有Y)。

無監(jiān)督學(xué)習(xí)的常見算法如下:

  • 聚類算法
    • K均值算法(K-means)
    • 基于密度的聚類方法(DBSCAN)
    • 最大期望算法
  • 可視化和降維
    • 主成分分析
    • 核主成分分析
  • 關(guān)聯(lián)規(guī)則學(xué)習(xí)
    • Apriori
    • Eclat

比如說,我們有大量的購物訪客的數(shù)據(jù),包括一個月內(nèi)的到達(dá)次數(shù)、購買次數(shù)、平均客單價、購物時長、購物種類、數(shù)量等,我們可以通過聚類算法,自動的把這些人分成幾個類別,分類后,我們可以人工的把這些分類標(biāo)記,如企業(yè)客戶、家庭主婦等,也可以分成更細(xì)的分類。

人工智能學(xué)習(xí)與實(shí)訓(xùn)筆記(一):零基礎(chǔ)理解神經(jīng)網(wǎng)絡(luò),人工智能技術(shù)學(xué)習(xí),人工智能,學(xué)習(xí),筆記?


另一種任務(wù)是降維,降維的目的在于不丟失太多的信息的情況下簡化數(shù)據(jù)。方法之一就是講多個特征合并為一個特征,特變是特征之間存在很大的相關(guān)性的變量。如汽車的里程和使用年限是存在很大的相關(guān)性的,所以降維算法可以將它們合并為一個表示汽車磨損的特征。這個過程就叫做特征提取。

另一個典型的無監(jiān)督學(xué)習(xí)的是異常檢測,如可以從檢測信用卡交易中發(fā)現(xiàn)異常,并且這些異常我們實(shí)現(xiàn)沒有標(biāo)記的,算法可以自動發(fā)現(xiàn)異常。

人工智能學(xué)習(xí)與實(shí)訓(xùn)筆記(一):零基礎(chǔ)理解神經(jīng)網(wǎng)絡(luò),人工智能技術(shù)學(xué)習(xí),人工智能,學(xué)習(xí),筆記?

2.3 半監(jiān)督學(xué)習(xí)


有些算法可以處理部分標(biāo)記的訓(xùn)練數(shù)據(jù),通常是大量未標(biāo)記的數(shù)據(jù)和少量標(biāo)記的數(shù)據(jù),這種成為半監(jiān)督學(xué)習(xí)。

如照片識別就是很好的例子。在線相冊可以指定識別同一個人的照片(無監(jiān)督學(xué)習(xí)),當(dāng)你把這些同一個人增加一個標(biāo)簽的后,新的有同一個人的照片就自動幫你加上標(biāo)簽了。

人工智能學(xué)習(xí)與實(shí)訓(xùn)筆記(一):零基礎(chǔ)理解神經(jīng)網(wǎng)絡(luò),人工智能技術(shù)學(xué)習(xí),人工智能,學(xué)習(xí),筆記?


大多數(shù)半監(jiān)督學(xué)習(xí)算法都是無監(jiān)督和監(jiān)督算法的結(jié)合。例如深度信念網(wǎng)絡(luò)(DBN)基于一種相互堆疊的無監(jiān)督式組件。

2.4 強(qiáng)化學(xué)習(xí)

強(qiáng)化學(xué)習(xí)是一個非常與眾不同的算法,它的學(xué)習(xí)系統(tǒng)能夠觀測環(huán)境,做出選擇,執(zhí)行操作并獲得回報,或者是以負(fù)面回報的形式獲得懲罰。它必須自行學(xué)習(xí)什么是最好的策略,從而隨著時間推移獲得最大的回報。

人工智能學(xué)習(xí)與實(shí)訓(xùn)筆記(一):零基礎(chǔ)理解神經(jīng)網(wǎng)絡(luò),人工智能技術(shù)學(xué)習(xí),人工智能,學(xué)習(xí),筆記?


例如,許多機(jī)器人通過強(qiáng)化學(xué)習(xí)算法來學(xué)習(xí)如何行走。AlphaGo項目也是一個強(qiáng)化學(xué)習(xí)的好例子。

三、網(wǎng)絡(luò)模型結(jié)構(gòu)基礎(chǔ)

3.1 單層網(wǎng)絡(luò)

(輸入層) --w--> (輸出層)

?

3.2 多層網(wǎng)絡(luò)

(輸入層) --w--> (隱含層) --w--> (隱含層) ... --> (輸出層)

人工智能學(xué)習(xí)與實(shí)訓(xùn)筆記(一):零基礎(chǔ)理解神經(jīng)網(wǎng)絡(luò),人工智能技術(shù)學(xué)習(xí),人工智能,學(xué)習(xí),筆記?

3.3?非線性多層網(wǎng)絡(luò)

單層網(wǎng)絡(luò)和多層網(wǎng)絡(luò)默認(rèn)只能表達(dá)線性變換,加入非線性激活函數(shù)后,可以表達(dá)非線性函數(shù):

(輸入層) --w--> (隱含層) --> (激活函數(shù)) --w--> (隱含層) --> (激活函數(shù)) ... --> (輸出層)

人工智能學(xué)習(xí)與實(shí)訓(xùn)筆記(一):零基礎(chǔ)理解神經(jīng)網(wǎng)絡(luò),人工智能技術(shù)學(xué)習(xí),人工智能,學(xué)習(xí),筆記?

加入非線性激勵函數(shù)后,神經(jīng)網(wǎng)絡(luò)就有可能學(xué)習(xí)到平滑的曲線來分割平面,而不是用復(fù)雜的線性組合逼近平滑曲線來分割平面,使神經(jīng)網(wǎng)絡(luò)的表示能力更強(qiáng)了,能夠更好的擬合目標(biāo)函數(shù)。 這就是為什么我們要有非線性的激活函數(shù)的原因。

關(guān)于激活函數(shù),可以參考:卷積神經(jīng)網(wǎng)絡(luò)中的激活函數(shù)sigmoid、tanh、relu_卷積神經(jīng)網(wǎng)絡(luò)激活函數(shù)_chaiky的博客-CSDN博客

?四、 神經(jīng)網(wǎng)絡(luò)解決回歸問題實(shí)操:使用Python和NumPy實(shí)現(xiàn)波士頓房價預(yù)測任務(wù)

神經(jīng)網(wǎng)絡(luò)模型預(yù)測數(shù)據(jù)中比較常見的是回歸問題,根據(jù)輸入的數(shù)值得到輸出的數(shù)值。使用Python來實(shí)現(xiàn)波士頓房價預(yù)測是AI課程里類似“hello world”的經(jīng)典入門案例,主要有以下一些要點(diǎn)需注意:

1. 樣本數(shù)據(jù)需要?dú)w一化,使得后續(xù)的神經(jīng)網(wǎng)絡(luò)模型參數(shù)可表征有效的權(quán)重。樣本數(shù)據(jù)歸一化是以列(特征值)為單位的。注意,在用測試集測試模型時,模型輸出的函數(shù)預(yù)測值需要進(jìn)行反歸一化。


2. 數(shù)據(jù)集劃分:80%用于訓(xùn)練,20%用于測試,訓(xùn)練和測試數(shù)據(jù)集必須分開,才能驗證網(wǎng)絡(luò)的有效性。


3. 影響波士頓房價的樣本數(shù)據(jù)有13個特征值,每個特征值會有不同的權(quán)重,因此神經(jīng)網(wǎng)絡(luò)模型的可調(diào)參數(shù)為13個,分別代表不同特征值對最終房價影響的權(quán)重:y=w1*x1 + w2*x2 + ... +w13*x13


4. 損失函數(shù)是模型輸出的值與樣本數(shù)據(jù)中實(shí)際值偏差的一種表達(dá)函數(shù),損失函數(shù)的選擇既要考慮準(zhǔn)確衡量問題的“合理性”,也還要考慮“易于優(yōu)化求解”。


5. 訓(xùn)練過程就是通過不斷調(diào)整網(wǎng)絡(luò)模型參數(shù),將損失函數(shù)的值降到最?。ㄊ諗浚┑倪^程, 損失函數(shù)的收斂需要通過梯度下降法來不斷訓(xùn)練。以房價預(yù)測任務(wù)為例,影響房價的特征值有13個,因此我們需要調(diào)教的模型參數(shù)也是13個,這13個特征值和損失函數(shù)的值共同構(gòu)成一個14維的空間,在這個空間中存在一個方向(13個參數(shù)構(gòu)成向量決定這個方向)使得損失函數(shù)的值(預(yù)測值和實(shí)際值之偏差)下降最快。我們步進(jìn)地將13個參數(shù)構(gòu)成的向量朝此方向做出微調(diào),再重新計算損失函數(shù)的值,如此往復(fù),直到損失函數(shù)的值收斂趨于最小,則參數(shù)訓(xùn)練完成。

6. 數(shù)據(jù)集采用分批訓(xùn)練的方式,batch的取值會影響模型訓(xùn)練效果,batch過大,會增大內(nèi)存消耗和計算時間,且訓(xùn)練效果并不會明顯提升(每次參數(shù)只向梯度反方向移動一小步,因此方向沒必要特別精確);batch過小,每個batch的樣本數(shù)據(jù)沒有統(tǒng)計意義,計算的梯度方向可能偏差較大。由于房價預(yù)測模型的訓(xùn)練數(shù)據(jù)集較小,因此將batch設(shè)置為10

人工智能學(xué)習(xí)與實(shí)訓(xùn)筆記(一):零基礎(chǔ)理解神經(jīng)網(wǎng)絡(luò),人工智能技術(shù)學(xué)習(xí),人工智能,學(xué)習(xí),筆記?? ? ? ?人工智能學(xué)習(xí)與實(shí)訓(xùn)筆記(一):零基礎(chǔ)理解神經(jīng)網(wǎng)絡(luò),人工智能技術(shù)學(xué)習(xí),人工智能,學(xué)習(xí),筆記?

Python源碼 -?波士頓房價模型訓(xùn)練及測試:文章來源地址http://www.zghlxwxcb.cn/news/detail-830288.html

# 導(dǎo)入需要用到的package
import numpy as np
import json
import matplotlib.pyplot as plt

def load_data():
    # 從文件導(dǎo)入數(shù)據(jù)
    datafile = './work/housing.data'
    data = np.fromfile(datafile, sep=' ')

    # 每條數(shù)據(jù)包括14項,其中前面13項是影響因素,第14項是相應(yīng)的房屋價格中位數(shù)
    feature_names = [ 'CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', \
                      'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV' ]
    feature_num = len(feature_names)

    # 將原始數(shù)據(jù)進(jìn)行Reshape,變成[N, 14]這樣的形狀
    data = data.reshape([data.shape[0] // feature_num, feature_num])

    # 將原數(shù)據(jù)集拆分成訓(xùn)練集和測試集
    # 這里使用80%的數(shù)據(jù)做訓(xùn)練,20%的數(shù)據(jù)做測試
    # 測試集和訓(xùn)練集必須是沒有交集的
    ratio = 0.8
    offset = int(data.shape[0] * ratio)
    training_data = data[:offset]

    # 計算訓(xùn)練集的最大值,最小值(找的是每一列的極值)
    global maximums, minimums
    #maximums, minimums = data.max(axis=0), data.min(axis=0)
    maximums, minimums = training_data.max(axis=0), training_data.min(axis=0)
    #print("max:", maximums, "min:", minimums)

    # 對數(shù)據(jù)進(jìn)行歸一化處理,按列歸一化處理
    for i in range(feature_num):
        data[:, i] = (data[:, i] - minimums[i]) / (maximums[i] - minimums[i])
    #print("歸一化后的數(shù)據(jù):\n", data)

    # 訓(xùn)練集和測試集的劃分比例
    training_data = data[:offset]
    test_data = data[offset:]
    return training_data, test_data

# 獲取數(shù)據(jù)
training_data, test_data = load_data()
x = training_data[:, :-1] #所有行+所有列(除了最后一列)
y = training_data[:, -1:] #所有行+最后一列

#w = [1, 2, 3] #shape = (3,)
#w = [[1], [2], [3]] #shape = (3,1)
#w = [[1,1], [2,2], [3,3]] #shape = (3,2)
#x = np.array(w)
# 查看數(shù)據(jù)
#print(x.shape)
#print(y.shape)

class Network(object):
    def __init__(self, num_of_weights):
        # 隨機(jī)產(chǎn)生w的初始值
        # 為了保持程序每次運(yùn)行結(jié)果的一致性,
        # 此處設(shè)置固定的隨機(jī)數(shù)種子
        np.random.seed(0)
        self.w = np.random.randn(num_of_weights, 1)
        #print("init self.w", self.w)
        self.b = 0.
        
    def forward(self, x):
        z = np.dot(x, self.w) + self.b #x是[404,13]的矩陣(404行,13列), w是[13, 1]的矩陣(13行,1列),做點(diǎn)乘
        return z

    def loss(self, z, y):
        error = z - y
        #print(error.shape)
        cost = error * error
        cost = np.mean(cost)
        return cost

    def gradient(self, x, y):
        z = self.forward(x)
        gradient_w = (z-y)*x #梯度公式
        gradient_w = np.mean(gradient_w, axis=0) #對各列求均值
        gradient_w = gradient_w[:, np.newaxis]
        gradient_b = (z - y)
        gradient_b = np.mean(gradient_b)   
        return gradient_w, gradient_b

    def update(self, gradient_w, gradient_b, eta = 0.01):
        self.w = self.w - eta * gradient_w
        self.b = self.b - eta * gradient_b
        
    def train(self, x, y, iterations=100, eta=0.01):
        losses = []
        for i in range(iterations):
            z = self.forward(x)
            L = self.loss(z, y)
            gradient_w, gradient_b = self.gradient(x, y)
            self.update(gradient_w, gradient_b, eta)
            losses.append(L)
            if (i+1) % 10000 == 0:
               print('iter {}, loss {}'.format(i, L))
        return losses

# 運(yùn)行模式一:每次用所有數(shù)據(jù)進(jìn)行訓(xùn)練
train_data, test_data = load_data()
x = train_data[:, :-1]
#print("x.shape:", x.shape)
y = train_data[:, -1:]
# 創(chuàng)建網(wǎng)絡(luò)
net = Network(13)
num_iterations=100000
# 啟動訓(xùn)練
losses = net.train(x,y, iterations=num_iterations, eta=0.01)

# 畫出損失函數(shù)的變化趨勢
"""
plot_x = np.arange(num_iterations)
plot_y = np.array(losses)
plt.plot(plot_x, plot_y)
plt.show()
"""

#對數(shù)據(jù)做反歸一化處理
def restore_data(d):
     d = d* (maximums[-1] - minimums[-1]) + minimums[-1]
     return round(d,2)

#用測試集做測試
print("測試集測試結(jié)果:")
x = test_data[:, :-1]
y = test_data[:, -1:]
z = net.forward(x)
print("樣本數(shù)據(jù)", "\t", "預(yù)測數(shù)據(jù)")
print("-------------------------")
for i in range(x.shape[0]):
    print(restore_data(y[i][0]), "\t\t", restore_data(z[i][0]))



到了這里,關(guān)于人工智能學(xué)習(xí)與實(shí)訓(xùn)筆記(一):零基礎(chǔ)理解神經(jīng)網(wǎng)絡(luò)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包