真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python深度學(xué)習(xí)算法實例分析-創(chuàng)新互聯(lián)

本篇內(nèi)容主要講解“Python深度學(xué)習(xí)算法實例分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“Python深度學(xué)習(xí)算法實例分析”吧!

站在用戶的角度思考問題,與客戶深入溝通,找到南通網(wǎng)站設(shè)計與南通網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都做網(wǎng)站、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名申請、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋南通地區(qū)。

最小二乘法

所有的深度學(xué)習(xí)算法都始于下面這個數(shù)學(xué)公式(我已將其轉(zhuǎn)成 Python 代碼)

Python

# y = mx + b

# m is slope, b is y-intercept

 

def compute_error_for_line_given_points(b, m, coordinates):

    totalError = 0

    for i in range(0, len(coordinates)):

        x = coordinates[i][0]

        y = coordinates[i][1]

        totalError += (y - (m * x + b)) ** 2

    return totalError / float(len(coordinates))

# example

compute_error_for_line_given_points(1, 2, [[3,6],[6,9],[12,18]])

最小二乘法在 1805 年由 Adrien-Marie Legendre 首次提出(1805, Legendre),這位巴黎數(shù)學(xué)家也以測量儀器聞名。他極其癡迷于預(yù)測彗星的方位,堅持不懈地尋找一種可以基于彗星方位歷史數(shù)據(jù)計算其軌跡的算法。

他嘗試了許多種算法,一遍遍試錯,終于找到了一個算法與結(jié)果相符。Legendre 的算法是首先預(yù)測彗星未來的方位,然后計算誤差的平方,最終目的是通過修改預(yù)測值以減少誤差平方和。而這也正是線性回歸的基本思想。

讀者可以在 Jupyter notebook 中運行上述代碼來加深對這個算法的理解。m 是系數(shù),b 是預(yù)測的常數(shù)項,coordinates 是彗星的位置。目標是找到合適的 m 和 b 使其誤差盡可能小。

Python深度學(xué)習(xí)算法實例分析

這是深度學(xué)習(xí)的核心思想:給定輸入值和期望的輸出值,然后尋找兩者之間的相關(guān)性。

梯度下降

Legendre 這種通過手動嘗試來降低錯誤率的方法非常耗時。荷蘭的**獎得主 Peter Debye 在一個世紀后(1909 年)正式提出了一種簡化這個過程的方法。

假設(shè) Legendre 的算法需要考慮一個參數(shù) —— 我們稱之為 X 。Y 軸表示每個 X 的誤差值。Legendre 的算法是找到使得誤差最小的 X。在下圖中,我們可以看到當(dāng) X = 1.1 時,誤差 Y 取到最小值。

Python深度學(xué)習(xí)算法實例分析

Peter Debye 注意到最低點左邊的斜率是負的,而另一邊則是正的。因此,如果知道了任意給定 X 的斜率值,就可以找到 Y 的最小值點。

這便是梯度下降算法的基本思想。幾乎所有的深度學(xué)習(xí)模型都會用到梯度下降算法。

要實現(xiàn)這個算法,我們假設(shè)誤差函數(shù)是 Error = x ^ 5 -2x ^ 3-2。要得到任意給定 X 的斜率,我們需要對其求導(dǎo),即 5x^4 – 6x^2:

如果您需要復(fù)習(xí)導(dǎo)數(shù)的相關(guān)知識,請觀看 Khan Academy 的視頻。

下面我們用 Python 實現(xiàn) Debye 的算法:

Python

current_x = 0.5 # the algorithm starts at x=0.5

learning_rate = 0.01 # step size multiplier

num_iterations = 60 # the number of times to train the function

 

#the derivative of the error function (x**4 = the power of 4 or x^4)

def slope_at_given_x_value(x):

   return 5 * x**4 - 6 * x**2

 

# Move X to the right or left depending on the slope of the error function

for i in range(num_iterations):

   previous_x = current_x

   current_x += -learning_rate * slope_at_given_x_value(previous_x)

   print(previous_x)

 

print("The local minimum occurs at %f" % current_x)

這里的竅門在于 learning_rate。我們通過沿斜率的相反方向行進來逼近最低點。此外,越接近最低點,斜率越小。因此當(dāng)斜率接近零時,每一步下降的幅度會越來越小。

num_iterations 是你預(yù)計到達最小值之前所需的迭代次數(shù)。可以通過調(diào)試該參數(shù)訓(xùn)練自己關(guān)于梯度下降算法的直覺。

線性回歸

最小二乘法配合梯度下降算法,就是一個完整的線性回歸過程。在 20 世紀 50 年代和 60 年代,一批實驗經(jīng)濟學(xué)家在早期的計算機上實現(xiàn)了這些想法。這個過程是通過實體打卡 —— 真正的手工軟件程序?qū)崿F(xiàn)的。準備這些打孔卡就需要幾天的時間,而通過計算機進行一次回歸分析最多需要 24 小時。

下面是用 Python 實現(xiàn)線性回歸的一個示例(我們不需要在打卡機上完成這個操作):

Python

#Price of wheat/kg and the average price of bread

wheat_and_bread = [[0.5,5],[0.6,5.5],[0.8,6],[1.1,6.8],[1.4,7]]

 

def step_gradient(b_current, m_current, points, learningRate):

    b_gradient = 0

    m_gradient = 0

    N = float(len(points))

    for i in range(0, len(points)):

        x = points[i][0]

        y = points[i][1]

        b_gradient += -(2/N) * (y - ((m_current * x) + b_current))

        m_gradient += -(2/N) * x * (y - ((m_current * x) + b_current))

    new_b = b_current - (learningRate * b_gradient)

    new_m = m_current - (learningRate * m_gradient)

    return [new_b, new_m]

 

def gradient_descent_runner(points, starting_b, starting_m, learning_rate, num_iterations):

    b = starting_b

    m = starting_m

    for i in range(num_iterations):

        b, m = step_gradient(b, m, points, learning_rate)

    return [b, m]

 

gradient_descent_runner(wheat_and_bread, 1, 1, 0.01, 100)

線性回歸本身并沒有引入什么新的內(nèi)容。但是,如何將梯度下降算法運用到誤差函數(shù)上就需要動動腦子了。運行代碼并使用這個線性回歸模擬器來加深你的理解吧。

感知機

接下來讓我們來認識一下 Frank Rosenblatt。這是一個白天解剖老鼠大腦,晚上尋找外星生命跡象的家伙。1958年,他發(fā)明了一個模仿神經(jīng)元的機器(1958, Rosenblatt),并因此登上《紐約時報》的頭條:“New Navy Device Learns By Doing”。

如果向 Rosenblatt 的機器展示 50 組分別在左右兩側(cè)有標記的圖像,它可以在沒有預(yù)先編程的情況下分辨出兩張圖像(標記的位置)。大眾被這個可能真正擁有學(xué)習(xí)能力的機器震驚了。

Python深度學(xué)習(xí)算法實例分析

如上圖所示,每個訓(xùn)練周期都是從左側(cè)輸入數(shù)據(jù)開始。給所有輸入數(shù)據(jù)添加一個初始的隨機權(quán)重。然后將它們相加。如果總和為負,將其輸出為 0,否則輸出為 1。

如果預(yù)測結(jié)果是正確的,就不改變循環(huán)中的權(quán)重。如果預(yù)測結(jié)果是錯誤的,可以用誤差乘以學(xué)習(xí)率來相應(yīng)地調(diào)整權(quán)重。

我們用經(jīng)典的“或”邏輯來運行感知機。

from __future__ import division, print_function, absolute_import

import tflearn

from tflearn.layers.core import dropout, fully_connected

from tensorflow.examples.tutorials.mnist import input_data

from tflearn.layers.conv import conv_2d, max_pool_2d

from tflearn.layers.normalization import local_response_normalization

from tflearn.layers.estimator import regression

# Data loading and preprocessing

mnist = input_data.read_data_sets("/data/", one_hot=True)

X, Y, testX, testY = mnist.train.images, mnist.train.labels, mnist.test.images, mnist.test.labels

X = X.reshape([-1, 28, 28, 1])

testX = testX.reshape([-1, 28, 28, 1])

# Building convolutional network

network = tflearn.input_data(shape=[None, 28, 28, 1], name='input')

network = conv_2d(network, 32, 3, activation='relu', regularizer="L2")

network = max_pool_2d(network, 2)

network = local_response_normalization(network)

network = conv_2d(network, 64, 3, activation='relu', regularizer="L2")

network = max_pool_2d(network, 2)

network = local_response_normalization(network)

network = fully_connected(network, 128, activation='tanh')

network = dropout(network, 0.8)

network = fully_connected(network, 256, activation='tanh')

network = dropout(network, 0.8)

network = fully_connected(network, 10, activation='softmax')

network = regression(network, optimizer='adam', learning_rate=0.01,

                        loss='categorical_crossentropy', name='target')

# Training

model = tflearn.DNN(network, tensorboard_verbose=0)

model.fit({'input': X}, {'target': Y}, n_epoch=20,

            validation_set=({'input': testX}, {'target': testY}),

            snapshot_step=100, show_metric=True, run_id='convnet_mnist')

到此,相信大家對“Python深度學(xué)習(xí)算法實例分析”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!


網(wǎng)站名稱:Python深度學(xué)習(xí)算法實例分析-創(chuàng)新互聯(lián)
網(wǎng)頁路徑:http://weahome.cn/article/dphihh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部