最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python利用AutoGrad實(shí)現(xiàn)自動(dòng)計(jì)算函數(shù)斜率和梯度

 更新時(shí)間:2022年07月25日 09:47:50   作者:Ckend  
AutoGrad 是一個(gè)老少皆宜的 Python 梯度計(jì)算模塊。對(duì)于大學(xué)生、機(jī)器學(xué)習(xí)愛(ài)好者而言,你只需要傳遞給它Numpy這樣的標(biāo)準(zhǔn)數(shù)據(jù)庫(kù)下編寫(xiě)的損失函數(shù),它就可以自動(dòng)計(jì)算損失函數(shù)的導(dǎo)數(shù)(梯度)。本文將從普通斜率計(jì)算開(kāi)始,介紹到如何只使用它來(lái)實(shí)現(xiàn)一個(gè)邏輯回歸模型

AutoGrad 是一個(gè)老少皆宜的 Python 梯度計(jì)算模塊。

對(duì)于初高中生而言,它可以用來(lái)輕易計(jì)算一條曲線在任意一個(gè)點(diǎn)上的斜率。

對(duì)于大學(xué)生、機(jī)器學(xué)習(xí)愛(ài)好者而言,你只需要傳遞給它Numpy這樣的標(biāo)準(zhǔn)數(shù)據(jù)庫(kù)下編寫(xiě)的損失函數(shù),它就可以自動(dòng)計(jì)算損失函數(shù)的導(dǎo)數(shù)(梯度)。

我們將從普通斜率計(jì)算開(kāi)始,介紹到如何只使用它來(lái)實(shí)現(xiàn)一個(gè)邏輯回歸模型。

1.準(zhǔn)備

開(kāi)始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上,如果沒(méi)有,可以訪問(wèn)這篇文章:超詳細(xì)Python安裝指南 進(jìn)行安裝。

(可選1) 如果你用Python的目的是數(shù)據(jù)分析,可以直接安裝Anaconda,它內(nèi)置了Python和pip.

(可選2) 此外,推薦大家用VSCode編輯器,它有許多的優(yōu)點(diǎn)

請(qǐng)選擇以下任一種方式輸入命令安裝依賴

1. Windows 環(huán)境 打開(kāi) Cmd (開(kāi)始-運(yùn)行-CMD)。

2. MacOS 環(huán)境 打開(kāi) Terminal (command+空格輸入Terminal)。

3. 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.

pip?install?autograd

2.計(jì)算斜率

對(duì)于初高中生同學(xué)而言,它可以用來(lái)輕松計(jì)算斜率,比如我編寫(xiě)一個(gè)斜率為0.5的直線函數(shù):

# 公眾號(hào) Python實(shí)用寶典
import?autograd.numpy?as?np
from?autograd?import?grad


def?oneline(x):
????y = x/2
????return?y

grad_oneline = grad(oneline)
print(grad_oneline(3.0))

運(yùn)行代碼,傳入任意X值,你就能得到在該X值下的斜率:

(base) G:\push\20220724>python 1.py
0.5

由于這是一條直線,因此無(wú)論你傳什么值,都只會(huì)得到0.5的結(jié)果。

那么讓我們?cè)僭囋囈粋€(gè)tanh函數(shù):

# 公眾號(hào) Python實(shí)用寶典
import?autograd.numpy?as?np
from?autograd?import?grad

def?tanh(x):
????y = np.exp(-2.0?* x)
????return?(1.0?- y) / (1.0?+ y)
grad_tanh = grad(tanh)
print(grad_tanh(1.0))

此時(shí)你會(huì)獲得 1.0 這個(gè) x 在tanh上的曲線的斜率:

(base) G:\push\20220724>python 1.py
0.419974341614026

我們還可以繪制出tanh的斜率的變化的曲線:

# 公眾號(hào) Python實(shí)用寶典
import?autograd.numpy?as?np
from?autograd?import?grad


def?tanh(x):
????y = np.exp(-2.0?* x)
????return?(1.0?- y) / (1.0?+ y)
grad_tanh = grad(tanh)
print(grad_tanh(1.0))

import?matplotlib.pyplot?as?plt
from?autograd?import?elementwise_grad?as?egrad
x = np.linspace(-7,?7,?200)
plt.plot(x, tanh(x), x, egrad(tanh)(x))
plt.show()

圖中藍(lán)色的線是tanh,橙色的線是tanh的斜率,你可以非常清晰明了地看到tanh的斜率的變化。非常便于學(xué)習(xí)和理解斜率概念。

3.實(shí)現(xiàn)一個(gè)邏輯回歸模型

有了Autograd,我們甚至不需要借用scikit-learn就能實(shí)現(xiàn)一個(gè)回歸模型:

邏輯回歸的底層分類就是基于一個(gè)sigmoid函數(shù):

import?autograd.numpy?as?np
from?autograd?import?grad

# Build a toy dataset.
inputs = np.array([[0.52,?1.12,?0.77],
???????????????????[0.88,?-1.08,?0.15],
???????????????????[0.52,?0.06,?-1.30],
???????????????????[0.74,?-2.49,?1.39]])
targets = np.array([True,?True,?False,?True])

def?sigmoid(x):
????return?0.5?* (np.tanh(x /?2.) +?1)

def?logistic_predictions(weights, inputs):
????# Outputs probability of a label being true according to logistic model.
????return?sigmoid(np.dot(inputs, weights))

從下面的損失函數(shù)可以看到,預(yù)測(cè)結(jié)果的好壞取決于weights的好壞,因此我們的問(wèn)題轉(zhuǎn)化為怎么優(yōu)化這個(gè) weights 變量:

def?training_loss(weights):
????# Training loss is the negative log-likelihood of the training labels.
????preds = logistic_predictions(weights, inputs)
????label_probabilities = preds * targets + (1?- preds) * (1?- targets)
????return?-np.sum(np.log(label_probabilities))

知道了優(yōu)化目標(biāo)后,又有Autograd這個(gè)工具,我們的問(wèn)題便迎刃而解了,我們只需要讓weights往損失函數(shù)不斷下降的方向移動(dòng)即可:

# Define a function that returns gradients of training loss using Autograd.
training_gradient_fun = grad(training_loss)

# Optimize weights using gradient descent.
weights = np.array([0.0,?0.0,?0.0])
print("Initial loss:", training_loss(weights))
for?i?in?range(100):
????weights -= training_gradient_fun(weights) *?0.01

print("Trained loss:", training_loss(weights))

運(yùn)行結(jié)果如下:

(base) G:\push\20220724>python regress.py
Initial loss: 2.772588722239781
Trained loss: 1.067270675787016

由此可見(jiàn)損失函數(shù)以及下降方式的重要性,損失函數(shù)不正確,你可能無(wú)法優(yōu)化模型。損失下降幅度太單一或者太快,你可能會(huì)錯(cuò)過(guò)損失的最低點(diǎn)。

總而言之,AutoGrad是一個(gè)你用來(lái)優(yōu)化模型的一個(gè)好工具,它可以給你提供更加直觀的損失走勢(shì),進(jìn)而讓你有更多優(yōu)化想象力。

有興趣的朋友還可以看官方的更多示例代碼:https://github.com/HIPS/autograd/blob/master/examples/

到此這篇關(guān)于Python利用AutoGrad實(shí)現(xiàn)自動(dòng)計(jì)算函數(shù)斜率和梯度的文章就介紹到這了,更多相關(guān)Python AutoGrad計(jì)算函數(shù)斜率 梯度內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用Python給頭像戴上圣誕帽的圖像操作過(guò)程解析

    使用Python給頭像戴上圣誕帽的圖像操作過(guò)程解析

    這篇文章主要介紹了使用Python給頭像戴上圣誕帽的過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 詳解Python中的List 2

    詳解Python中的List 2

    這篇文章主要為大家介紹了Python中的List,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-12-12
  • Python實(shí)現(xiàn)字符串中某個(gè)字母的替代功能

    Python實(shí)現(xiàn)字符串中某個(gè)字母的替代功能

    小編想實(shí)現(xiàn)這樣一個(gè)功能:將輸入字符串中的字母 “i” 變成字母 “p”。想著很簡(jiǎn)單,怎么實(shí)現(xiàn)呢?下面小編給大家?guī)?lái)了Python實(shí)現(xiàn)字符串中某個(gè)字母的替代功能,感興趣的朋友一起看看吧
    2019-10-10
  • 基于pytorch的保存和加載模型參數(shù)的方法

    基于pytorch的保存和加載模型參數(shù)的方法

    今天小編就為大家分享一篇基于pytorch的保存和加載模型參數(shù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • opencv python 圖片讀取與顯示圖片窗口未響應(yīng)問(wèn)題的解決

    opencv python 圖片讀取與顯示圖片窗口未響應(yīng)問(wèn)題的解決

    這篇文章主要介紹了opencv python 圖片讀取與顯示圖片窗口未響應(yīng)問(wèn)題的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • 一文秒懂pandas中iloc()函數(shù)

    一文秒懂pandas中iloc()函數(shù)

    iloc[]函數(shù)屬于pandas庫(kù)全稱為index?location,即對(duì)數(shù)據(jù)進(jìn)行位置索引,從而在數(shù)據(jù)表中提取出相應(yīng)的數(shù)據(jù),本文通過(guò)實(shí)例代碼介紹pandas中iloc()函數(shù),感興趣的朋友一起看看吧
    2023-04-04
  • Python?中給請(qǐng)求設(shè)置用戶代理?User-Agent的方法

    Python?中給請(qǐng)求設(shè)置用戶代理?User-Agent的方法

    本文介紹?HTTP?標(biāo)頭用戶代理主題以及如何使用?Python?中的請(qǐng)求設(shè)置用戶代理,您將了解?HTTP?標(biāo)頭及其在理解用戶代理、獲取用戶代理以及學(xué)習(xí)使用?Python?中的請(qǐng)求設(shè)置用戶代理的多種方法方面的重要性,感興趣的朋友跟隨小編一起看看吧
    2023-06-06
  • 高性能web服務(wù)器框架Tornado簡(jiǎn)單實(shí)現(xiàn)restful接口及開(kāi)發(fā)實(shí)例

    高性能web服務(wù)器框架Tornado簡(jiǎn)單實(shí)現(xiàn)restful接口及開(kāi)發(fā)實(shí)例

    Tornado和現(xiàn)在的主流Web服務(wù)器框架(包括大多數(shù)Python的框架)有著明顯的區(qū)別:它是非阻塞式服務(wù)器,而且速度相當(dāng)快。得利于其 非阻塞的方式和對(duì)epoll的運(yùn)用,Tornado每秒可以處理數(shù)以千計(jì)的連接,這意味著對(duì)于實(shí)時(shí)Web服務(wù)來(lái)說(shuō),Tornado是一個(gè)理想的Web框架。
    2014-07-07
  • Python generator生成器和yield表達(dá)式詳解

    Python generator生成器和yield表達(dá)式詳解

    這篇文章主要介紹了Python generator生成器和yield表達(dá)式詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • python爬蟲(chóng)把url鏈接編碼成gbk2312格式過(guò)程解析

    python爬蟲(chóng)把url鏈接編碼成gbk2312格式過(guò)程解析

    這篇文章主要介紹了python爬蟲(chóng)把url鏈接編碼成gbk2312格式過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06

最新評(píng)論

精河县| 山阳县| 恩施市| 漠河县| 遵化市| 昌吉市| 辛集市| 通辽市| 苍山县| 二手房| 始兴县| 武定县| 松滋市| 都江堰市| 西丰县| 彩票| 全椒县| 饶平县| 都兰县| 延津县| 台北市| 遵义县| 大庆市| 扶绥县| 贞丰县| 察哈| 长子县| 浏阳市| 酉阳| 右玉县| 弥渡县| 和平区| 五华县| 松溪县| 咸阳市| 正定县| 镇远县| 定西市| 德庆县| 瑞安市| 石楼县|